テストの本質を探る ――30年の歴史を持つ 「ソフトウェア工学」の知恵に学ぶ
3)ドメイン(領域)テスト
プログラムを少し違った視点から見てみます.先のVHDLコードの例では,Iの値によって処理が変化します.'15'であればカウンタを'0'にします.それ以外では,カウンタを1増加させます.Iの値によって,このプログラムは二つの異なる処理を行うわけです.また,同時に'0'より小さい値も,'15'より大きな値もとらないことも明らかです.一般に,入力の値によって,ドメイン(領域)はいくつかに分割されます(図5).
今回の例では変数が一つなので,図5のような直線上の領域を考えることになります.しかし,関係する変数の数が2個になれば,次元が増えて平面状の領域の分割になります.n個になれば,n次元上の領域の分割ということになります.
テスト用の入力ベクトルを考えるとき,このドメインの考えかたが役に立ちます.一般に,ドメインの境界(の近く)の値には,バグが存在しやすいとされています.これは,単純に「判定条件をまちがえる」,あるいは「場合分けを適切にコーディングできていない」といったケースがよくあるためです.
上記の例では,'0'や'15'の場合についてテストしたり,'16'という値を取ったときに(取り得るとしてだが...)どのような状況が生じるかをテストしようということです.これらは「境界値テスト」と呼ばれることもあります.
〔図5〕図4に示したサンプル・コードのドメイン分割
この場合,0~15のドメイン(領域)で,プログラムは動作する.Iは整数全体をとり得ると考えると,全体は三つのドメインに分割される.