0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

テストの指標(カバレッジ編)

Posted at

はじめに

先日、テスト指標について話題に上がりました。
テスト密度、バグ検出率など色々ありますが、まずはカバレッジについて纏めていきます。

カバレッジ(網羅率)

カバレッジとはテストが実施された割合です。

C0:命令網羅(ステートメント・カバレッジ)

全ての命令文が実行されるようにテストする。
命令文が呼ばれないケースは含まない。

if (x && y) { // (1)
    if (z) { // (2)
        GetData(); // (A)
    }
}

のような場合、処理(A)が呼ばれるケースのみ実施すればよい。
つまり

No. x y z 備考
1 true true true 分岐(1)に入る ⇒ 分岐(2)に入る ⇒ 処理(A)が実行される

のケースを実施すれば、命令網羅したことになります。

C1:分岐網羅(ブランチ・カバレッジ)

全ての分岐を通るようにテストする。
分岐がTrue、Falseの場合の網羅なので、分岐条件の網羅はしない
例えば

if (x && y) { // (1)
    if (z) { // (2)
        GetData(); // (A)
    }
}

のような場合、分岐(1)(2)に入る/入らないを網羅すればよい
つまり

No. x y z 備考
1 true true true 分岐(1)に入る ⇒ 分岐(2)に入る
2 true true false 分岐(1)に入る ⇒ 分岐(2)に入らない
3 false true true 分岐(1)に入らない

のケースを実施すれば、分岐網羅したことになります。

C2:条件網羅(コンディション・カバレッジ)

個々の条件式の真偽を、それぞれ含むようにテストする。
それぞれを網羅するが、複合条件の網羅はしない
例えば

if (x && y) { // (1)
    if (z) { // (2)
        GetData(); // (A)
    }
}

のような場合、x、y、zのtrue/falseをそれぞれ網羅すればよい
つまり

No. x y z 備考
1 true true true
2 true true false No.1、No.2でzのtrue/falseを網羅
3 true false true No.1、No.3でyのtrue/falseを網羅
4 false true true No.1、No.4でxのtrue/falseを網羅

のケースを実施すれば、条件網羅したことになります。

MCC:複合条件網羅(マルチコンディション・カバレッジ)

個々の条件式の真偽を、全ての組み合わせでテストする。
条件をすべて網羅する

if (x && y) { // (1)
    if (z) { // (2)
        GetData(); // (A)
    }
}

のような場合、x、y、zのtrue/false全パターンを網羅すればよい
全パターンを書き出すと

No. x y z 備考
1 true true true
2 true true false
3 true false true
4 true false false
5 false true true
6 false true false
7 false false true
8 false false false

のケースとなります。
3~8は分岐(1)に入らない為、分岐(2)の判定は行われません。
つまり

No. x y z 備考
1 true true true
2 true true false
3 true false true
4 false true true
5 false false true

を実施すれば、複合条件網羅したことになります。

その他

他にも「行カバレッジ」や「関数カバレッジ」と言うものなどがありますが、指標にしにくいので割愛します。

  • 行カバレッジ
    テストで実行した行の割合(テスト密度に似ているが少し違う)
  • 関数カバレッジ
    テストで実行した関数の割合
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?