我正在研究这些之间的区别,但无法理解其中的区别。对我来说似乎是一样的。他们不一样吗?风险来自短路,不是吗?
语句覆盖不需要测试逻辑运算符。在 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;