MCDC(Modified Condition Decision Coverage)的原始定义没有考虑几种情况。其中之一是您的问题的原因。你有“耦合条件”。这意味着,相同的条件被多次使用。有强耦合条件和弱耦合条件。例如:在布尔表达式中:
"ab+ac" 变量 "a" 存在于 2 个乘积项中。根据最初的定义,不可能找到满足唯一原因 MCDC 的测试对。
这导致了很多问题,并且基本上导致了 3 种 MCDC 形式的新定义
- 唯一原因(根据原始定义)
- 独特的原因 + 掩蔽
- 屏蔽
什么是屏蔽?
Masking 考虑了布尔 Annihilator 的属性。意思是“A 和 FALSE”--> FALSE 和“A 或 TRUE”--> TRUE。
因此,如果对布尔表达式求值,并且很早就清楚子项不能对结果做出贡献,则无需对其求值。子项被屏蔽。没关系。
顺便说一下,同样的机制也用于布尔快捷评估。
通过这种放松,您可以找到更多针对影响变量的测试对。 NASA 和 FAA 也将接受这些额外形式的 MCDC。
如果我们对影响变量使用 Masking,那么我们将 test-pair-MCDC-property 称为“Unique Cause + Masking”。如果我们允许所有被屏蔽的变量发生变化,那么我们将 test-pair-MCDC-property 称为“Masking”。
对于上述示例“ab+ac”,您可以找到以下测试对:
Influencing Condition: 'a' Pair: 1, 5 Unique Cause + Masking
Influencing Condition: 'a' Pair: 2, 6 Unique Cause + Masking
Influencing Condition: 'a' Pair: 3, 5 Masking
Influencing Condition: 'a' Pair: 3, 6 Masking
Influencing Condition: 'b' Pair: 4, 6 Unique Cause
Influencing Condition: 'c' Pair: 4, 5 Unique Cause
(例如,5 是变量 abc 设置的十进制等值,在本例中为 101)。
应用集合覆盖问题将导致 3 个可能的测试集
-------- 覆盖集 1 ------------------------------------ ----------------
Test Pair for Condition 'a': 1 5 (Unique Cause + Masking)
Test Pair for Condition 'b': 4 6 (Unique Cause)
Test Pair for Condition 'c': 4 5 (Unique Cause)
结果测试向量:1 4 5 6
-------- 覆盖集 2 ------------------------------------ ----------------
Test Pair for Condition 'a': 2 6 (Unique Cause + Masking)
Test Pair for Condition 'b': 4 6 (Unique Cause)
Test Pair for Condition 'c': 4 5 (Unique Cause)
结果测试向量:2 4 5 6
-------- 覆盖集 3 ------------------------------------ ----------------
Test Pair for Condition 'a': 1 5 (Unique Cause + Masking)
Test Pair for Condition 'b': 4 6 (Unique Cause)
Test Pair for Condition 'c': 4 5 (Unique Cause)
结果测试向量:1 4 5 6
最后的结果是:
测试向量:推荐结果:1 4 5 6
1: a=0 b=0 c=1 (0)
4: a=1 b=0 c=0 (0)
5: a=1 b=0 c=1 (1)
6: a=1 b=1 c=0 (1)
请注意:
了解您需要使用 WhiteBox 视图查看布尔表达式非常重要。 MCDC 是一种结构覆盖率指标,因此您需要了解源代码。反正。在许多视频和解释中,人们开始从真值表 (BlackBox) 中解释 MCDC。这对于掩蔽或更复杂的表达式永远不起作用。在上面的示例中,您不会发现 3 和 5 是有效的 MCDC 测试对。这只能通过 WhiteBox 方法找到。
我对问题进行了深入分析,并发布了一个查看测试用例的工具
GitHub:MCDC
如果您需要这方面的支持,请与我联系。