我有一个关于修改后的条件/决定覆盖范围的问题,我无法弄清楚。
因此,如果我有表达式((A || B) && C)
并且任务是最少数量的测试用例,则接收100%MD / DC。
我将其分为两部分,其中(A || B)
和(X && C)
的测试用例数量最少。
(A || B) : {F, F} = F, {F, T} = T, {T, -} = T
(X && C) : {F, -} = F, {T, F} = F, {T, T} = T
' - '表示它们的值无关紧要,因为它们不会被编译器评估。
因此,当我将这些结合起来时,我将其作为我的最小测试用例集:
((A || B) && C) : {{F, F}, -} = F, {{F, T}, F} = F, {{T, -}, T} = T
但是当我谷歌时,它也在集合中:{{F, T}, T} = T
我不同意,因为我在其他测试中分别测试了这组的部分,不是吗?
所以我似乎错过了第四个测试用例添加到集合中的内容,如果有人可以解释为什么我必须拥有它,那将会很棒?
答案 0 :(得分:0)
回想一下,对于MC / DC,您需要为每个条件P(在您的情况下为A / B / C)两个测试用例T和T',以便P在T中为真,在T'中为假,因此结果谓词中的一个在一个测试案例中为true,在另一个测试案例中为false。
((A || B)&& C)的MC / DC封面是:
在具体的测试用例中,您不能具有“-” /“无关”值:在使用系统时必须做出选择。
所以答案中缺少的是一对两个测试用例(T1和T2),其中仅翻转第二个条件B也会翻转结果。
答案 1 :(得分:0)
首先,对MCDC进行一些解释
要实现MCDC,您需要为布尔表达式中满足MCDC标准的每个条件至少找到一个测试对。
目前,认证机构(例如FAA)定义和批准了3种类型的MCDC
使用这两个附加定义,可以找到更多的测试对。
请另外注意,当使用具有布尔快捷方式评估策略的语言(例如Java,C,C ++)时,甚至有更多的测试对满足MCDC标准。
非常重要的是要了解,真值表上的BlackBox视图不允许找到任何Masking或布尔值捷径评估。
MCDC是一种结构覆盖率指标,因此绝对必须使用布尔表达式上的WhiteBox视图。
所以,现在到您的表情:“(a + b)c”。带有布尔快捷方式评估的蛮力分析将为您的3个条件a,b,c提供以下测试对:
Influencing Condition: 'a' Pair: 0, 5 Unique Cause
Influencing Condition: 'a' Pair: 0, 7 Unique Cause
Influencing Condition: 'a' Pair: 1, 5 Unique Cause
Influencing Condition: 'a' Pair: 1, 7 Unique Cause
Influencing Condition: 'b' Pair: 0, 3 Unique Cause
Influencing Condition: 'b' Pair: 1, 3 Unique Cause
Influencing Condition: 'c' Pair: 2, 3 Unique Cause
Influencing Condition: 'c' Pair: 2, 5 Masking
Influencing Condition: 'c' Pair: 2, 7 Masking
Influencing Condition: 'c' Pair: 3, 4 Masking
Influencing Condition: 'c' Pair: 3, 6 Masking
Influencing Condition: 'c' Pair: 4, 5 Unique Cause
Influencing Condition: 'c' Pair: 4, 7 Unique Cause
Influencing Condition: 'c' Pair: 5, 6 Unique Cause
Influencing Condition: 'c' Pair: 6, 7 Unique Cause
没有白盒视图,您将永远找不到“唯一原因” –条件“ a”的MCDC测试对(如0.7)。此外,您将找不到任何有效的“掩盖”-MCDC”测试对。
下一步是找到一个最小测试集。这可以通过应用“固定封面”或“统一封面”算法来完成。通过上面的测试对,我们可以创建一个表,该表显示哪个测试值涵盖了什么条件。您的情况如下所示:
0 1 2 3 4 5 6 7
a X X X X
b X X X
c X X X X X X
简单消除双列已经可以将表格缩小为
0 1 2 3 4 5 6 7 0 3 5
a X - X - ==> a X X
b X - X b X X
c - X - X - - c X X
请注意:我们采用了一些启发式方法进行选择,应该删除哪些完全相同的列。因此,有效的解决方案有更多的解决方案。但是随着计算时间和条件数量相关的内存消耗几何级增长,这是唯一有意义的方法。
现在,我们将应用Petrick的方法并找出所有覆盖范围集:
1. 0, 3
2. 0, 5
3. 3, 5
这意味着,我们需要从上面的测试对列表中选择a,b,c的测试对,其中包含解决方案1、0和3,解决方案2、0和5以及解决方案3 3和5
此外,在这里,我们将应用一些启发式函数来提出最小的解决方案:
-------- For Coverage set 1
Test Pair for Condition 'a': 0 5 (Unique Cause)
Test Pair for Condition 'b': 0 3 (Unique Cause)
Test Pair for Condition 'c': 2 3 (Unique Cause)
Resulting Test Vector: 0 2 3 5
-------- For Coverage set 2
Test Pair for Condition 'a': 0 5 (Unique Cause)
Test Pair for Condition 'b': 0 3 (Unique Cause)
Test Pair for Condition 'c': 5 6 (Unique Cause)
Resulting Test Vector: 0 3 5 6
-------- For Coverage set 3
Test Pair for Condition 'a': 1 5 (Unique Cause)
Test Pair for Condition 'b': 1 3 (Unique Cause)
Test Pair for Condition 'c': 5 6 (Unique Cause)
Resulting Test Vector: 1 3 5 6
---------------------------------------
Test vector: Recommended Result: 0 2 3 5
0: a=0 b=0 c=0 (0)
2: a=0 b=1 c=0 (0)
3: a=0 b=1 c=1 (1)
5: a=1 b=0 c=1 (1)
您会看到所有3种可能的解决方案都有4个测试用例,涵盖所有条件并满足MCDC标准。如果您在Internet上检查出版物,那么您将看到最小测试数为n + 1(n =条件数)。听起来这不是一个伟大的成就。但是查看MCC(多条件覆盖),您将拥有2 ^ n个测试用例。因此,对于8个条件256个测试用例。有了MCDC,只有9个。这就是提出MCDC的原因之一。
我还创建了一个软件,以帮助更好地了解MCDC的覆盖范围。它使用布尔表达式作为输入,简化该表达式(如果需要)并计算所有MCDC测试对。
您可以在这里找到它:
我希望我可以阐明这个话题。我很乐意回答其他问题。
答案 2 :(得分:0)