unit-testing - 代码覆盖是否应该考虑由短路引起的代码分支?

标签 unit-testing code-coverage code-analysis

常规分支覆盖将需要两个单元测试来覆盖一个简单的 if 语句。但是如果有if (A && B)这样的组合条件,从控制流图的角度来看,如果使用短路,就会有一个额外的分支。这与给出 3 的圈复杂度计数一致(还应用每个逻辑运算符将复杂度增加 1 的规则,因为在短路的情况下会创建决策节点)。但据我所知,代码分析器不考虑那些分支。 无论如何都值得覆盖它们以确保表达式的部分评估不会产生副作用吗?

最佳答案

当然,这取决于您分析代码的目的。

FAA 通常建议(例如 DOT/FAA/AR-06/54“软件验证工具评估研究”,最终报告,2007 年 6 月。第 4.2.5 节)短路运算符的所有操作数(包括 C 的三元运算符)运算符,以及 bool 运算符)被解释为决策 - 就像你描述的那样。对于更高的设计保证级别(特别是灾难性和危险性),根据相关标准(DO178、DO254 等)要满足的目标具有要求覆盖所有可能的决策的效果——在更高的 DAL 上增加独立性。

因此,假设您的应用程序需要更高的 DAL,答案通常是肯定的。另一种方法是构建一个特定的论据来支持这样的声明,即不需要这种覆盖来满足您的分析或测试的目标 - 并说服审阅者接受该论点。可能需要为每个短路实例构建这样的论点。

关于unit-testing - 代码覆盖是否应该考虑由短路引起的代码分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37066431/

相关文章:

c# - 一种方法依赖于另一种方法是否有代码味道?

python - 有没有办法启动仅与更改的代码相关的单元测试?

c# - Visual Studio 中的变量命名约定是否有任何可以在开发时强制执行的规则?

teamcity - 如何将来自多个项目的 TeamCity 代码覆盖率报告收集到一份报告中?

C++/Objective-C - 如何分析一个大项目(Unix 方式)?

C#代码分析CA2000

c# - sql 查询 c# 的单元测试

python - Django - 模拟模型上的保存方法

java - Mockito - 仅模拟一个方法

javascript - Jest 中语句覆盖率和行覆盖率的区别