システム開発におけるテスト工程も、細分化すると単体テスト・結合テスト・総合(システム)テスト・受入れテストといったように、いくつかのフェーズに分かれます。
各テスト工程では、テストすべき項目の観点が異なりますので、テスト仕様書を作成する際には「このテストでは何を確認するのか」を強く意識しながらテスト項目を作成していかねばなりません。
ということでテスト工程におけるテスト項目の観点について、ご説明していきたいと思います。
単体テスト
単体テストはプログラム単位でテストを行っていくのですが、テストのポイントは「条件網羅」です。
プログラムの中ではさまざまな分岐処理が入るかと思いますが、処理が分岐すればそれぞれで異なる処理が走ります。どのような処理パターンに入ろうとも、しかるべき処理を達成できるのか、そうしたことを観点にテスト項目を練っていきます。
上記のように考えれば、必然的に正常処理となるケースだけでなく、異常処理となるケースの確認も行わなければなりません。それこそエラー判定を起こすような条件についても、漏れなく確認します。
そのため単体テストを実施する場合は、テスト対象となるソースを一番理解しているであろう、そのコードを書いたプログラマ本人がテストケースを作成し、実施していくのが漏れをなくすという意味でも良いでしょう(思い込みには注意ですが)。
もし画面がなくてモジュール単位でのテストとなる場合は、DB内のインプットデータや、中間ファイルとしてアウトップットされるデータを見てエビデンスをつくっていきましょう。
結合テスト
結合テストでは個々のプログラムを連結させてシステムとしての動きを確認していくのですが、テストのポイントは「入力データと出力データの関係性」です。
画面系のシステムであれば、画面への入力値に対して、予期すべきアウトプット(画面表示、帳票出力、CSV出力など)が行われるかを確認します。
バッチ系のシステムであれば、バッチを流してしかるべき処理結果となるかを、確認していきます。
また結合テストではゼロ件チェックや境界値チェックも忘れてはいけません。それに加え、NULL値と空文字の違いなんかも気をつけたいところですね。
Microsoft Visual Studioなんかを使用していると画面ありきのシステムとなりますし、プログラム単体でリッチな表現ができるようになった昨今、単体テストと結合テストはひとまとめにして実施されることも多いですが、しっかりとテスト項目の観点だけは理解しておきましょう。
総合(システム)テスト
総合テストやシステムテストといった呼び方をしますが、総合テストからはSEの仕事。総合テストのポイントは「お客様の求める要件がシステムで実現できているか」です。
システム開発の上流工程では、お客様がシステムで実現したい要件を定義していくわけですが、それがしっかりとシステムにて実現できているのかを観点にしてチェック項目を作成していきます。
(それに加えて処理速度なんかも意識したいところですね。)
例えば定義した要件を仕様に落としこんでいく段階で、SEが勘違いをして仕様作成をしてしまうと、結合テストまではOKだけど、総合テストはNGなんてことになるわけです。
そうすると設計段階に手戻りしなければならなくなり、再度製造⇒単体テスト⇒結合テストとこなしていくため、作業工数が膨らんでしまいます。総合テストでの致命的なバグは予算的にも精神的にも消耗してしまうので、できるだけ起こさないように、プロジェクトスタート時のSEの仕事は丁寧にこなしたいものです。
受入れテスト
いよいよテスト工程も最終段階。受入れテストのポイントは「お客様環境でも正常に動作するか」です。
多くの場合、総合テストまでは自社内で作業することが多く、ネットワーク構成やクライアント機の環境など、お客様先とは機器構成が異なった環境でテストを行ってきました。
それを受入れテストでは、本番環境で稼働することを想定して、お客様環境でテストを実施していきます。実際のお客様環境でも意図した動きをするのかを観点にして、チェック項目を作成します。
機器構成の違いもそうですが、プログラムをお客様先に持ち込むにあたって、他プログラムとの整合性(バージョンなど)が合わなかったりしても、システムは正常に動きません。
受入れテストでしっかりと目的の処理を達成できることを確認して、納品という最終地点に至れるのです。
おわりに
システム開発において、テスト工程は「品質を確保する」という意味で、とても重要な役割を果たします。作業自体はあまり楽しいものではないかもしれませんが、単体・結合・総合・受入れテストそれぞれの観点を理解しながら、テストに臨むようにしましょう。
テストフェーズについては以下の記事も是非、ご参照ください。
【X(旧twitter)でも情報発信中】
Xを最近始めたので、フォローしてもらえると嬉しいです(エンジニア界隈の方はフォローバックさせていただきます)! システム開発に関することや、最新テクノロジーのことなど、世のエンジニアにとって有用な情報を発信してます!