本稿では以下のサンプルコードを用いて、ホワイトボックステストにおけるカバレッジ(C0/C1/C2/MCC)について説明します。
if(条件文a1 || 条件文a2){ // 判定条件A
命令文X;
}
if(条件文b1 || 条件文b2){ // 判定条件B
命令文Y;
} else{
命令文Z;
}
命令網羅 (statement coverage) (C0)
それぞれの命令文が少なくとも1回は実行される ようにテストを設計します。上記のサンプルコードの場合、カバレッジ率を100%にするためのテストケース数は2通りとなります。
| テストケースNo. | 条件文a1 | 条件文a2 | 条件文b1 | 条件文b2 | 判定条件A | 判定条件B | 命令文X | 命令文Y | 命令文Z |
|---|---|---|---|---|---|---|---|---|---|
| 1 | T | F | T | F | T | T | 実行 | 実行 | - |
| 2 | T | F | F | F | T | F | 実行 | - | 実行 |
命令文X、命令文Y、命令文Zがそれぞれ1回以上実行されています。
分岐網羅 (branch coverage) (C1)
それぞれの判定条件における真偽が少なくとも1回は実行される ようにテストを設計します。上記のサンプルコードの場合、カバレッジ率を100%にするためのテストケース数は2通りとなります。
| テストケースNo. | 条件文a1 | 条件文a2 | 条件文b1 | 条件文b2 | 判定条件A | 判定条件B | 命令文X | 命令文Y | 命令文Z |
|---|---|---|---|---|---|---|---|---|---|
| 1 | T | F | F | F | T | F | 実行 | - | 実行 |
| 2 | F | F | T | F | F | T | - | 実行 | - |
判定条件A、判定条件Bの真偽値T、Fがそれぞれ1回以上実行されています。上表のように C1カバレッジが100%の場合、必然的にC0カバレッジも100%になります。
条件網羅 (condition coverage) (C2)
それぞれの条件文における真偽が少なくとも1回は実行される ようにテストを設計します。上記のサンプルコードの場合、カバレッジ率を100%にするためのテストケース数は2通りとなります。
| テストケースNo. | 条件文a1 | 条件文a2 | 条件文b1 | 条件文b2 | 判定条件A | 判定条件B | 命令文X | 命令文Y | 命令文Z |
|---|---|---|---|---|---|---|---|---|---|
| 1 | T | F | T | F | T | T | 実行 | 実行 | - |
| 2 | F | T | F | T | T | T | 実行 | 実行 | - |
条件文a1、条件文a2、条件文b1、条件文b2の真偽値T、Fがそれぞれ1回以上実行されています。
上表のように C2カバレッジが100%であっても、C0カバレッジ、C1カバレッジが100%になるとは限らない ことに注意してください。
複合条件網羅 (multiple condition coverage) (MCC)
それぞれの条件における真偽の組み合わせがすべて実行される ようにテストを設計します。上記のサンプルコードの場合、カバレッジ率を100%にするためのテストケース数は2^4=16通りとなります。
| テストケースNo. | 条件文A1 | 条件文A2 | 条件文B1 | 条件文B2 |
|---|---|---|---|---|
| 1 | T | F | T | T |
| 2 | F | F | F | T |
| 3 | T | F | F | T |
| 4 | T | T | F | T |
| 5 | F | T | T | T |
| 6 | F | F | T | F |
| 7 | T | T | T | T |
| 8 | F | T | F | T |
| 9 | T | F | F | F |
| 10 | T | T | F | F |
| 11 | F | T | F | F |
| 12 | F | F | T | T |
| 13 | T | F | T | F |
| 14 | T | T | T | F |
| 15 | F | T | T | F |
| 16 | F | F | F | F |
参考としたウェブサイト
- gihyo.jp『 ソフトウェアテスト基本テクニック』
- ITmedia エンタープライズ『情報システム用語事典:カバレッジ基準』