ホワイトボックステストにおけるカバレッジについていつも忘れてしまうのでメモ
ここでは代表的な以下の3つのものを取り上げます。
カバレッジの種類 | 説明 |
---|---|
命令網羅(statement coverage, C0) | コード内の命令文に対して少なくとも1回実行されるようにテストをする |
分岐網羅(branch coverage, line coverage, C1) | コード内の条件判定にの結果に対して、それぞれが少なくとも1回実行されるようにテストをする |
条件網羅(condition coverage, C2) | コード内の条件判定の個々の条件に対してそれぞれが少なくとも1回実行されるようにテストをする |
以下のコードを例にとって説明します。
def hogehoge
if 条件a1 do
raise 例外
end
if 条件b1 || 条件b2 do
命令文1
else
命令文2
end
if 条件c1 || 条件c2 do
命令文3
end
end
命令網羅(statement coverage, C0)
すべてのステートメント(命令文)を通る必要があるので以下のようになります。
赤丸の部分に着目して設計します。
分岐網羅(branch coverage, line coverage, C1)
すべての条件判定を通る必要があるので以下のようになります。
赤丸の部分に着目して設計します。
分岐網羅が100%であれば必然的に命令網羅も100%になります。
条件網羅(condition coverage, C2)
条件判定の個々の条件に着目して設計します。
図だとごちゃごちゃするので表にします。
テストケース | a1 | b1 | b2 | c1 | c2 | 出力結果 |
---|---|---|---|---|---|---|
1 | T | - | - | - | - | 例外 |
2 | F | T | F | T | F | 命令文2、命令文3 |
3 | F | F | T | F | T | 命令文2、命令文3 |
上記のテストケースでc2カバレッジは100%にはなりますが、命令文1が実行されていないことがわかります。 | ||||||
このようにc2では100%でもc1、c0では100%にならないこともあるので注意しましょう。 |
まとめ
- c0は命令
- c1は条件判定
- c2は個々の条件
- c1が100%のときc0は100%
- c2が100%のときc0, c1は100%になるとは限らない
【補足】条件網羅のときに着目する箇所
参考