web-dev-qa-db-ja.com

If(A && B)の条件カバレッジ-実行された入力またはコードの測定?

私は過去数日間コンディションカバレッジを研究してきました。著書「The Art of Software Testing」では、決定カバレッジを保証するものではないことを強調しています。

IF(A && B)

A=True, B=falseおよびA=False,B=Trueは条件カバレッジを満たしますが、決定は常にFalseです。

これはどのようにカバレッジを満たすことができますか? TrueB値は、短絡のため実際にはテストされないため、カバレッジを満たすにはどうすればよいでしょうか。

3
John V

条件カバレッジは、if式の一部であるオペランドが問題なくtruefalseの両方に評価できることをテストすることです。このタイプのカバレッジでは、中括弧内で何が実行されるか、または条件で使用されるオペランドの結果については気にしません。

次のコードを見てください。

bool a = ...;
bool b = ...;
if (a && b)
{
    ...
}

このコードの条件カバレッジはテストする必要があります:

  • aは、trueとfalseの両方に対応します。
  • bは、trueとfalseの両方に対応します。

論理演算で両方のオペランドを評価する必要がある言語の場合、上記のコードの条件カバレッジは次のように満たされます。

a = true; b = false
a = false; b = true

これがあなたの質問に示されているものです。

一部の言語は、最初のオペランドがtrueの場合にのみ論理ANDの2番目のオペランドを評価します(またはORの2番目のオペランドを最初のオペランドがfalseに評価された場合のみ評価します)この場合、2つではなく3つのテストが必要です。

a = true; b = true
a = true; b = false
a = false

お気づきのように、3番目のテストでは、bがfalseの場合はプログラムが計算しないため、aの値は気にしません。

10