🐙

【初学者向け】C0 / C1 / C2 カバレッジとは?

に公開

☁️はじめに

現場で「カバレッジ」という言葉が出てきたけど、いまいちピンとこない。

プログラムを書いたとき、「ちゃんとテストできているか?」 を確認する方法のひとつを カバレッジ(網羅率) といいます。

この記事では、基本的な C0 / C1 / C2 カバレッジ を初心者向けにわかりやすく解説します。

💡カバレッジとは

カバレッジとは、テストでコードがどのくらい実行されたかを数値化した指標 です。
「何割のコードをテストで通したか?」を測るイメージです。

代表的な種類は次の3つです。

  • C0(命令網羅 / Statement coverage)
  • C1(分岐網羅 / Branch coverage)
  • C2(条件網羅 / Condition coverage)

C0(命令網羅)

  • すべての命令文が最低1回は実行されているか を確認する指標。
  • if文があっても、どちらか一方の経路を通ればカバーされたとみなされます。
python

def check(num):
    if num > 0:
        print("positive")
    else:
        print("negative")

例えば num=1 で実行すれば、すべての命令文(printを含む)が一度は実行されるため C0 は達成されます。

補足:C0は「すべての命令文を1回以上実行」すればよいため、else が未検証のままでも100%になる可能性があります。

C1(分岐網羅)

  • if文やswitch文など、すべての分岐を通ったか を確認する指標。

上の例なら num=1 と num=-1 をテストして、ifとelse両方の分岐を通す必要があります。
C0より網羅性が高く、実務ではよく使われます。
 

C2(条件網羅)

  • 複数条件を含む式の、それぞれの条件がTrue/Falseをとったか を確認する指標。
python

def check(num):
    if num > 0 and num % 2 == 0:
        print("positive even")

この場合、条件は2つあります。

  • num > 0
  • num % 2 == 0

C2を満たすには、それぞれが True と False を一度以上とる ようにテストする必要があります。

例:

  • num=2 → True / True
  • num=-2 → False / True
  • num=1 → True / False

これでC2はクリアです。

補足:C2は「各条件がTrue/Falseを一度以上とる」ことを保証しますが、条件の組み合わせをすべて網羅するわけではありません。
例えば、本来4パターン(TT, TF, FT, FF)ありますが、C2を満たすにはそのうち3パターンで十分です。FF(A=False, B=False)は なくても条件網羅としては成立 するということです。

📈まとめ表

カバレッジ 意味
C0(命令網羅) 全ての命令文を1回以上実行 if文で片方だけ通ってもOK
C1(分岐網羅) 全ての分岐を実行 if/else両方を通す
C2(条件網羅) 条件式のTrue/Falseを網羅 各条件がTrue/Falseをとる

✅まとめ

  • C0 : 命令をすべて実行したか
  • C1 : 分岐をすべて通ったか
  • C2 : 条件ごとにTrue/Falseを試したか

Discussion