私は過去数日間コンディションカバレッジを研究してきました。著書「The Art of Software Testing」では、決定カバレッジを保証するものではないことを強調しています。
IF(A && B)
A=True, B=false
およびA=False,B=True
は条件カバレッジを満たしますが、決定は常にFalse
です。
これはどのようにカバレッジを満たすことができますか? True
のB
値は、短絡のため実際にはテストされないため、カバレッジを満たすにはどうすればよいでしょうか。
条件カバレッジは、if
式の一部であるオペランドが問題なくtrue
とfalse
の両方に評価できることをテストすることです。このタイプのカバレッジでは、中括弧内で何が実行されるか、または条件で使用されるオペランドの結果については気にしません。
次のコードを見てください。
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
の値は気にしません。