【こーどかばれっじ】
コードカバレッジ とは?
最終更新:
💡 通ったコードと、正しく確かめた内容を分けて見る
テストがコードのどの部分を実行したかを示す指標。命令・分岐・条件・全組合せの違い、100%でも正しさを保証しない理由、目標値を決める際の考え方を解説します。
📌 このページのポイント
- 実行した命令・行・分岐など、指標の分母を明確にする
- 条件の真偽を試すことと、全条件の組合せを試すことは異なる
- 100%でも、結果の正しさやすべての入力を検証したとは言えない
- 一律の80%ではなく、リスクと必要な検証に合わせて目標を定める
カバレッジは、何パーセント正しく動くかという数字?
テスト中に、計測対象のコードをどれだけ実行したかという数字だよ。結果が正しかった割合ではないんだ。命令を対象にするのか、行や分岐を対象にするのかで、分母と数字が変わる。
命令と分岐の違いは?
命令網羅は対象の命令を実行したか、分岐網羅は分岐の各結果を通ったかを見るよ。たとえばifの本体を通るテストだけで、計測対象の命令は全部実行できても、条件が偽になる分岐が未実行の場合がある。
条件網羅は、すべての組合せを試すこと?
基本的な条件網羅は、個々の条件が真と偽になることを試す。すべての組合せを試す複合条件網羅とは違うよ。複合した判定では、個々の条件の真偽を通っても、判定全体の真偽を両方通ったとは限らない。単純な強さの順番に並べないほうがよいんだ。
100%なら、バグは残っていない?
その指標で対象にした構造を通った、という意味だよ。正しい結果かを確かめるアサーションがなかったり、境界値や特定の入力を試していなかったりする可能性がある。数字を上げることと、必要な振る舞いを検証することを分けて考えよう。
目標は80%でよいの?
すべてのプロジェクトに共通の合格値として決めないほうがよいよ。重要な機能のリスク、計測から除外する範囲、未実行のコードの理由を見て目標を定める。CIで増減を確認する際も、どのコードが増え、何を試したかまで見ると役立つんだ。
もっと詳しく知りたい人へ
C0・C1・C2と書けば、どの資料でも同じ意味?
C0を命令網羅、C1を分岐網羅とする表記はありますが、C2などの名称や条件の扱いは資料ごとに定義を確認します。条件網羅・判定条件網羅・複合条件網羅・MC/DCは区別が必要です。また短絡評価によって実際に評価されない条件もあり、入力値の組合せと計測した条件の結果が一致するとは限りません。
行カバレッジなら、ファイルの総行数で割ってよい?
通常はツールが対象とする実行可能な行を使い、空行・コメントなどをそのまま分母にしません。1行に複数の命令がある場合など、行と命令は同じ尺度でもありません。除外設定や生成コード、計測できていないファイルも確認して、数値の範囲を明記します。
まとめ:ざっくりこれだけ覚えればOK!
「コードカバレッジ」って出てきたら「テストで実行したコードの範囲を知る指標」と思えばだいたいOK!実行したことと、正しさを検証したことは別だよ。
📖 おまけ:英語の意味
「Code Coverage」 = コードの網羅率
💬 網羅の対象には命令、行、分岐、条件などがあります。ツールや資料によって名称・計算方法が異なるため、同じ「カバレッジ」という表示でも定義を確認します。