ホワイトボックステストとは
ホワイトボックステストとは、プログラムの内部構造(ソースコードの処理ロジックや条件分岐など)がどうなっているかを理解した上で、そのプログラム内のすべての記述ルートが正しく実行されるかを検証するテスト手法です。中身が透けて見える「白い箱(透明な箱)」に例えてこう呼ばれます。
このテストでは、ソースコードの条件分岐(if文など)に注目し、すべての処理ルートを漏れなく通過するようなテストデータを作成します。テストの網羅性を測る指標として以下のようなものがあります。
- 命令網羅:プログラム内のすべての命令文を少なくとも1回は実行する。
- 分岐網羅:すべての条件分岐で「真(Yes)」と「偽(No)」のルートを少なくとも1回は実行する。
主に開発の初期段階(単体テスト)において、コードの記述ミスや不要な処理がないかをチェックするために用いられます。
具体例
「18歳以上は大人料金、それ未満は子供料金」という処理を行う以下のプログラムをテストする場合です。
if age >= 18:
ticket = "大人" (ルートA)
else:
ticket = "子供" (ルートB)
このプログラムに対して、以下の2パターンのテストデータを入力します。これにより、すべてのルート(AとB)を網羅するホワイトボックステストが行えます。
- テストケース1:age = 20(大人料金ルートAを通過)
- テストケース2:age = 10(子供料金ルートBを通過)
もう少し詳しく
ホワイトボックステストは、プログラムのソースコード(構造、制御フロー、条件分岐)を解析し、プログラム内のすべてのステートメントや経路がバグなく正しく処理されるかを確かめる手法です。主に単体テストのフェーズで開発者自身によって実施されます。
テストの品質や網羅性を表す客観的な指標として「コードカバレッジ(コード網羅率)」があります。これには以下の基準が存在します。
- 命令網羅(C0): プログラム内のすべての命令文(実行行)が、少なくとも1回は実行されるようにテストケースを設計します。最も基本的なカバレッジですが、分岐の条件の片方しか通らないため、網羅性は低いです。
- 分岐網羅(C1): すべての条件分岐において、その結果(真/Yes と 偽/No)が少なくとも1回は実行されるようにテストケースを設計します。命令網羅よりも網羅性が高くなります。
- 条件網羅(C2): 分岐の判定基準となる個々の部分条件が、真と偽の両方の値を少なくとも1回は取るようにテストケースを設計します。
さらに、これらを組み合わせた「複数条件網羅(MCC)」や、すべての実行パスを網羅する「パス網羅」などがあり、高い信頼性が求められる安全規格などでは、より厳しい網羅率が要求されます。
試験でのポイント
試験では、ホワイトボックステストの網羅基準(命令網羅、分岐網羅、条件網羅など)の定義と、与えられたプログラム構造に対して必要な「最小テストケース数」を算出する問題が頻出します。
例えば、2つの独立した if 文がある場合、すべての分岐(分岐網羅)をパスするために必要なテスト回数を求める手順などが出題されます。また、「プログラムの内部構造を考慮したテストである」という基本概念と、それが適用される「単体テスト」の対応関係をしっかりと覚えておきましょう。
関連する用語
関連する用語には、テストの網羅率を示す「コードカバレッジ」、すべての実行文を通す「命令網羅」、すべての分岐ルートを通す「分岐網羅」、および内部構造を無視して入出力を見る「ブラックボックステスト」があります。