无条件分支和代码覆盖
Unconditional branching and code coverage
所以我了解到分支覆盖与决策覆盖不同,因为分支覆盖通常还包括无条件分支,例如方法调用,在 C# 中使用 throw、break 和其他关键字。
但是我想知道,代码分析器中是否真的使用了这种分支覆盖?我怀疑他们使用决策覆盖,确保覆盖所有决策结果(即结果分支)。
我的意思是,以下代码有 2 个条件分支,但有 5 个无条件分支:
if(A)
B();
C();
D();
E();
else
X();
而且我相信,如果我编写一个测试来评估 A 为假,代码分析器会告诉我分支覆盖率为 50%。但是从无条件分支来看,更多的是不会被执行的。
对吗?
分支覆盖率不会告诉您某个决定是否已被测试为真假。
示例:
if (c) {
x=...
}
y=...
如果 c 的计算结果为 TRUE,则执行包含 x=... 的块,并且
分支覆盖将检测到这一点。它还会检测到从 y 开始的代码已被执行。因此,如果 C 为真,您将获得 100% 的覆盖率,而不知道如果 C 为假会发生什么。
有了决策覆盖率,如果覆盖率为 100%,您就会知道 C 已被求值并产生 TRUE 和 FALSE。
如果您的条件 if 有一个 then 块 和 一个 else 块,那么分支覆盖和决策覆盖将为您提供相同的信息。
所以我了解到分支覆盖与决策覆盖不同,因为分支覆盖通常还包括无条件分支,例如方法调用,在 C# 中使用 throw、break 和其他关键字。 但是我想知道,代码分析器中是否真的使用了这种分支覆盖?我怀疑他们使用决策覆盖,确保覆盖所有决策结果(即结果分支)。 我的意思是,以下代码有 2 个条件分支,但有 5 个无条件分支:
if(A)
B();
C();
D();
E();
else
X();
而且我相信,如果我编写一个测试来评估 A 为假,代码分析器会告诉我分支覆盖率为 50%。但是从无条件分支来看,更多的是不会被执行的。 对吗?
分支覆盖率不会告诉您某个决定是否已被测试为真假。
示例:
if (c) {
x=...
}
y=...
如果 c 的计算结果为 TRUE,则执行包含 x=... 的块,并且 分支覆盖将检测到这一点。它还会检测到从 y 开始的代码已被执行。因此,如果 C 为真,您将获得 100% 的覆盖率,而不知道如果 C 为假会发生什么。
有了决策覆盖率,如果覆盖率为 100%,您就会知道 C 已被求值并产生 TRUE 和 FALSE。
如果您的条件 if 有一个 then 块 和 一个 else 块,那么分支覆盖和决策覆盖将为您提供相同的信息。