分支覆盖是否意味着条件覆盖?

Does Branch coverage implies Condition Coverage?

我需要一些帮助来理解和正确解释 gcov 结果。

执行的行数:24 行的 25% 分支机构 executed:30% of 20 至少服用一次:20 次中的 15% 执行的调用:2

的 50%

执行的行数提供了语句覆盖率。 执行的分支为我提供了决策覆盖率和条件覆盖率

如果我说 100% 的分支覆盖率意味着 100% 的决策覆盖率和条件覆盖率,我对吗?

因为我的理解是 if 语句 if(a<1 || b>2){...}else{...} 没有两个分支而是 4 个分支,因为我有两个条件。这意味着如果我要遍历所有 4 个分支,我应该有条件覆盖,或者分支覆盖是否不提供有关条件覆盖的信息

感谢您的帮助。

干杯

如果您专门谈论 gcov 工具,那么分支覆盖率实际上是在计算到达每个基本块末尾的点。参见 Understanding branches in gcov files

条件覆盖范围有所不同。请参阅 Is it possible to check condition coverage with gcov? (The answer is no, it's not, at least not with just gcov.) As Marc Gilsse's comment notes,您可以使用 gcov -a 来计算每个基本块的执行次数,并将其用作合理的近似值——但这不是一回事。

C++ 的异常使得处理分支覆盖变得混乱;参见 LCOV/GCOV branch coverage with C++ producing branches all over the place。这意味着您不一定能够首先覆盖所有分支。

另见,例如,