我正在阅读有关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页):
我理解,对于第一个例子,它们显示的独立对改变了两个变量而不是一个变量,但我不理解他们如何计算独立对。
在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
,这破坏了我的理论,他们正在计算独立对第一个值,证明他们是从其他地方挑选的。
有人可以更好地解释他们如何(以及从何处)构建这样的独立配对表?
答案 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>
Vector V3(上面屏幕截图中的黄色)并未用于任何独立对。 对于条件D的MC / DC覆盖,缺少向量V6(屏幕截图中的红色)。
这是出于“独特原因”的定义。 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的独立对可以是: