从吃货的角度观察组合
作为一名合格的吃货,小编我每天为了吃的健康着实费了不少心思,每周我都会根据应季蔬果来定制一周的饮食,以下是我这周的定制计划:
蔬菜类: 豆角, 土豆, 莴笋, 青椒, 西红柿, 圆白菜, 芹菜
水果类: 葡萄, 西瓜, 苹果, 柑橘, 菠萝, 柚子, 香蕉, 李子
肉类(蛋白质类): 牛肉, 猪肉, 鱼, 鸡肉, 羊肉, 豆腐
汤类: 菠菜汤, 西红柿汤, 紫菜汤, 五谷粥
在不得不考虑食物相克相生的前提下,这些定制计划中必须要进行适当的搭配才不会把小编自己吃趴下,在上面的食谱中,不能同时食用的食物有:
l 羊肉和西瓜
l 李子和鸡肉
l 鸡肉和芹菜
l 土豆和香蕉
l 豆腐和菠菜
因此在做每日菜品的搭配组合时必须要考虑这些约束,不知道看到这里的你是不是开始头大了别急,小编有秘密武器可以教你简单应对~
一、是什么h2>
就像上面介绍的故事一样,测试过程中我们也会遇到这样的场景:
有m个参数、且每个参数有多个离散但有限的取值N1、N2…Nm(其中Ni可以个数不等,1
譬如经过对需求的分析,得出我们需要验证IE在不同硬件配置的PC上的兼容性测试,且经过数据统计,主要用户占比的PC信息如下图所示:
在这种场景下,要达到对参数的所有取值组合的覆盖,共需要3*3*4*2*4*4=1152条用例,若按120条/人日的执行力计算,这个需求的测试执行需要耗时9.6人日,这在敏捷迭代节奏的项目中是不太可行的,所以这种情况下我们可以考虑测试成本和错误检测能力上能达到较好平衡的组合测试方法。
像上面测试场景中提到的有多个参数、且每个参数有多个离散但有限的值,致使可能组合的参数值总数非常大,我们称之为组合爆炸。
而组合测试的目的,抽象的说就是为组合爆炸提供一种解决方案,简单地说就是在保证错误检出率的前提下采用较少的测试用例生成方法,它将被测系统或被测系统的模块抽象成一个受到多个因素影响的系统,并提取出每个因素的可能取值,结合组合测试方法,生成最终的测试用例。
根据上面的分析,我们可以了解到组合测试需要解决的最大问题就是:没有足够的测试资源来执行全部的测试用例,因此提出了基于一个数学模型和一个假设的解决方法,如下:
一个数学模型:产品的功能被抽象为函数f,产品的输入被抽象为函数的变量x1,x2,…,xm,且xi(1≤i≤m)的可能取值是有限的,产品的输出被抽象为函数的返回值y1,y2,…,yn;
一个假设:如果测试覆盖了任意t个(2≤t≤m)输入变量的取值组合,那么该测试可以发现函数f的大部分错误。
常用的组合测试方法包括:
1、两因素组合测试(也称配对测试、全对偶测试)
生成的测试集可以覆盖任意两个变量的所有取值组合。在理论上,该用例集可以暴露所有由两个变量共同作用而引发的缺陷。
2、多因素(t-way,t>2)组合测试
生成的测试集可以覆盖任意t个变量的所有取值组合。在理论上,该测试用例集可以发现所有t个因素共同作用引发的缺陷。
3、基于选择的覆盖
要满足基于选择的覆盖,第一步是选出一个基础的组合,且基础组合中包含每个参数的基础值,建议选择最常用的有效值作为基础值。基于基础组合,每次只改变一个参数值,来生成新的组合用例。
关于多因素组合测试在缺陷检出率方面的贡献,IEEE文章提到早期的一些回顾性研究结果:
更详细的说明详见PICT安装目录下的PICTHelp.htm文件
PICT安装时会自动加入环境变量path中,因此你可以在任何目录下执行。
参考我们在“是什么”部分中提到的案例,接下来小编将使用PICT工具边介绍边实践。
PICT接受一个输入文本模型文件,你可以使用Windows的记事本来保存(假设保存为ModelFile.txt),如下图:
生成的结果如下:
即如果肉类是羊肉,则水果类不能选择西瓜,其他以此类推。当PICT读取模型文件时,它会解析约束规则,并将其应用于测试用例生成过程。生成的测试用例集既满足对有效取值组合的覆盖,又不包含无效取值组合。
执行PICT命令行,生成的食谱合理搭配如下:
结果如下:
上图是Word 2010“高级”设置的一部分,每个复选框都是一个因素,每个因素都有“勾选、未勾选”两个选择,为了测试Word在不同设置下的行为,对所有因素生成组合测试用例集。但是该测试用例集很可能没有覆盖Word的默认设置。事实上,大多数用户几乎不修改默认配置,测试用例集没有覆盖最常用、也是最重要的取值组合,所以建议使用“基于选择的覆盖”方法。这揭示了组合测试的一个潜在风险:如果测试人员不仔细分析被测试对象,只依赖组合测试工具,他可能错过用户最常见的测试用例。
4、警惕卫哨语句
为了设计更合理的测试用例,大家不光要从需求分析输入、更要从代码层次分析输入,因为许多软件会利用卫哨语句来“过滤”无效的输入。例如,在如下代码中,if语句会“过滤”掉所有A
生成的输出中
PICT会保证所有有效值的取值组合都会被覆盖,此外任意非法值与有效值的组合也会被覆盖。以上模型将生成如下测试用例集。
会生成27条测试用例:
生成的组合展示如下:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!