見出し画像

バッチ処理のテスト観点について

バッチ処理について簡単に定義を紹介するとhttps://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%81%E5%87%A6%E7%90%86

バッチ処理(バッチしょり)は、ひとまとまりのデータを一括して処理する方式である

バッチ処理は非同期処理であり、リアルタイムに処理されるのとは異なります。そのためソフトウェアテストにおいても特別な考慮が必要になります。

具体例

(実際のところどうなのかは知りませんが)たとえばnoteの書いた記事に対して閲覧数(ビュー)を午前7時、午後14時と1日2回のバッチ実行により加算するとします。対象期間はバッチ実行の1時間前までの閲覧だとします。

記事Xに対して午前5時30分にAさんが閲覧し、午前6時15分にBさんが閲覧し、午後12時50分にCさんが閲覧したとします。リアルタイムに処理されるのであれば閲覧直後に閲覧数が反映しますが、バッチ処理の場合、午前7時までは閲覧数0件、午後7時のバッチ処理後午後14時のバッチ処理までは1件(Bさんは午前7時前に閲覧したが対象期間の1時間前までに含まれない)、午後14時のバッチ処理後は3件(ここでBさんの閲覧も加算される)になると思います。

バッチ処理前に状態変化があったら?

例えば下書きについては閲覧数をカウントしないとします。もしバッチ処理前に公開中に記事を下書きに戻したらどうなるでしょうか?

上の例で言えば午前6時まで公開状態で午前6時に記事を下書きに戻したとしたら、公開時にAさんが閲覧したデータはどうなるのでしょうか?そして午後13時に再度記事を公開したらどうなるのでしょうか?

複数の処理が実行されたら?

閲覧数は1ユーザーが何回閲覧しても1回だとします。対象期間に1ユーザーが2回閲覧した場合どのように処理されるでしょうか?また、別の対象期間に2回目の閲覧をした場合どのように処理されるでしょうか?

上の例で言うと午前5時30分にAさんが記事を閲覧して、さらに午前6時に2回目の閲覧をした場合と、午後13時に2回目の閲覧をした場合とそれぞれ2回目がカウントされないことを確認した方が良いかもしれません。

途中で想定外のエラーで止まったら?

例えばバッチ処理に5分かかるとして、処理の開始2分後にインフラ障害発生して処理が途中で止まったとします。残り3分を再実行できるでしょうか?ソフトウェアの品質特性の保守性というのはバッチ処理には重要な要素になると思われます。

まとめ

ソフトウェアテストのブラックボックステストと言っても、リアルタイムに処理するのかバッチ処理するのかによってテスト観点は大きく異なると思います。ソフトウェアテストを専門に扱う人もある程度は対象のソフトウェアの内部仕様について把握している必要はあると思います。

いただいたサポートは生活費にあてます