具有修改的条件/决策覆盖范围的最小测试用例集

时间:2015-05-29 23:11:43

标签: testing code-coverage mc-dc

我有一个关于修改后的条件/决定覆盖范围的问题,我无法弄清楚。

因此,如果我有表达式((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 我不同意,因为我在其他测试中分别测试了这组的部分,不是吗?

所以我似乎错过了第四个测试用例添加到集合中的内容,如果有人可以解释为什么我必须拥有它,那将会很棒?

3 个答案:

答案 0 :(得分:0)

回想一下,对于MC / DC,您需要为每个条件P(在您的情况下为A / B / C)两个测试用例T和T',以便P在T中为真,在T'中为假,因此结果谓词中的一个在一个测试案例中为true,在另一个测试案例中为false。

((A || B)&& C)的MC / DC封面是:

  • T1:(F,F,T)-> F(您的第一个测试用例)
  • T2:(F,T,T)-> T(与T1相比B翻转结果,丢失)
  • T3:(T,F,T)-> T(与第三个测试用例T1相比,翻转结果)
  • T4:(F,T,F)-> F(与第二个测试用例T2相比C翻转结果)

在具体的测试用例中,您不能具有“-” /“无关”值:在使用系统时必须做出选择。

所以答案中缺少的是一对两个测试用例(T1和T2),其中仅翻转第二个条件B也会翻转结果。

答案 1 :(得分:0)

首先,对MCDC进行一些解释

要实现MCDC,您需要为布尔表达式中满足MCDC标准的每个条件至少找到一个测试对。

目前,认证机构(例如FAA)定义和批准了3种类型的MCDC

  1. “唯一原因” – MCDC(原始定义):在测试对的两个测试值之间只能改变一个,特别是影响条件。对于测试对的2个测试值,布尔表达式的结果也必须是不同的。测试对中的所有其他条件必须固定且不变。
  2. “掩盖” – MCDC”:布尔表达式中只有一种条件会影响决策结果。其他条件也可能会更改,但必须掩盖。掩码表示,使用表达式中的布尔逻辑,它们不会对结果产生影响。如果AND的左侧为FALSE,则完整的右侧表达式和子表达式无关紧要。他们被掩盖了。遮罩是对“唯一原因” MCDC的放松。
  3. “独特原因+掩盖” – MCDC。这是一种混合形式,对于具有强耦合条件的布尔表达式(例如“ ab + ac”中的布尔表达式)尤其需要。找不到条件“ a”满足“唯一原因” – 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测试对。

您可以在这里找到它:

MCDC

我希望我可以阐明这个话题。我很乐意回答其他问题。

答案 2 :(得分:0)

要实现MCDC,当只有1个输入发生变化而其他输入保持恒定时,则要求输出发生变化。例如您的情况

(A || B)和C的MCDC

Image

因此,当A从1变为0时,B&C保持不变,而输出从1变为0。B和C都相同。

通常,他们说达到MCDC的最小步骤数是输入数+输出数。

因此,您的MCDC至少可以通过4个步骤实现。