テストの本質を探る ――30年の歴史を持つ 「ソフトウェア工学」の知恵に学ぶ
●ホワイトボックスとブラックボックスを使い分ける
テストは,大きく「ホワイトボックス・テスト」と「ブラックボックス・テスト」に分けることができます.
ホワイトボックス・テストは,実際にプログラム・コードを見て,必要なテストを考える方法です.中身が見えるという意味で,ここではホワイトボックスということばを使っています.当然,テスト方法を細かく考えられるのですが,機械的にテスト・ケースを定めるため,テスト・ケースの間の重み付けが困難になります.
一方,ブラックボックス・テストというのは,プログラムの詳細を意識しない方法です.通常,対象となるモジュールには,そのモジュールを定義する仕様があります.また,もっとも大きな単位であるシステム全体には,そのシステムを定義する仕様があります.これらの情報から,必要なテストを設計するというのが,ブラックボックス・テストです.細かな処理ではなく,機能単位にテストされることが多いので,「機能テスト」と呼ばれることもあります.当然,それぞれのレベルで仕様がきちんと定義されていることが前提となります.
以下に,テスト手法の具体例について説明します.
1)パス・テスト
パス・テストは,プログラムの制御フロー(繰り返しや分岐などによって定まるプログラムの流れ)に基づいてテスト・ケースを定める方法です.通常,「ブランチ・カバレッジが何パーセント」と言うときは,このテスト法を指します.図4の簡単なVHDLコードの例では,分岐が一つあるので,パスは二つになります.
〔図4〕VHDLコードと制御フロー・グラフ
'0'~'15'の値を循環的に増加させるコードである.右側のグラフは,左側の記述に対応している.最大値に達したところで再度'0'に設定するパスと,単純に1増加するパスの二つを持っている.このように,条件分岐や繰り返しによるプログラムの流れを表したものを,一般に制御フロー・グラフと呼ぶ.
2)トランザクション・フロー・テスト
先のパス・テストは,主にプログラムの(詳細な)構造や仕様に着目しています.これに対してトランザクション・フロー・テストは,システムの機能に着目します.一つの機能は,システムに対する,ユーザから見た一連の処理の流れ(トランザクション・フロー)によって実現されています.原理的には,パス・テストと同じように処理が分かれる点をノードとするグラフによって表現し,そのグラフのパスを網羅することになります.