ホワイトボックステストの意味
テスト工程でテストしているものが、ソフトウェアが満たしていなければならない仕様を満たしているかどうかだったとすると、テスト工程でホワイトボックステストをする意味はあるのだろうか?
e-words ホワイトボックステスト 【white box test】より
ホワイトボックステストとは、システム内部の構造を理解した上でそれら一つ一つが意図した通りに動作しているかを確認する、プログラムのテスト方法。
「命令網羅」「判定条件網羅」「条件網羅」「複数条件網羅」「経路組み合わせ網羅」などの方式があるが、基本的にはプログラム内の全ての命令、全てのルーチンが最低一回は実行され、検証されるようになっている。
つまり、プログラムの全ての部分が、プログラム記述者の意図通りに動作していることを確認するテストである。システムの機能よりも内部構造の整合性を重視したテストとも言える。
網羅的なテストであるため珍しい事態に対しても動作確認できるのが利点だが、あくまでプログラム記述者の意図との整合性を確認するだけなので、記述者自身に誤解があった場合は対処できないという欠点も持つ。
これに対して、プログラムの内部構造とは関係なく、外部から見て仕様書通りの機能を持っているか確認するテストを「ブラックボックステスト」という。
ソースコードに書かれていることが、書かれているとおりに動いていることを確認してなんになるの?
そりゃ書かれたとおりに動くでしょうよ。プログラムなんだから。
動きが予測できないくらいのスパゲティコードであれば別だけど。
ソースコードの構造に基づいて行うホワイトボックステストは、
初期化忘れてヌルポ出したとか、APIを呼び出した結果が予想した挙動と違うとか、そういった初歩的なバグのチェックには使えるかもしれないけど、
それ以上の効果は期待できない。
そして、これらの挙動は、仕様として定義した振る舞いを全てテストしている中で必ず出てくるはずなのだ。
ソースコードベースで命令網羅だとか、判定条件網羅だとか、条件網羅だとか考える前に、まず「仕様網羅」を考えなければいけないのではないだろうか?