ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

テストのC0(命令網羅),C1(分岐網羅),C2(条件網羅)は、テスト仕様書でどう書かれるのか?

2018-09-27 08:52:53 | Weblog
情報処理試験で、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などで結ばれているとき、それを分解して書くというもの。
 (すべての条件組み合わせをするというわけではない)。

 すべての条件の組み合わせを行うのが、「複合条件網羅」
 決定表にすると、きれいなんだけど・・・時間ないので省略(ここ、暇なときに書き換えるかも)
 これは、条件が爆発することになってしまうため、実際にはできないことが多い。
 その場合、ペアワイズ法や直交表を用いる

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする