🐈

テストカバレッジの種類

2023/11/19に公開

テストカレッジを出力するタスクをした際に調べたのでまとめておきます。

結論

Statement coverage、Branch coverageを参考にすると良さそう。
(simpleCov、jestの場合Condition Coverageはデフォルトでは測定できない)


Statement Coverage(C0)

  • プログラム内の各命令が実行されたかの網羅率(命令網羅率)
  • 三項演算子の条件分岐は見れない

Branch Coverage(C1)

  • ifやcaseなどの全ての分岐の処理が実行されたかの網羅率
  • 各決定ポイント( if 文など)の真と偽の両方のパスがテストされたかどうかを測定
  • if(a > 0 && b > 0) の場合4通りの条件があるが、全体がtrueとfalseの2通りテストした場合100%になる

Function Coverage

  • プログラム内の各関数が呼び出されたかの網羅率
  • 関数が一度でも呼び出されれば良い

Line Coverage

  • ソースファイルの各実行可能行が実行されたかの網羅率
  • ステートメントカバレッジと同じという認識、後方互換性の為残っている

Condition Coverage

  • 各決定ポイント内の各個別条件が独立して true と false の両方の値を取るかどうかを測定
  • if(a > 0 && b > 0) の場合2通りの条件のテストが必要
    • (a = -1, b = 1) , (a = 1, b = -1) この2条件でテストすれば100%になる

Multipule Condition Coverage(C2)

  • 各決定ポイント内の各個別条件の組み合わせ全ての網羅率
  • if(a > 0 && b > 0) の場合4通りの条件のテストが必要
  • 条件の組み合わせは 2^各個別条件数必要になる

参考
https://www.qbook.jp/column/932.html
https://www.youtube.com/watch?v=rfpq9KY3GXo
https://qiita.com/s_karuta/items/c464f220a4b65f70f214

Discussion