针对上述问题又提出了另一种标准——“条件组合覆盖”。它的含义是:执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。显然,满足“条件组合覆盖”的测试用例是一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”的。
再看图6.4的程序,我们需要选择适当的例子,使得下面8种条件组合都能够出现:
1)A>1, B=0 2) A>1, B¹0 3) A≤1, B=0 4)A≤1, B≠0
5)A=2, X>1 6)A=2,X≤1 7)A≠2, X>1 8)A≠2, X≤1
必须注意到,5)、6)、7)、8)四种情况是第二个IF语句的条件组合,而X的值在该语句之前是要经过计算的,所以还必须根据程序的逻辑推算出在程序的入口点X的输入值应是什么。
下面四个例子可以使上述8种条件组合至少出现一次:
①A=2,B=0,X=4使1)、5)两种情况出现;②A=2,B=1,X=1使2)、6)两种情况出现;
③A=1,B=0,X=2使3)、7)两种情况出现; ④A=1,B=1,X=1使4)、8)两种情况出现。
上面四个例子虽然满足条件组合覆盖,但并不能覆盖程序中的每一条路径,例如路径acd就没有执行,因此,条件组合覆盖标准仍然是不彻底。