Edited at

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

More than 1 year has passed since last update.

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


参考としたウェブサイト