テスト
カバレッジ
ホワイトボックステスト

ホワイトボックステストにおけるカバレッジ(C0/C1/C2/MCC)について

本稿では以下のサンプルコードを用いて、ホワイトボックステストにおけるカバレッジ(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

参考としたウェブサイト