テストの本質を探る ――30年の歴史を持つ 「ソフトウェア工学」の知恵に学ぶ
●「時間がない」の問題をどう解消するか
次に,現実の問題に触れます.以下の理由から,テストに十分な時間が取れないケースがあります.すなわち,仕様調整や設計フェーズが延びたにもかかわらず,出荷時期が変わらない場合です.また,テストをいくら実行しても,不ぐあいが出る場合があります.不ぐあいを修正しないと作業が先に進みません.そして,不ぐあいが修正されたと思ったら,その修正が別の不ぐあいを生みます.これを繰り返す状況に陥ることがあります.
この問題への対処法はいくつかあります.
1)エラーを早期に発見するように努める
「まずは作る.そして,とりあえずテストしてみる」という行き当たりばったりの作業を繰り返している限り,この状況は改善しません.
よく言われるように,テストの終盤になるほど修正は困難になります.例えば,仕様の誤りは設計に影響し,実装に影響します.後工程になるほど,広い範囲に影響する可能性があります.したがって,エラーは早期のフェーズで見つけることが重要です.
もう一つは,後工程に影響が出ないように,それぞれのフェーズをきちんと終了するようにします.例えば,コラム「V&Vのいろいろ」で説明したように,コーディングが終わったら必ずコード・インスペクションを実施します.これらにより,テスト・フェーズの過剰な負荷を取り除くことが可能となります注3.
注3;今の時期,こういうことを書くのも少し気が引ける.「それは昔から言われていることではないのか」,あるいは,「そういう大がかりなことをするからいけなくて,XP(eXtreme Programming)のように『作ってはテスト』を繰り返せばよいのではないか」.このような声が聞こえてきそうだ.しかし,筆者自身は決してそうは思わない.前者の意見に対しては,どのような開発プロセスを採用しようが,設計なしにコーディングはできないはずである(大量のドキュメントを書くかどうかは別にして...).どのような開発プロセスを採用したとしても,ライフ・サイクルはつねに単一のものとして存在している.後者の意見に対しては,「きちんとした設計と実装がない限り,細分化された問題が増大するだけではないのか?」と思っている.