なひです。
> From: Yutaka Kamite [mailto:y-kamite@....jp]
> Sent: Friday, July 26, 2002 1:00 AM
> > > ふむふむC0はC1に内包されるんですね。
> > たしか違うはずです。
> > C0 テストでは見つからないが、C1 なら見つかるバグと、
> > C1 テストでは見つからないが C0 テストでは見つかるバグ
> > があったはずです。前者は「分岐の一方がセルフループ」、後者は
> > 「何処からも呼ばれないサブルーチン」だったと思います。
> >
> > ちょっと記憶があやふやなので、詳しい方はヘルプを..
> 手許にある「ソフトウェアテスト技法」ボリス・バイザー 日経BP出版センタ
> ー
> では
>
> ステートメントテストP1=c0
> ブランチテスト=P2=c1
>
> となってますね。(P58〜)
> C0はC1に含まれる、ようですが?
内包されると思います。全分岐先をカバーしても実行されない
命令があるとすれば。。。コメント? 到達しない箇所のコード?
いずれにせよコンパイラが捨てそうですね。^^;
小野さんが指摘されているのはC1とC?じゃないでしょうか。
確かに、一件厳しくなるように見えても、いつも必ずそうではない、
ということに注意しましょうという話が、
大抵の教科書に書いてありますね。説明しといてすっかり忘れてました。
branch coverageをC1と呼ぶのが正しいとして、このC1のちょっと
強いやつに、condition coverageがあります。branchする
条件判断を構成する各condition毎に組み合わせを考えましょう
という、前回もちょっと書いたやつです。
正しいラベルを知らないので(誰か教えてください)、
これを仮にC1'と呼ぶと、C1'では、あるbranchの
各conditionの組み合わせを考えた結果、テストケースの
取り方によっては行かないbranchが出てきてしまいます。
if ( cond1 && cond2 )
statement1
end
この場合にcond1 == true, cond2 == falseというテストケースと、
cond1 == false, cond2 == trueというテストケースを作ると、
C1'は満たしますがstatement1は通りません。
C1はおろか、C0より悪い。
# これが小野さんが書かれている
# 「何処からも呼ばれないサブルーチン」かな?
ちなみに
c = 0
while ( cond1 && c < 5 )
c += 1
end
において、C1だとcond1 == trueのテストだけで十分ですが、
C1'だとcond1 == falseのテストも必要になります。これが
C1'の存在理由と理解してます。
# これが小野さんが書かれている
# 「分岐の一方がセルフループ」かな?
> #なお、この本はテスト技法の古典2位で、古典1は「ソフトウェア・テスト
> の
> 技法」マイヤー、近代科学社です。P41〜P50位にこの議論があります。
なんか偉そうなことを書いているなひですが、マイヤーを取り出して
思い出しながら書いてみました。^^;