いつもわからなくなる単体テストのカバレッジC0/C1/C2についてまとめてみます。
もうわからなくなることがないように整理してみたいと思います。
単体テストの網羅率(カバレッジ)
似た名前が多くていつも単体テストの網羅率(カバレッジ)にて、わからなくなるのでまずは表とイメージで整理してみます。
名称 | 略称 | 別名 | 内容 |
---|---|---|---|
命令網羅 | C0 | ー | すべての命令を1回通る |
分岐網羅 | C1 | 判定条件網羅 | すべての分岐経路を1回通る |
条件網羅 | C2 | ー | 分岐の条件が1回は判定される |
どれがどの名称だったかわからなくなるすべての元凶は、個人的には”判定条件網羅”にあると思います。ここでも”条件網羅”という言葉が出てくる一方で、条件網羅という名称単独でも存在するので訳が分からなくなります。
スポンサーリンク
命令網羅C0
命令網羅とは、命令に着目した単体テストの設計技法です。
全ての”命令”を1回通ればOKとするテストケース設計技法である。
情報処理教科書 プロジェクトマネージャ 2021年版 P490~P491
次のような処理の場合のテストケースを考えてみます。
【テストケース】
ケースNo1 : A = True、B = True
続いて、条件判定がandではなく、orになった場合の処理のテストケースを考えてみます。
【テストケース】ケース1、ケース1'、ケース''の3つの中からいずれか1つ
ケースNo1 : A = True、B = True
ケースNo1' : A = True、B = False
ケースNo1'' : A = False、B = True
このように、とにかく各命令が1回ずつ実行されれば良いと考えます。
スポンサーリンク
分岐網羅C1
分岐網羅とは、分岐に着目した単体テストの設計技法です。これが一番混乱を生む元凶です。
分岐=判定条件です。
判定条件の結果、分岐が変わるということを意味しています。
”分岐”に着眼したテストケースである。すべての分岐経路を網羅させればいい
情報処理教科書 プロジェクトマネージャ 2021年版 P490~P491
次のような処理の場合のテストケースを考えてみます。
【テストケース】ケース1とケース2,2',2''の3つの中から1つ
ケースNo1 : A = True、B = True
ケースNo2: A = True、B = False
ケースNo2': A = False、B = True
ケースNo2'': A = False、B = False
続いて、条件判定がandではなく、orになった場合の処理のテストケースを考えてみます。
【テストケース】ケース1,1',2''の3つの中から1つとケース2
ケースNo1 : A = True、B = False
ケースNo1': A = False、B = True
ケースNo1'': A = True、B = True
ケースNo2: A = False、B = False
このように、判定式「全体」を見て、判定式が真になる場合、偽になる場合それぞれ1回ずつ実行されるようにと考えます。
スポンサーリンク
条件網羅C2
条件網羅とは、分岐(判定条件)を司る1つ1つの条件に着目した単体テストの設計技法です。
分岐の”条件”に着眼したテストケースである。
情報処理教科書 プロジェクトマネージャ 2021年版 P490~P491
そのため、1つ1つの条件の結果、判定条件が定まり、分岐が決まると考えると良いです。条件と判定条件、分岐の関係は次のようになっています。この図が頭に入っていれば、単体テストの設計におけるC0,C1,C2について迷うことはないと思います。
次のような処理の場合のテストケースを考えてみます。
【テストケース】ケース1、ケース2の組合せや、ケース1'、ケース2'の組合せなど
ケースNo1 : A = True、B = True
ケースNo1' : A = True、B = False
ケースNo2: A = False、B = False
ケースNo2': A = False、B = True
※AはA単体でTrure/Falseを、BはB単体でTrue/Falseをそれぞれ1回ずつ網羅すればよい
続いて、条件判定がandではなく、orになった場合の処理のテストケースを考えてみます。ただ、個々に条件に着目しているため、andからorに変っても想定ケースは変わりません。
【テストケース】ケース1、ケース2の組合せや、ケース1'、ケース2'の組合せなど
ケースNo1 : A = True、B = True
ケースNo1' : A = True、B = False
ケースNo2: A = False、B = False
ケースNo2': A = False、B = True
※AはA単体でTrure/Falseを、BはB単体でTrue/Falseをそれぞれ1回ずつ網羅すればよい
このように、「個々」の条件式を見て、それぞれの条件が真になる場合、偽になる場合それぞれ1回ずつ実行されるようにと考えます。
スポンサーリンク
分岐網羅/条件網羅 C1/C2
分岐網羅(判定条件網羅)C1だけでも、条件網羅C2だけでも、カバレッジに漏れが出ます。したがって、しばしば推奨されるテストケース設計技法が分岐網羅/条件網羅です。
分岐網羅/条件網羅の場合のテストケースについて考えます。
【テストケース】ケース1、ケース2、ケース3
ケースNo1 : A = True、B = False
ケースNo2 : A = False、B = True
ケースNo3: A = True、B = True
続いて、同じように条件判定がandではなく、orになった場合の処理のテストケースを考えてみます。
【テストケース】ケース1、ケース2、ケース3
ケースNo1 : A = False、B = False
ケースNo2 : A = True、B = False
ケースNo3: A = False、B = True
このように、判定式「全体」と「個々」の条件式のそれぞれの視点から「全体」が真になる場合、偽になる場合と、「個々」の条件式が真になる場合、偽になる場合がそれぞれ1回ずつ実行されるようにと考えます。
スポンサーリンク
単体テストカバレッジの覚え方
単体テスト設計をするうえでは、命令網羅、分岐網羅(判定条件網羅)、条件網羅、そして分岐網羅/条件網羅の理解が欠かせません。しかし、似た名前が多く覚えては忘れることの繰り返しだと思います。
そんな時は、次の図をイメージしてみると、分岐網羅(判定条件網羅)と条件網羅、そして、分岐網羅/条件網羅(判定条件網羅/条件網羅)の違いが分かると思いますので、参考にしてみてください。
コメント