小野です。
>> Regarding [XP-jp:03608] Re: ソフトウェア品質指標についての考察; Yutaka Kamite <y-kamite@....jp> adds:
> 今日は、上手です。
....
> 手許にある「ソフトウェアテスト技法」ボリス・バイザー 日経BP出版センター
> では
> ステートメントテストP1=c0
> ブランチテスト=P2=c1
> となってますね。(P58〜)
> C0はC1に含まれる、ようですが?
> 小野さんが、この辺りを深読みされてるのでしたら、私のコメントは外れですが
> ・・
この本を、私も念頭に置いていました。手元にあったので再確認
しました。
まず C0, C1 という表現からはなれて、私が言いたかったこと
(そしてこの本に書いてあること)を述べると..
------------------------------------------------------
a 「すべての命令語、ステートメントを、最低1回は実行する」
b 「ブランチやCASE文の判定で、全方向へ最低一回は実行する」
というカバレッジを考えたときに、以下の二例で差が出て来ます。
1)
やりたいこと:
X の値を調べて、0 より小さいときには X に A を足し、
そうでないときには X に 2 * A を足す
正しいプログラム(の一つ)
| IF(X.LT.0) GOTO 200
| X = X + A
| 200 X = X + A
| 300 CONTINUE
間違ったプログラム(上記を実装しようとして間違えた)
| IF(X.LT.0) GOTO 200
| 200 X = X + A
| 300 CONTINUE
このテストを行う際に、カバレッジ b で検査すればバグが引っ
かかります。しかし、カバレッジ a で検査して X が 0 未満
の時しか調べていない場合には、バグが発見されないことに
なります。
2)
プログラム例
IF(X) 200, 150, 150
100 X = X + A
GOTO 100
150 X = X + A
200 X = X + A
300 CONTINUE
で、カバレッジ a でやれば 行100 の無限ループが見つかり
ますが、カバレッジ b だと見つからない可能性があります。
こう言った話が、p59 -- p60 にあります。
------------------------------------------------------
というわけで、「分岐の一方がセルフループ」というのは
完全な誤解でした。正解は
「a sin of omission/書き忘れの害」
とでもいうべきものでした。また本書には、「構造化プログラ
ミング言語で書かれたソフトウェア」では、方式 b を満足すると
方式 a も満足する、と書いています。
というわけで、まあ、上記のような例は現在ではあまり一般的
ではないとも言えるし、 「C1 が C0 を内包する」ということで
よいのだと思います。失礼しました。
(ちなみにバイザーの本では、
ステートメントテストP1=C1
ブランチテスト=P2=C2
としています。なぜに 1 はじまり??)
// Tsuyoshi ONO //
"Be completely flexible on how we get there, but be totally
uncompromising on where we are going." -- Martin Fowler