对条件(A& B& C)||执行MCDC d

时间:2016-06-07 06:28:33

标签: unit-testing

我有一种情况,我需要编写一些测试用例来完全覆盖代码。 在一个特定的分支我得到了以下情况 if((A&& B& C)|| D)

if((A && B && C) || D)
{
  //perform task 1'
}
else
{
  //perform task 2;
}

但有了这个,我无法获得MCDC的测试用例组合.. 这可能是什么方式......

3 个答案:

答案 0 :(得分:1)

您的出路可能是使用工具MCDC来确定可能的测试用例。

由于有许多可能的测试对组合,因此手动进行这项工作确实非常繁琐。

很抱歉,我无法分享研究的所有细节。我首先建议阅读由FAA发行的“对三种形式的病情决策覆盖标准的调查”(DOT / FAA / AR-01 / 18)。

包括掩蔽在内,有52个可能的测试对。如果您进行了正确的WhiteBox分析(包括布尔快捷方式评估),那么您甚至可以找到63个MCDC测试对。采用集合覆盖算法将得出3种可能的最小测试集。

进行启发式搜索可能会得出令人惊讶的测试向量:

 Test Pair for Condition 'a':    0  14   (Unique Cause)
 Test Pair for Condition 'b':    8  14   (Unique Cause)
 Test Pair for Condition 'c':   12  14   (Unique Cause)
 Test Pair for Condition 'd':    0   1   (Unique Cause)

Testvector:推荐结果:0 1 8 12 14

0:   a=0  b=0  c=0  d=0    (0)
1:   a=0  b=0  c=0  d=1    (1)
8:   a=1  b=0  c=0  d=0    (0)
12:  a=1  b=1  c=0  d=0    (0)
14:  a=1  b=1  c=1  d=0    (1)

答案 1 :(得分:0)

我认为一种方法可能是(A&& B& C)保持D = 1的所有错误组合以及(A&& B& C)的真正组合保持D = 0并在最后保持所有输入0.所以测试用例组合可以是:

&rvprop=timestamp|content|user|comment

答案 2 :(得分:0)

对于MC / DC,您必须针对每种条件(输入)i,找到一对组合,其中只有i会发生切换,并且输出会发生变化。为了使A(A && B && C) || D的结果产生切换效果,BC必须为trueD必须为{ {1}}。同样,要使false具有切换效果,BA必须是C,而true必须是D。与false有点不同:假设DDA中的至少一个为B,则在C上切换输出。这给出了以下组合(false表示切换输入):

x

通过将A B C D x 1 1 0 - for A 1 x 1 0 - for B 1 1 x 0 - for C q r s x - for D, where q + r + s < 3 AB的行相乘,我们得到(结果增加行号和列C):

R

第4行和第6行是第2行的重复项。要表示第7行,我们可以使用第1,3,5行之一,并在# A B C D R 1 0 1 1 0 0 - for A 2 1 1 1 0 1 - for A 3 1 0 1 0 0 - for B 4 1 1 1 0 1 - for B (duplicate) 5 1 1 0 0 0 - for C 6 1 1 1 0 1 - for C (duplicate) 7 q r s x - for D, where q + r + s < 3 设置为1的情况下添加同一行,从而得到以下结果(选择第1行):

D

那是一种可能的解决方案。