2

BDD プラクティスを組織に適用しようとしています。私が働いている銀行では、毎晩のバッチ ジョブが、実行中のバッチ ジョブと相互にデータをやり取りする巨大なオーケストレーション マルチシステム フローです。

テスト中、インタラクティブなオンライン テストはおそらくテスト シナリオの 40 ~ 50% にすぎず、残りはバッチ ジョブに組み込まれています。例として、テスト シナリオは次のようになります。

  1. 午後 10 時現在、私の普通預金口座の残高が 100 ドルだとすると、
  2. 毎晩のバッチが午後 11 時に実行される場合
  3. 次に、バッチ実行が終了した後の午前 3 時に戻ってきて、$0.001 の追加の未収利息があることを確認する必要があります。
  4. また、銀行の総勘定元帳には、未収利息 $0.001 のエントリが追加されているはずです。

ご覧のとおり、これは非常に非同期的なシナリオです。Cucumber を使用してトリガーする場合、午後 10 時までに 100 ドルの残高をアカウントに挿入するステップ定義をおそらく作成できますが、バッチ ジョブが午後 11 時に実行されるようにバッチをトリガーするために Cucumber を使用するのは現実的ではありません。通常、オペレータは Control-M などの独自のスケジューリング ツールを使用して実行します。そして、Cucumber を数時間待ってから、発生した利息を確認します。タイムアウトになるかどうかはわかりません。

これは 1 つのシナリオにすぎません。バッチ実行は銀行にとって非常にコストがかかるため、1 回のバッチ実行にできるだけ多くのシナリオを適用するよう常に取り組んでいます。また、定期預金期間の終了時の最終的な利息が正しいかどうかを確認するためだけに 6 か月のバッチを実行する必要があるエージング シナリオもあります (Cucumber をそれほど長く待たせて聞くことは絶対にできませんよね?)

私の質問は、BDD プラクティスがこれらのような大規模なバッチ シナリオに適用された例はありますか? これにどのようにアプローチしますか?

編集して、私が管理している分離されたテスト シナリオを実行することを目的としていない理由を説明します。

テスト レベルの 1 つで個別のシナリオを実行し (私の銀行ではシステム テストと呼んでいます)、BDD は実際にそのコンテキストで機能します。しかし最終的には、エンド ツー エンド環境全体 (通常は SIT) を持つテスト レベルに到達する必要があります。この環境では、複数のテスト シナリオを並行して実行することが条件であり、いずれのシナリオも環境を完全に制御することはできません。プロジェクトの範囲によっては、この環境で最大 200 個のアプリケーションを実行できます。そのため、インターネット バンキングなどの顧客チャネルではトランザクション シナリオが実行され、コア バンキング システムでは金利計算や自動送金などのシナリオが実行されます。総勘定元帳システムが環境内のすべてのアカウントを統合してバランスをとる会計シナリオもあります。

私がやろうとしているのは、BDD フレームワークを活用してテストの実行を自動化し、結果をキャプチャして、環境内のすべてを手動で追跡する必要がないようにする方法を見つけることです。

4

2 に答える 2

1

シナリオの実行を制御できていないように思えます。

明らかに、結果を検証する前に数時間待つのは得策ではありません。

このシナリオで関心のあるバッチの一部だけを抽出することは可能ですか? それが可能であれば、実行時間が 4 ~ 6 時間になるとは思いません。

必要な機能を単独で実行できない場合は、システムのテスト能力に問題があります。これは非常に一般的であり、本当に対処したいことです。テストする唯一の方法がシステム全体を実行することである場合、テストが必要なすべての組み合わせを実行するのは困難であり、場合によっては不可能であるため、システムが適切に機能していると自信を持って言うことはできません。

残念ながら、迅速な修正は存在しないようです。迅速かつ確実に検証するには、システムの小さな部分を検証できる立場にいる必要があります。また、検証に Cucumber やその他のツールを使用しているかどうかは関係ありません。すべてのツールで同じ問題が発生します。

于 2016-05-12T06:23:23.637 に答える
0

検討できるアプローチの 1 つは、各バッチ実行の結果をクエリするレポート プロセスを用意することです。次に、関心のある結果 (つまり、テストからの結果) をテスト分析データベースに保存します。

各バッチ実行には一意の識別子があると想定しています。この識別子は、テスト結果のキーとして使用されます。

これがどのように機能するかの例を次に示します。

  • バッチの実行がいつ終了するかがわかります (これが午前 4 時だとします)。テスト アカウントを分析するバッチ実行の完了後 (午前 5 時など) にレポート ジョブを開始するようにスケジュールします。
  • レポート ジョブは、アカウント X とアカウント Y を調べます。バッチ実行の一意の識別子と共に、アカウントの金額をテーブルに記録します。この情報は、テスト結果データベースに保存されます。
  • 別のプロセスで、テスト シナリオとテスト結果を照合します。これは、テスト シナリオ 29 がバッチ ラン ZZ20 に関連付けられていることを認識しているため、バッチ ラン ZZ20 からの分析についてテスト結果データベースを検索します。
  • 朝、テストエンジニアが実行結果をチェックします。彼らは、テスト シナリオ 29 が失敗したことを確認しました。アカ​​ウント X には、予想された 100.001 ポンドではなく 100 ポンドしかなかったからです。

この設定により、非同期バッチ実行を同期的に処理できます。ただし、テストシナリオとテスト結果のレポートとリンクに関して多くの自動化を行う必要があるため、構成は困難です。

于 2016-05-12T09:11:37.887 に答える