【问题标题】:MC/DC - How to manage a decision not 100% coverageMC/DC - 如何管理非 100% 覆盖率的决定
【发布时间】:2018-07-24 14:28:04
【问题描述】:

考虑到决定“(A && B) || (!A && C)”,这会导致缺少 MC/DC 覆盖,例如无法测试 F #F#

  1. 没有达到 100% 的 MC/DC 是什么意思?难道只是一种品质 问题?
  2. 没有 100% 的 MC/DC 是否可以接受?
  3. 如何管理决策以达到 100% 的 MC/CD?

非常感谢。

【问题讨论】:

  • 我没有回答你的问题,但你能解释一下“F#F#”符号吗?
  • 符号“F#F#”表示“条件”值的可能组合以测试“决策”。特别是,“F#F#”表示有 4 个“条件”,第一个和第三个条件的值是 False,第二个和第四个条件是“不关心”(它们可以是 True o False,它是不相关)。
  • 谢谢,但这里只有三个变量。四个条件是什么?如果它们是“A”、“B”、“!A”、“C”,那么你当然不能测试 F#F#,因为你不能有 A false 和 !A false。

标签: code-coverage test-coverage mc-dc


【解决方案1】:

为了回答您的问题,我们先来看看 MC/DC 标准的一些组成部分:

更多详情在这里https://en.wikipedia.org/wiki/Modified_condition/decision_coverage#Definitions

  • 条件 - 条件应该是原子布尔表达式。
  • 决策 - 由零个或多个布尔运算符组成的布尔表达式和没有布尔运算符(AND 和 OR)的决策只是一个条件。

给定您的示例表达式 (A && B) || (!A && C),我们可以将其分解为三个条件“A”、“B”和“C”。请注意,A 和 !A 都是布尔表达式,但其中一个不是原子的。

然后我们可以创建一个真值表:

以黄色突出显示的是我们可以提出的“可能”的 MC/DC 评估。

识别后,我们会选择哪些已识别项目是“真实”的 MC/DC 评估,这将为我们提供 100% 的覆盖率。我们如何识别“真实”的评价?

我们识别每个条件的配对(真和假)可能的每一行的决策。在上图中,橙色突出显示的行是“真正的”MC/DC 评估,它将为我们提供 100% 的分支覆盖率和 100% 的条件覆盖率。

请记住,它应该至少输出 n+1 个测试。


  1. 如果您的 MC/DC 覆盖率不是 100%,则可能意味着您的条件创建方式有问题。为什么?举个简单的例子(A && !A),当条件“A”为真时,判断为假;当条件“A”为假时,判定仍为假。这个经典的例子,在编程中,可能会导致无法访问的代码。无法访问的代码是无用的,永远不会被执行。
  2. MC/DC 的目的是识别决策表达式中的缺陷。这将视具体情况而定,因为有些关键软件需要一定程度的完美,例如在航空领域,MC/DC 最常用于防止故障。在大多数条件常见的软件开发活动中,80% - 90% 是可接受的覆盖范围。
  3. 重新评估您的条件。花时间了解应用程序的逻辑和流程。我们之前做过的一项活动是生成与真值表配对的控制流图 (CFG),以识别逻辑的正确性。 A (CFG) 是某个布尔表达式的图形表示。它类似于流程图,其中条件节点可以为真或假,通过所有条件节点将导致某个决定。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多