この記事は何か?
本記事はホワイトボックステストの基本概念と、代表的なテスト技法(ステートメントテストとデシジョンテスト)について解説します。
目次
ホワイトボックステストとは?
ホワイトボックステストとは、テスト対象の内部構造を理解した上でプログラムが正しいかどうかを検証するテスト手法です。
ISTQB(International Software Testing Qualifications Board)では以下のように定義されています。
ホワイトボックステスト(white-box testing)
コンポーネントまたはシステムの内部構造の分析に基づいたテスト。
(出典:ISTQB Glossary)
ホワイトボックステストは、主に単体テストで用いられることが多く、開発者自身がコードを書いた後に実施するケースが一般的です。
ブラックボックステストとの違い
ホワイトボックステストがプログラムの内部構造に着目するのに対し、ブラックボックステストは内部構造を意識せずに入力と出力の関係に着目します。
ホワイトボックステストの代表的な技法
ISTQBのFoundation Levelシラバスでは、ステートメントテストとデシジョンテスト(ブランチテスト)の2つが代表的な技法として取り上げられています。
1. ステートメントテスト
1.1. 特徴
ステートメントテストは、プログラム中のすべての実行可能なステートメント(命令文)を少なくとも1回は実行するようにテストケースを設計する手法です。
このテスト技法の目的は、コード内に実行されない部分がないことを確認し、各ステートメントの基本的な動作を検証することにあります。
ステートメントテストで達成を目指すカバレッジ基準は「ステートメントカバレッジ」と呼ばれ、以下の式で算出されます。
ステートメントカバレッジ = (実行されたステートメント数 / 全ステートメント数) × 100%
1.2. 適用例
以下のサンプルコードを例に説明します。
public int Calculate(int x)
{
int result = 0; // 命令1
if (x > 0)
{
result = x * 2; // 命令2
}
return result; // 命令3
}
ステートメントカバレッジ100%を達成するには、すべてのステートメントを実行する必要があります。if文の条件がtrueとなる場合(x > 0)の1ケースで、すべてのステートメントが実行されます。
| No. | 入力値 | 実行されるステートメント | 期待結果 |
|---|---|---|---|
| 1 | x = 5 | 命令1, 2, 3 | 10 |
1.3. ステートメントテストの限界
ステートメントテストはすべての分岐条件を網羅しないため、バグを見逃す可能性があります。上記のCalculateメソッドの例では、if文の条件がfalseとなる場合(x ≤ 0)の動作は検証されていません。
より網羅性の高いテストが必要な場合は、デシジョンテストを使用します。
2. デシジョンテスト
2.1. 特徴
デシジョンテストは、プログラム中のすべてのデシジョンについて、true(真)とfalse(偽)の両方の結果を少なくとも1回は実行するようにテストケースを設計する手法です。デシジョンとは、if文、switch文、ループの継続条件などを指します。
デシジョンテストで達成を目指すカバレッジ基準は「デシジョンカバレッジ」または「ブランチカバレッジ」と呼ばれ、以下の式で算出されます。
デシジョンカバレッジ = (実行されたデシジョン結果数 / 全デシジョン結果数) × 100%
2.2. 適用例
前述のCalculateメソッドと同じサンプルコードでデシジョンテストを考えます。
public int Calculate(int x)
{
int result = 0;
if (x > 0)
{
result = x * 2;
}
return result;
}
デシジョンカバレッジ100%を達成するには、デシジョンのtrue/false両方を実行する必要があります。
| No. | 入力値 | デシジョン結果 | 実行パス | 期待結果 |
|---|---|---|---|---|
| 1 | x = 5 | true | if文の中を実行 | 10 |
| 2 | x = -1 | false | if文をスキップ | 0 |
2ケースですべてのデシジョン結果を網羅でき、デシジョンカバレッジは100%となります。
2.3. デシジョンテストの限界
デシジョンテストはステートメントテストより網羅性が高いですが、複合条件(ANDやORで結合された条件)の個々の条件までは網羅しません。
if (x > 0 && y > 0) // 複合条件
{
Process();
}
上記の複合条件の例では、デシジョン全体のtrue/falseを網羅しても、条件 x > 0 と y > 0 それぞれのtrue/falseの組み合わせは網羅されない可能性があります。
複合条件の個々の条件を網羅するには、条件網羅や複合条件網羅などのより厳密なカバレッジ基準を適用する必要があります。
参考資料
- ISTQB Glossary (日本語版) https://glossary.istqb.org/ja_JP/home
- ISTQB Foundation Level シラバス Version 4.0(2023年版)https://jstqb.jp/syllabus.html#syllabus_foundation