7

我正在阅读以下关于 MC/DC 的论文: http: //shemesh.larc.nasa.gov/fm/papers/Hayhurst-2001-tm210876-MCDC.pdf

我有源代码:Z := (A or B) and (C or D)和以下测试用例:

-----------------
| A | F F T F T |
| B | F T F T F |
| C | T F F T T |
| D | F T F F F |
| Z | F T F T T |
-----------------

我想证明上述测试用例符合唯一原因定义。

我从消除蒙面测试开始:

  • A or B = F T T T T,这意味着它将第一个测试用例从C or Das中屏蔽掉F and (C or D) = F
  • C or D = T T F T TA or B,这意味着它从as中屏蔽了第三个测试用例(A or B) and F = F

然后我确定MC/DC

所需的测试用例A or B

  • F F(第一种情况)
  • T F(第五种情况)
  • F T(第二种或第四种情况)

所需的测试用例C or D

  • F F(第三种情况)
  • T F(第四或第五种情况)
  • F T(第二种情况)

所需的测试用例(A or B) and (C or D)

  • T T(第二、第四或第五种情况)
  • F T(第一种情况)
  • T F(第三种情况)

根据论文,这个例子不符合唯一原因定义。相反,他们建议将第二个测试用例从 更改F T F TT F F T

-----------------
| A | F T T F T |
| B | F F F T F |
| C | T F F T T |
| D | F T F F F |
| Z | F T F T T |
-----------------

我再次下定决心MC/DCA or B

  • F F(第一种情况)
  • T F(第五种情况)
  • F T(第四种情况)

然后,他们介绍了以下独立性对表,显示了两个示例之间的差异(第 38 页):

在此处输入图像描述

我知道对于第一个示例,它们显示的独立对更改了两个变量而不是一个,但是我不明白他们如何计算独立对。

A列中,我可以推断它们F F T F从测试用例表的A行中获取,并且它们将独立对计算为相同的测试用例,仅A更改 ( T F T F)。

然而,在B's 列中,他们F F T F再次选择。根据我的想法,这应该等于B' 列:F T F T而不是。

其余的字母显示了同样的困境。

同样对于D的第一个示例列,他们表明独立对F T F TT F F F,这破坏了我的理论,即他们正在从第一个值计算独立对,并证明他们是从其他地方挑选的。

有人可以更好地解释他们如何(以及从哪里)构建这样的独立配对表吗?

4

1 回答 1

8

首先让我们重新阅读定义:

(来自 www.faa.gov/aircraft/air_cert/design_approvals/air_software/cast/cast_papers/media/cast-10.pdf)

DO-178B/ED-12B 包括以下定义:

健康)状况

不包含布尔运算符的布尔表达式。

决定

由条件和零个或多个布尔运算符组成的布尔表达式。没有布尔运算符的决定是一个条件。如果一个条件在决策中出现多次,则每次出现都是一个不同的条件。

决策覆盖率

程序中的每个进入点和退出点都至少被调用过一次,并且程序中的每个决定都至少对所有可能的结果采取了一次。

修改条件/决策覆盖

程序中的每个进入点和退出点都至少被调用过一次,程序中决策中的每个条件都至少采取了所有可能的结果,程序中的每个决策都至少采取了所有可能的结果,并且每个条件在一个决定中已被证明独立地影响该决定的结果。一个条件被证明可以独立地影响决策的结果,方法是只改变那个条件,同时保持所有其他可能的条件不变。


因此,对于决定“(A 或 B)和(C 或 D)”,我们有四个条件:A、B、C 和 D

对于每个条件,我们必须找到一对测试向量,表明该条件“独立地影响该决策的结果”。

对于唯一原因 MC/DC,只有所考虑的条件值可以在测试向量对中变化。

例如,让我们考虑条件 A。以下一对测试向量涵盖条件 A:

(A or B) and (C or D) = Z
 T    F       T    F    T   
 F    F       T    F    F   

使用这对测试向量(TFTF、FFTF),只有 A 和 Z(决策)的值会发生变化。

然后我们搜索条件 B、C 和 D 的对。

使用 RapiCover GUI(来自 Rapita Systems 的合格代码覆盖工具 - www.rapitasystems.com/products/rapicover),我们可以看到完整的测试向量集(观察到的或缺失的)以完全覆盖决策的所有条件。

RapiCover 截图

Vector V3(上面屏幕截图中的黄色)未用于任何独立对。条件 D 的 MC/DC 覆盖缺少矢量 V6(屏幕截图中的红色)。

这是针对“唯一原因”MC/DC 的定义。


现在对于“屏蔽 MC/DC”:

对于“屏蔽 MC/DC” ,如果表达式中的布尔运算符屏蔽了任何其他更改,则放宽了单个条件的值在一对测试向量中可能变化的要求。

例如,让我们考虑条件 D 的向量对:

  (A or B) and (C or D) = Z
   T    F       F    T    T   
   T    F       F    F    F 

我们可以在表达式树上表示这两个测试向量:

        and
      /     \
    or1     or2
   /  \    /  \
  A    B  C    D


        and                          and
        [T]                          [F]
      /     \                      /     \
    or1     or2                  or1      or2
    [T]     [T]                  [T]      [F]
   /  \    /  \                 /   \    /   \
  A    B  C    D               A     B  C     D
 [T]  [F][F]  [T]             [T]   [F][F]   [F]

这是一对独特的原因 MC/DC。

现在让我们考虑条件 D 的一对新测试向量:

  (A or B) and (C or D) = Z
   F    T       F    T    T   
   T    F       F    F    F   

同样,我们可以在表达式树上表示这两个测试向量:

        and                          and
        [T]                          [F]
      /     \                      /     \
    or1     or2                  or1      or2
    [T]     [T]                  [T]      [F]
   /  \    /  \                 /   \    /   \
  A    B  C    D               A     B  C     D
 [F]  [T][F]  [T]             [T]   [F][F]   [F]

这是用于屏蔽 MC/DC 的一对,因为虽然 3 个条件(A、B 和 D)的值已经改变,但条件 A 和 B 的变化被布尔运算符“or1”(即“A 或 B”的值' 不变)。

因此,对于屏蔽 MCDC,所有条件 D 的独立对可以是:

RapiCover 截图

于 2015-01-07T10:16:32.437 回答