##カバレッジ(coverage)とは
所定の網羅条件がテストによってどれだけ実行されたかを割合で示したもの(網羅率)。
網羅性の水準により、大きく分けて次の3種類があります。
###命令網羅(C0、statement coverage)
すべての命令(実行行)を少なくとも1回は実行すればOKという網羅水準。
分岐網羅、条件網羅に比べて網羅性は最も低いです。
###分岐網羅(C1、branch coverage)
判定条件の真偽を少なくとも1回は実行すればOKという網羅水準。
分岐網羅が100%になれば命令網羅は必然的に100%になるという関係にあります。
分岐が論理和(OR)や論理積(AND)を含む複合条件の場合、
各条件式の組み合わせは考慮されないため、
分岐網羅では判定式内にある不具合を検出できないケースがあります。
そこで次の条件網羅という網羅水準の考え方がでてきます。
###条件網羅(C2、condition coverage)
それぞれの条件式における真偽が少なくとも1回は実行されればOKという網羅水準。
条件網羅で100%になっても必ずしも命令網羅と分岐網羅が100%になるわけではありません。
とはいえ、3つの網羅水準の中では最も厳格なコードカバレッジです。
##カバレッジの注意点
①カバレッジ100%=しっかり品質保証がされている、というわけではない
(例)a = b / c という1行だけのコード
cに0がきた場合、ZeroDivisionErrorが発生する(Pythonの場合)が、try-exceptをしていない。
しかし数字上はカバレッジ100%です。
カバレッジは、テストが不十分であることは示せますが、十分であることの保証にはなりません。
②カバレッジを上げることがテストの目的と化してはならない
一般に、カバレッジが上がれば上がるほど、バグは検出されにくくなります。
40%から70%に上げることは容易ですが、80%から100%にあげる作業には、
それ以上に工数がかかる場合があります。
不必要に厳しいカバレッジ水準を追求したり、なにがなんでも100%を目指すと、
品質が成熟していてバグの検出が見込まれないと思われる部分も数多くテストしなければならないことにつながり、工数に無駄が生じてしまう恐れがあります。
(典型例としては、まず起こり得ない例外処理を頑張って通しても品質向上にはつながらない)