我有一种情况,我需要编写一些测试用例来完全覆盖代码。 在一个特定的分支我得到了以下情况 if((A&& B& C)|| D)
if((A && B && C) || D)
{
//perform task 1'
}
else
{
//perform task 2;
}
但有了这个,我无法获得MCDC的测试用例组合.. 这可能是什么方式......
答案 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
的结果产生切换效果,B
和C
必须为true
,D
必须为{ {1}}。同样,要使false
具有切换效果,B
和A
必须是C
,而true
必须是D
。与false
有点不同:假设D
,D
,A
中的至少一个为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
,A
和B
的行相乘,我们得到(结果增加行号和列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
那是一种可能的解决方案。