C 的代码覆盖率

标签 c unit-testing code-coverage test-coverage

我一直在审查嵌入式系统上使用的不同代码覆盖率测试。特别是,我正在查看 MC/DC。据我了解,其中一个目标是确保语句中的每个逻辑子句都应该影响语句的结果。

两个问题:

  1. 独立验证每个条款对结果有影响有什么好处?
  2. 为什么 (A||B) && (A||!C) 不能达到 100% MC/DC,而 A||(B&&!C) 将实现 100% MC/DC 即使它们具有完全相同的功能?

最佳答案

回答你的问题

  1. 您需要尽可能少的代码和尽可能不复杂的代码。无法到达的条件会延长您的代码并使您的代码不必要地复杂。

  2. (A||B) && (A||!C) 不会达到 100% 因为它需要 A 检查两次原因。在 A 为假且 B 为真的情况下,A 的真实性将在 ( A||!C) 表达式在这个公式中没有任何原因,而在公式 A||(B&&!C) 中检查了 A 的真实性只有一次。

关于C 的代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40415177/

相关文章:

c# - 单例如何妨碍可测试性

java - 如何按名称模式从 IntelliJ 代码覆盖范围中排除文件?

javascript - 如何在 Jest.js 中测试递归函数

c# - 在调用 .Object 属性后更改 Mock<IType> 对象

javascript - Sonarqube 默认覆盖范围从具有绝对路径的 Karma Coverage LCOV 文件变为 0

android - "EMMA: nothing to do: no metadata found in any of the data files"与 Emma 在 android 中创建 coverage.html

c - 一旦在 C 中声明为 WEAK 函数,如何使用 REAL 函数?

c - 打印多个整数输出 0

c - CHAR_BIT 是否大于 8?

c - 箭头运算符与点运算符