Index: [Article Count Order] [Thread]

Date:  Fri, 26 Jul 2002 10:41:31 +0900
From:  "NAKAMURA, Hiroshi" <nakahiro@....jp>
Subject:  [XP-jp:03610] Re: ソフトウェア品質指標についての考察
To:  <extremeprogramming-jp@....jp>
Message-Id:  <001901c23445$91a3e3e0$85222fc0@....jp>
In-Reply-To:  <20020726005028.E8EB.Y-KAMITE@....jp>
X-Mail-Count: 03610

なひです。

> 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位にこの議論があります。

なんか偉そうなことを書いているなひですが、マイヤーを取り出して
思い出しながら書いてみました。^^;