我试图了解这两个覆盖标准之间的差异,但我无法弄清楚它们之间的区别。我认为我未能准确理解决策的覆盖范围。我的软件测试教科书指出,复合决策覆盖范围可能很高(n n 组合用于n个基本条件)。
我原本以为基本条件覆盖率会更高。
考虑a && b && c && d && e
。我的理解是,在基本条件覆盖中,这些原子变量中的每一个必须在测试用例中具有值TRUE和FALSE,以使测试用例具有基本条件充分性 - 即32个不同的测试用例。
那么实际差异是什么,以及什么被称为"基本条件"。在上面的示例中,a
是基本条件吗?
感谢。
答案 0 :(得分:1)
关于术语,我没有一个使用确切术语“基本条件覆盖”和“多条件覆盖”的单一来源。 Binder的“测试面向对象系统”表示“条件覆盖”和“多条件覆盖”。埃弗雷特& McLeod的“软件测试”称“简单条件覆盖”和“复合条件覆盖”。但我确信每种情况下的第一个术语是你的“基本条件覆盖”,第二个术语是你的“复合条件覆盖”。我将在下面使用这些条款。
基本条件覆盖率表示程序中的每个基本条件在某些测试中都为true,在某些测试中为false,与其他条件无关。在下面的
中if a && b && c
# do stuff
else
# do other stuff
end
复合条件a && b && c
有三个基本条件,a
,b
和c
。它只需要两个测试用例,一个是所有基本条件都为真,另一个是全误的,以获得完整的基本条件覆盖。基本条件恰好是复合条件的一部分并不重要。
请注意,基本条件覆盖率不是分支覆盖率。如果复合条件为a && b && !c
,那么上述两个测试用例仍将实现基本条件覆盖,但不会实现分支覆盖。
针对基本条件覆盖的不太积极优化的测试用例集将有一个测试用例,其中所有三个基本条件都是假的,并且每个具有不同基本条件的三个测试用例都是真的。这仍然只是复合条件下八种可能的基本条件组合中的四种。我们忽略其他四种不舒服的感觉是为什么复合条件覆盖。这需要对复合条件下的每种可能的基本条件组合进行测试。在上面的示例中,您需要进行八次测试,每种测试针对a
,b
和c
的可能值的每种可能组合,以获得完整的复合条件覆盖率。
答案 1 :(得分:0)
首先,决策和条件之间的区别。
Condition 是一个atomar布尔表达式,不能分解为更简单的布尔表达式。例如:a
(如果a
是布尔值)。
决策是具有零个或多个布尔运算符的条件的复合。没有操作员的决定也是一个条件。例如:(a or b) and c
,还有a and b
或a
。
让我们举一个简单的例子
if(decision) {
//branch 1
} else {
//branch 2
}
您需要两个测试来覆盖两个分支。那是决策覆盖或分支覆盖。如果决定是条件(即仅a
),那也称为基本条件覆盖,这是单个条件的两个分支的覆盖范围。
decision
可以细分为条件。
让我们举个例子
decision = (a or b) and c
决策范围将通过
实现但是布尔子表达式的所有组合的排列是完整条件覆盖或多条件覆盖),它是 basic的复合体条件覆盖率:
| a | b | c |
| 0 | 0 | 1 |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
| 1 | 1 | 0 |
这将是相当多的测试,但其中一些是多余的,因为其他人已经涵盖了一些条件。这反映在修改条件/决策覆盖(MC / DC)中,它是条件覆盖和功能覆盖的组合。
对于MC / DC,要求每个条件必须独立地影响结果。通过上述测试(全部为0或全部为1),我们忽略了这样的事实:如果a和b为0,则c值无关紧要,或者,如果a和c为1,则b值无关紧要。 / p>
所以你应该坐下来,使用你的大脑,并考虑总体结果R为1或0的组合。
| a | b | c | a or b | c | R | eq
1 | 0 | 0 | 0 | 0 | 0 | 0 | A
2 | 0 | 0 | 1 | 0 | 1 | 0 | B
3 | 0 | 1 | 0 | 1 | 0 | 0 | A
4 | 0 | 1 | 1 | 1 | 1 | 1 | C
5 | 1 | 0 | 0 | 1 | 0 | 0 | A
6 | 1 | 0 | 1 | 1 | 1 | 1 | D
7 | 1 | 1 | 0 | 1 | 0 | 0 | A
8 | 1 | 1 | 1 | 1 | 1 | 1 | D
最后一列显示等价类:
对于B和C来说,选择哪一个是非常明显的,A和D不是这样。对于每个你必须检查,如果我替换运算符会发生什么,即或者>和,和 - >或者,这将如何影响(子)决定的结果。如果结果会受到影响,你会得到一个候选人 - 如果没有,你就没有。
所以你得到了如上所述的最终测试集:
特别是后一个测试 - 更改运算符 - 可以使用突变测试等工具来完成,这些工具不仅可以重放运算符,还可以完成更多工作,即翻转操作数,删除语句,更改执行顺序,替换返回值等等。对于代码的每次更改,它都会验证测试是否确实失败。这是测试套件质量的良好指标,并确保代码不仅仅被覆盖,但您对代码的测试实际上是有效的。
关于术语,我在某处找不到“复合决策覆盖”一词。在我看来,“复合决定”将是条件化合物的复合物,换句话说:条件的复合物。