テストの本質を探る ――30年の歴史を持つ 「ソフトウェア工学」の知恵に学ぶ
●不ぐあいの成長曲線から「テスト」を考える
まず,「テストとは何か」ということを理解しておく必要があります.それを「不ぐあいの成長曲線(信頼度成長曲線)」を通して考えてみることにします.図2を見てください2).横軸が時間で,縦軸が単位プログラム規模当たりの累積不ぐあい発生件数であるとします.
図2は,テストの進展に伴って不ぐあいがどのように変化していくかのグラフとして,よく見られる形を持っています.感覚的には妥当に思えます.テストを始めると,ある時点から急激に発見する不ぐあいの数が増えていきます.しかし,しだいにそれは収まっていきます.残存する不ぐあいが少なくなり,見つけることが困難になるからです.
一見妥当そうなこのグラフから,テストに関するいくつかの注意点を引き出すことができます.
- いくらテストをしたところで,残存する不ぐあいがゼロになるわけではない
よく言われるように,すべてをテストすることはできません.無限の時間を持っていたとしても無理です.漸近線に近づくものの,決して接することはありません.
- 発生件数が飽和したように見えても,ほんとうに飽和したかどうかわからない
図2のグラフは,「テストのための努力が一定である」という前提に立っています.例えば,テスト担当者(テスタ)が疲れて休んでいたりすると(あるいは,ひどい不ぐあいがあって作業が先に進まないと),累積不ぐあい数の伸びは小さくなります.だからといって,残存する不ぐあいが減少したわけではありません.
この問題を改善するために,各テスト・ケースが一定のレベルにあるとみなしたときに,横軸にテスト・ケースの数(すなわち,テスト担当者の労力)を取ることもできます.
ただし,この場合は別の問題があります.テストの定義を下記で見ておきます.
IEEE/ANSI定義(Std. 610.12-1990)テスト
ある指定した条件下で,システムないしはコンポーネントを操作するアクティビティである.結果を観察し/記録し,システムないしはコンポーネントの特定の側面に対して評価を行う.
よく言われますが,テストというのは不ぐあいを見つけ出す行為ではありません.対象となるソフトウェアがテストした範囲において,正しいことを保証する行為です.したがって,テスト・ケースとリンクさせることにどこまで意味があるかは議論の分かれるところです.
〔図2〕不ぐあいの成長曲線(実はバクテリアの繁殖曲線)
信頼度成長曲線としては,このようにS字型をとるとする場合と,指数関数で表現されるとする場合がある.エラーが均一に散らばっていれば,指数関数表現のほうが適切であるように思える.ただし,実際にはこれだけではなく,テストに対する慣れなども存在するので,S字型になることが多いようだ.この場合,上記の生物の繁殖のようにロジスティック曲線やゴンペルツ曲線を用いて,残存エラーを推定することになる.なお,κは環境収容力と呼ばれており,ある環境(土壌,食物でも同じ)で,単位面積当たりどのくらいのバクテリアを保持できるかを示す.tmはそれが半分に達する時間.Δtは,κに対して,10%から90%に増える期間を表している.