情報処理試験で、C0,C1,C2とか・・まだ出てるかな?(最近、受けていないのでわからん)
で、現場でも、「C0,C1 100%で」とか言われるけど、それって、テスト仕様書で、どうなってるの?
ということについて。
■前提知識
C0,C1C2の一般的説明は
ソフトウェアテストにおけるカバレッジ(C0/C1/C2)
http://replication.hatenablog.com/entry/2016/05/26/071409
を参照のこと
・分岐とは
条件式があって、その結果によって、処理が分かれるところ
とすると、以下のところ if ,switch,for(の条件のところ),while(の条件のところ)
なお、goto,break,continueは分岐処理に関するもの(命令ではない)ものとする。
■お題
いつもの、あれっす。下のプログラム
これのC0,C1を書いて、C0、C1 100%と、C2について説明します。
仕様書なんだけど、
・決定表形式のもの:例は以降の章で示される
・表形式のもの:例は↓
があるんだけど、決定表形式は、C0,C1,C2の単体テスト(ユニットテスト)が書きやすく
表形式は結合テストが書きやすい。今回は、決定表形式で説明する。
■C0:命令網羅
分岐「じゃない」ところをかく。
(分岐してても、分岐の中に、処理する関数があれば、それは書く)
例の場合
printf("please enter~が実行される
printf("%c",c);が実行される
printf("%02x",c);が実行される
printf("*** end~ が実行される
これらを決定表形式の仕様書にすると、こんな感じ。
■C1:分岐網羅
分岐のところを書く。
分岐のところを単純に抜き出すと
IF(argc < 2 )
while
if(c == -1)
if (argv[1][0] == '1' )
決定表形式の仕様書にまとめるときは、
プログラム通りではなく、
この条件式のYES,NOを1セットにして書くと、きれいに書ける
こんなかんじ。
■C0,C1 100%
上記の決定表の条件部分を2つ合わせると、C0,C1 100%になり、
現場的には、そうやって書くと思うけど、
実は一般的にはC1 100%だと、c0も100%になる。
【理由】
分岐の「中に」命令が書かれていますよね。
このとき、
分岐の「中に」書いてある命令を通らないで、
分岐100%「すべて通る」こと、できます?
ってことで、C1 100%で C0C1 100%って主張してもいいけど、
説明めんどくさいので、C0も書いちゃってるかな・・・
■条件網羅(C2,MCC)
条件網羅には2とおりある、
単純条件網羅(C2)
複合条件網羅(MCC)
以下に詳しい。
ホワイトボックステストにおけるカバレッジ(C0/C1/C2/MCC)について
https://qiita.com/bremen/items/8b6542467d2a0066e5af
ツールでは、C2をやっていて、お客さん的にはMCCの話をしてるってことあるので注意。
単純条件網羅は、条件式がAND、ORなどで結ばれているとき、それを分解して書くというもの。
(すべての条件組み合わせをするというわけではない)。
すべての条件の組み合わせを行うのが、「複合条件網羅」
決定表にすると、きれいなんだけど・・・時間ないので省略(ここ、暇なときに書き換えるかも)
これは、条件が爆発することになってしまうため、実際にはできないことが多い。
その場合、ペアワイズ法や直交表を用いる
で、現場でも、「C0,C1 100%で」とか言われるけど、それって、テスト仕様書で、どうなってるの?
ということについて。
■前提知識
C0,C1C2の一般的説明は
ソフトウェアテストにおけるカバレッジ(C0/C1/C2)
http://replication.hatenablog.com/entry/2016/05/26/071409
を参照のこと
・分岐とは
条件式があって、その結果によって、処理が分かれるところ
とすると、以下のところ if ,switch,for(の条件のところ),while(の条件のところ)
なお、goto,break,continueは分岐処理に関するもの(命令ではない)ものとする。
■お題
いつもの、あれっす。下のプログラム
これのC0,C1を書いて、C0、C1 100%と、C2について説明します。
仕様書なんだけど、
・決定表形式のもの:例は以降の章で示される
・表形式のもの:例は↓
があるんだけど、決定表形式は、C0,C1,C2の単体テスト(ユニットテスト)が書きやすく
表形式は結合テストが書きやすい。今回は、決定表形式で説明する。
■C0:命令網羅
分岐「じゃない」ところをかく。
(分岐してても、分岐の中に、処理する関数があれば、それは書く)
例の場合
printf("please enter~が実行される
printf("%c",c);が実行される
printf("%02x",c);が実行される
printf("*** end~ が実行される
これらを決定表形式の仕様書にすると、こんな感じ。
■C1:分岐網羅
分岐のところを書く。
分岐のところを単純に抜き出すと
IF(argc < 2 )
while
if(c == -1)
if (argv[1][0] == '1' )
決定表形式の仕様書にまとめるときは、
プログラム通りではなく、
この条件式のYES,NOを1セットにして書くと、きれいに書ける
こんなかんじ。
■C0,C1 100%
上記の決定表の条件部分を2つ合わせると、C0,C1 100%になり、
現場的には、そうやって書くと思うけど、
実は一般的にはC1 100%だと、c0も100%になる。
【理由】
分岐の「中に」命令が書かれていますよね。
このとき、
分岐の「中に」書いてある命令を通らないで、
分岐100%「すべて通る」こと、できます?
ってことで、C1 100%で C0C1 100%って主張してもいいけど、
説明めんどくさいので、C0も書いちゃってるかな・・・
■条件網羅(C2,MCC)
条件網羅には2とおりある、
単純条件網羅(C2)
複合条件網羅(MCC)
以下に詳しい。
ホワイトボックステストにおけるカバレッジ(C0/C1/C2/MCC)について
https://qiita.com/bremen/items/8b6542467d2a0066e5af
ツールでは、C2をやっていて、お客さん的にはMCCの話をしてるってことあるので注意。
単純条件網羅は、条件式がAND、ORなどで結ばれているとき、それを分解して書くというもの。
(すべての条件組み合わせをするというわけではない)。
すべての条件の組み合わせを行うのが、「複合条件網羅」
決定表にすると、きれいなんだけど・・・時間ないので省略(ここ、暇なときに書き換えるかも)
これは、条件が爆発することになってしまうため、実際にはできないことが多い。
その場合、ペアワイズ法や直交表を用いる