在测试工作中,我们经常遇到这样的场景:一个软件功能有多个输入项,而每个输入项有多个可选项。例如,一款软件在安装时支持以下操作系统和数据库:
操作系统:OS1,OS2,OS3,OS4,SO5
数据库:DB1,DB2,DB3
直观来看,我们把二者做一个组合,需要搭建和测试15测试组合。有没有一种更好的办法,少做一些测试,而测试覆盖率也能够满足要求(即风险低)?这个要求代表了软件测试工作经常要面对的一个挑战:如何让有限的测试具有代表性从而保证了测试覆盖率?
微软公司的PICT工具能够帮助我们。PICT的全称是Pairwise Independent CombinatorialTesting tool,它会根据输入而自动给出推荐的测试组合,提高测试效率。这是一款免费软件,我们可以从这里下载:http://download.microsoft.com/download/f/5/5/f55484df-8494-48fa-8dbd-8c6f76cc014b/pict33.msi。安装以后,有详细的帮助文件PICTHelp.htm,在使用软件之前,可以先阅读一下。
PICT简单易用,它要求一个输入文件,在其中列出所有的参数和参数可选项。例如,创建一个新文件example.txt,把下面内容拷贝进文件,并保存。PICT默认使用英文字符作为分隔符,所以在没有改变默认设置的情况下,在中文操作系统下请注意使用英文字符。
操作系统:OS1,OS2,OS3,OS4,SO5
数据库:DB1,DB2,DB3
然后执行“pict.exeexample.txt”即可。如果想把结果存储到Excel文件中,则可以执行“pict.exe example.txt >result.xls”。
下面以QQ的状态设置来做一次实践。QQ用户可以对如下的状态方面的设置。后两张图是登录后的状态的可选项和鼠标键盘无动作后将状态切换至的可选项。
默认的自动回复有三种,默认的快捷回复有四种。对于自动回复和快捷回复,用户都可以做增、删、改。
下面是我设计的输入文件,其中加了一些注释。当你想使用这个输入文件时,请删除其中的备注:
***********************************************************************
登录状态: 我在线上, Q我吧, 离开, 忙碌, 请勿打扰, 隐身
运行全屏程序时切换至忙碌: 真, 假
[备注1]:“鼠标键盘无动作”其实包含了两个设置,一是是否被选中,二是时间设置,所以需要分成两个参数来处理。这样,加上原有的两个子项“将状态切换至”和“自动锁定”,“鼠标键盘无动作”就有三个子项。
[备注2]:在“鼠标键盘无动作”没有被选中时,它的三个子项的设置没有意义,所以增加了“忽略”来对应这种情况。
[备注3]:“无动作时间”有60个可选项:1-60分钟。不需要测试每一个时间点,这里选择了4个值做代表。
鼠标键盘无动作: 真, 假
无动作时间: 1, 5, 30, 60, 忽略
将状态切换至: 离开, 忙碌, 忽略
自动锁定: 真, 忽略
[备注4]:在“自动回复”没有被选中时,关于“自动回复内容”的设置没有意义,所以增加可选项“忽略”来对应这种情况。
[备注5]:用户可以对“自动回复内容”和“快捷回复”的内容做增删改,这里仅用默认设置。
自动回复: 真, 假
自动回复内容: 回复1, 回复2, 回复3,忽略
快捷回复: 快捷回复1, 快捷回复2, 快捷回复3, 快捷回复4
[备注6]:如果“鼠标键盘无动作”被选中,则它的三个子项不能为“忽略”
IF [鼠标键盘无动作] = "真"
THEN ([将状态切换至] IN {"离开", "忙碌"}) OR [自动锁定] = "真";
IF [鼠标键盘无动作] = "真"
THEN [无动作时间] NOT IN {"忽略"};
[备注7]:如果“鼠标键盘无动作”没有被选中,则它的三个子项只能为“忽略”。
IF [鼠标键盘无动作] = "假"
THEN ([将状态切换至] = "忽略") AND ([自动锁定] = "忽略") AND ([无动作时间] = "忽略");
[备注8]:两个子项是互相排斥的。当选中其中一个后,另一个只能为“忽略”。
IF ([将状态切换至] IN {"离开", "忙碌"})
THEN [自动锁定] = "忽略";
IF [自动锁定] = "真"
THEN [将状态切换至] = "忽略";
[备注9]:在“自动回复”没有被选中的时候,它的内容设置只能是“忽略”。
IF [自动回复] = "假"
THEN [自动回复内容] = "忽略";
[备注10]:如果“自动回复“被选中,则”自动回复内容“不能为“忽略”。
IF [自动回复] = "真"
THEN [自动回复内容] NOT IN {"忽略"};
***********************************************************************
执行“pict.exe QQ_Status.txt> QQ_Status_Cases.xls”,得到的结果是:
登录状态 运行全屏程序时切换至忙碌鼠标键盘无动作无动作时间 将状态切换至自动锁定自动回复 自动回复内容 快捷回复
忙碌假 真 5忙碌忽略真回复1快捷回复2
隐身真 假忽略忽略忽略假忽略快捷回复3
请勿打扰 真 真 60忽略真 真回复3快捷回复1
请勿打扰 假 真 1离开忽略真回复2快捷回复4
离开假 假忽略忽略忽略真回复3快捷回复4
忙碌假 真 1忽略真 真回复3快捷回复3
离开真 真 30忽略真 真回复1快捷回复1
离开真 真 60忽略真 真回复2快捷回复2
Q我吧假 真 5忽略真 假忽略快捷回复1
请勿打扰 假 真 30忙碌忽略假忽略快捷回复2
我在线上 真 真 30忽略真 真回复1快捷回复4
忙碌真 真 60离开忽略假忽略快捷回复4
我在线上 真 真 5忙碌忽略真回复2快捷回复3
请勿打扰 假 真 5忽略真 真回复1快捷回复3
请勿打扰 假 假忽略忽略忽略真回复2快捷回复1
忙碌真 假忽略忽略忽略真回复1快捷回复2
离开假 真 5忽略真 真回复3快捷回复3
离开真 真 1忙碌忽略假忽略快捷回复1
我在线上 假 真 60忽略真 真回复3快捷回复2
隐身假 真 30忽略真 真回复3快捷回复2
Q我吧真 真 30离开忽略真回复2快捷回复3
隐身假 真 5忽略真 真回复1快捷回复4
Q我吧真 假忽略忽略忽略真回复3快捷回复4
隐身真 真 1忽略真 真回复1快捷回复2
隐身真 真 60离开忽略真回复1快捷回复1
我在线上 假 真 1忽略真 假忽略快捷回复1
Q我吧假 真 60忙碌忽略真回复1快捷回复2
我在线上 假 假忽略忽略忽略真回复3快捷回复2
隐身真 真 1忙碌忽略真回复2快捷回复4
Q我吧真 真 1离开忽略真回复3快捷回复2
我在线上 真 真 60离开忽略真回复1快捷回复3
忙碌真 真 30离开忽略真回复2快捷回复1
离开假 真 5离开忽略真回复2快捷回复1
Q我吧假 真 5忙碌忽略真回复3快捷回复2
对于软件中比较重要的功能模块,可以使用PICT。配对(Pairwise Testing)测试是全覆盖测试的一个子集,在测试风险和测试效率之间做了一个平衡,用户需要根据被测对象的严谨程度做取舍,例如医疗软件和普通的互联网应用的要求是不一样的,要区别对待。在PICT中,有一个参数“/o:N”,默认值是2,用户如果提高这个N的值,会得到更多的测试用例。
欢迎大家讨论。
推荐阅读:http://blog.csdn.net/roger_ge/article/details/5329690