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

Testing 多条件覆盖是否总是意味着分支覆盖?,testing,code-coverage,Testing,Code Coverage,多条件覆盖是否意味着分支覆盖 我一直在网上阅读不同覆盖率标准之间的一些比较,我发现一些参考资料声称多条件覆盖率并不一定意味着分支覆盖率,而其他人则声称它意味着分支覆盖率,因为它测试了所有可能的组合 我知道使用短路逻辑运算符很难实现多条件覆盖,但我不确定这是否与比较有关。不,不相关 逻辑上应该是这样,但代码中可能存在缺陷,导致条件求值始终为false,例如,尽管存在子条件的组合。 例如(来自Bullseye.com): 对。多条件覆盖(MCC)意味着分支覆盖 与普通条件覆盖率不同,MCC指标处理影

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

我一直在网上阅读不同覆盖率标准之间的一些比较,我发现一些参考资料声称多条件覆盖率并不一定意味着分支覆盖率,而其他人则声称它意味着分支覆盖率,因为它测试了所有可能的组合

我知道使用短路逻辑运算符很难实现多条件覆盖,但我不确定这是否与比较有关。

不,不相关

逻辑上应该是这样,但代码中可能存在缺陷,导致条件求值始终为false,例如,尽管存在子条件的组合。 例如(来自Bullseye.com):


对。多条件覆盖(MCC)意味着分支覆盖

与普通条件覆盖率不同,MCC指标处理影响决策的所有条件组合。决策控制分支


从这个意义上讲,多条件覆盖与

IMO,100%多条件覆盖率是100%分支覆盖率,但100%分支覆盖率可能并不意味着100%MCC。正如你提到的,MCC涵盖了所有可能的条件。因此,您还需要考虑所有可能的分支。请注意,只有当您拥有100%的MCC覆盖率时,这才是正确的。因此,100%的MCC意味着100%的分支覆盖率。但在50%的MCC下,您无法说明分支覆盖率的百分比。在本例中,由于存在不可行路径,您将无法获得100%的MCC覆盖率(因此,您也不一定拥有100%的分支覆盖率)。
bool f(bool e) { return false; }
bool a[2] = { false, false };
if (f(a && b)) ...
if (a[int(a && b)]) ...
if ((a && b) ? false : false)