ホワイトボックステストにおけるカバレッジ（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        |

## 参考としたウェブサイト
- gihyo.jp『 [ソフトウェアテスト基本テクニック](http://gihyo.jp/dev/serial/01/tech_station/0003?page=2)』
- ITmedia エンタープライズ『[情報システム用語事典：カバレッジ基準](http://www.itmedia.co.jp/im/articles/1111/07/news142.html)』