C 的代码覆盖率

Code Coverage for C

我一直在审查嵌入式系统上使用的不同代码覆盖率测试。特别是,我正在查看 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 的真实性只被检查一次。