无条件分支和代码覆盖

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 块,那么分支覆盖和决策覆盖将为您提供相同的信息。