私はこれらの違いを研究していますが、違いを理解できません。私には同じように思えます。それらは同じではありませんか?リスクは短絡から来ていますよね?
ステートメント カバレッジでは、論理演算子のテストは必要ありません。C++ および C では、これらの演算子は &&、||、および ?: です。ステートメント カバレッジは、論理演算子で区切られたコードをステートメントの残りの部分から区別できません。ステートメント内のコードの任意の部分を実行すると、ステートメント カバレッジによって、ステートメント全体が完全にカバーされていると宣言されます。論理演算子が不必要な評価を (短絡によって) 回避する場合、ステートメント カバレッジは膨張したカバレッジ測定値を示します。
void function(const char* string1, const char* string2 = NULL);
...
void function(const char* string1, const char* string2)
{
if (condition || strcmp(string1, string2) == 0) // Oops, possible null pointer passed to strcmp
...
}
決定範囲 - 短所は、このメトリックが、短絡演算子が原因で発生するブール式内の分岐を無視することです。たとえば、次の C/C++/Java コード フラグメントについて考えてみます。
if (condition1 && (condition2 || function1()))
statement1;
else
statement2;