PICT会保证所有有效值的取值组合都会被覆盖,此外任意非法值与有效值的组合也会被覆盖。以上模型将生成如下测试用例集。

A       B       C
1       1       -1
1       0       1
10      -1      -1
1       -1      0
10      0       -1
10      -1      1
10      0       0
10      1       0
1       1       1
~0      0       -1
~0      -1      0
~0      1       1
 

  如果很清楚被测试对象的实现逻辑,使用第一种方法可以生成规模较小的测试用例集,因为它几乎不考虑非法值与有效值的组合。如果只是从规格说明中了解到程序可能存在卫哨语句,那么用第二种方法可以生成更“安全”的测试用例集。

  4. 考虑采用多因素组合测试

  在软件测试过程中,先找到的缺陷往往处于程序的“主干”上,程序执行很容易覆盖相应的语句或状态;被遗漏的缺陷常常位于程序的“末枝”,程序执行需要满足特殊条件才能覆盖相应的语句或状态。这是软件测试的经验之谈,也提示两因素组合测试也许不能发现隐藏在“末枝”中的缺陷。一些路径需要多个因素满足一定取值组合才能被覆盖,然而两因素组合测试不能保证测试用例集可以覆盖这些组合。因此,在测试资源允许的情况下,引入多因素组合覆盖有可能进一步提高错误发现率。

  《微软的软件测试之道》建议从两因素组合测试开始,逐渐提高组合维度,直至6因素组合测试,因为有研究表明6因素组合测试可以发现绝大多数的程序缺陷。但是,随着组合维度的提高,测试用例数呈爆炸式增长。除非测试用例是由测试先知(Test Oracle)自动化执行,否则几乎没有团队能够完成6因素组合测试。在测试实践中,3因素组合测试可能是比较实际的选择。

  在PICT中,有两种方法引入多因素组合测试。第一种方法是在命令行上使用参数"/o:N"。例如,在命令行上执行"pict.exe model.txt /o:3",可以生成三因素组合测试用例集。另一种更加实用的方法是在模型文件中定义“子模型”(Sub-Models)。在PICT的帮助文件中有如下的模型文件定义。

PLATFORM:  x86, ia64, amd64
CPUS:      Single, Dual, Quad
RAM:       128MB, 1GB, 4GB, 64GB
HDD:       SCSI, IDE
OS:        NT4, Win2K, WinXP, Win2K3
IE:        4.0, 5.0, 5.5, 6.0
APP:       SQLServer, Exchange, Office
{ PLATFORM, CPUS, RAM, HDD } @ 3
{ OS, IE } @ 2
 

  根据该模型文件,PICT将对PLATFORM, CPUS, RAM, HDD实施3因素组合覆盖,具体的生成策略可参加下图。PICT在两因素组合覆盖的基础上,对某些因素实施多因素组合覆盖,这有助于实现更灵活的测试策略。