2

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

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

非常感谢。

4

1 回答 1

2

为了回答您的问题,让我们先来看看 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% 的覆盖率。我们如何识别“真实”的评价?

真值表 - 已确定

我们识别每个条件的配对(TRUE 和 FALSE)以及可能的每一行的决策。在上图中,带有橙色突出显示的行是“真正的”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) 是某个布尔表达式的图形表示。它类似于流程图,其中条件节点可以为真或假,通过所有条件节点将导致某个决定。

希望这可以帮助!

于 2018-11-16T11:45:51.440 回答