证明MC / DC唯一原因定义符合性

时间:2014-12-29 19:57:07

标签: code-coverage mc-dc

我正在阅读有关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 D中的第一个测试用例屏蔽为F and (C or D) = F
  • C or D = T T F T T,意味着它将A or B中的第三个测试用例屏蔽为(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 T更改为T 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/DC确定了A or B

  • F F(第一个案例)
  • T F(第五个案例)
  • F T(第四个案例)

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

enter image description here

我理解,对于第一个例子,它们显示的独立对改变了两个变量而不是一个变量,但我不理解他们如何计算独立对。

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

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

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

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

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

1 个答案:

答案 0 :(得分:8)

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

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

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

条件

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

决策

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

决策覆盖范围

程序中每个进入和退出点至少被调用一次 并且该计划中的每项决定都至少采取了一次可能的结果。

修改后的条件/决策覆盖范围

程序中每个进入和退出点至少被调用一次, 该计划决策中的每个条件都取得了所有可能的结果 至少一次,该计划中的每项决定都取得了所有可能的结果 至少一次,并且决定中的每个条件都已独立显示 影响决定的结果。 通过改变公正,证明条件独立地影响决策的结果 在保持固定所有其他可能条件的同时。


因此,对于决定'(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的Qualifiable Code coverage工具 - www.rapitasystems.com/products/rapicover),我们可以看到完整的测试向量(观察或缺失),以完全涵盖决策的所有条件。 / p>

RapiCover screenshot

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的变化被布尔运算符'或1'掩盖。 (即,A或B'的值不变)。

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

RapiCover screenshot