本稿では以下のサンプルコードを用いて、ホワイトボックステストにおけるカバレッジ(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 エンタープライズ『情報システム用語事典:カバレッジ基準』