テストコードって何を書けばいいの?検査網羅率(テストカバレッジ)とカバレッジ基準


  • テストコードを書きたいけど、何を書けばいいのかわからない
  • テストコードは書いたけど、テストケースにない不具合が見つかってしまった

等を防ぐため、テストケースを作る際の指標になる、検査網羅率(テストカバレッジ)とカバレッジ基準についてまとめました。

検査網羅率(テストカバレッジ)とは

カバレッジ基準に従ってどれだけのテストが実行されたかの割合のこと。

カバレッジ基準とは

カバレッジを測定するための基準。
以下のサンプルで、それぞれのカバレッジ基準を解説していきます。

サンプル

仕様

毎週水曜日はレディースデイ。
通常1,000円のところ、女性のお客様は500円で提供。

コード

def price
  if lady? and wednesday?
    500
  else
    1000
  end
end

応用の利かないコードですが、わかりやすさのためこのまま解説します。

カバレッジ基準

命令網羅

すべてのコードを実行する。

テストケース作成観点

  • 1000を返すこと
  • 500を返すこと

分岐網羅(判定条件網羅)

すべての分岐(if毎)のtrueとfalseを実行する。

テストケース作成観点

  • lady? and wednesday?を満たす
  • lady? and wednesday?を満たさない

今回のサンプルだと命令網羅と同じケースになるが、着目する観点が異なる。

条件網羅

すべての条件(ifの中の条件毎)のtrueとfalseを実行する。

テストケース作成観点

  • lady?を満たす
  • lady?を満たさない

  • wednesday?を満たす

  • wednesday?を満たさない

複合条件網羅

すべての条件の組み合わせを実行する。

テストケース作成観点

  • lady?を満たすかつwednesday?を満たす
  • lady?を満たすかつwednesday?を満たさない
  • lady?を満たさないかつwednesday?を満たす
  • lady?を満たさないかつwednesday?を満たさない

まとめ

ここで説明した検査網羅率(テストカバレッジ)とカバレッジ基準は、ここまでテストすればOK、ここまでテストしなければNGというものではありません。ただ、自分の書いているテストコードが、何をテストし、何をテストしていないのかを把握し、チームやプロジェクトの時間の使い方や担保する品質と照らし合わせて、どこまでテストするかの基準にできればいいと思います。

以上、間違いがあれば教えてください。