组合测试(Combinatorial testing)是一种测试技术,它将输入参数进行不同的组合用于软件测试。显而易见,测试参数的组合越全面,测试的效果就会越好。
基本思路
1、识别可以变化的不同属性,包括数据,环境和配置
比如浏览器可以是IE 或 Chrome,操作系统可以是Windows11、XWindows10 或 Mac OS
2、系统性地生成需要测试的属性组合
比如 Windows11上的IE,Windows10上的Firefox,Mac OS的Chrome
一、类别划分(Category partition)
1、将自然语言描述的规格分解为独立的可测试的功能
对每个独立的功能识别出参数、环境因素 根据收集到的参数和环境因素,进一步识别出基本的类别
2、识别相关值
对于每个类别确定各类值 正常值 边界值 特殊值 错误值
3、引进约束
通过约束来减少没有实际意义的测试用例
二、结对测试 / 两两测试(Pairwise combinatorial testing)
如果约束选择得好,类别划分的方法会十分管用,否则,缺乏合适的约束,在很多情况下,这种方法产出的组合数量会达到一个惊人的数量。这个时候就需要使用结对测试了,它只要求两两元素进行配对,是一种正交分析的测试技术。
根据数学统计分析,73% 的缺陷(单因素是 35%,双因素是 38%)是由单因素或两个因素相互作用产生的。19% 的缺陷是由三个因素相互作用产生的。因此,Pairwise 基于覆盖所有两因素的生的用例集合是效率最而的方式。
举个例子。
对于一个显示器的展示进行测试,已知其包含以下元素和取值。
如果我们不加约束地使用类别划分的方法,一共可以产生432 (3x4x3x4x3)个测试用例。但如果我们使用Pairwise组合,就可以将测试用例浓缩到仅仅17个:
此时,如果根据实际情况再增加一些限制条件,可以更加精简用例数量。相比较最初的测试用例全集,这时候的测试用例子集是性价比更高的选择。
在Pairwise的基础上,还有一些其他的变种:
1、N-wise
对 N 个因素的所有取值进行全排列组合(笛卡尔积)而生成的一组测试用例集。理论上,该测试用例集可以发现所有 N 个因素共同作用引发的缺陷。
组合数量对比:
2、正交表法(OATS,Orthogonal Array Testing Strategy)
一种利用正交表的方式,当测试过程中存在较为复杂的情况,以较少的测试次数达到较好的测试效果的一种方法。相比Pairwise,这种方法是为正交试验服务的,强调因素间取值组合的“等概率覆盖”。
工具
基于微软开源工具PICT的正交用例在线生成工具:https://pairwise.yuuniworks.com/
组合测试工具:https://matris.sba-research.org/tools/cagen/#/workspaces
正交表查询:https://www.york.ac.uk/depts/maths/tables/orthogonal.htm
三、基于目录的测试(Catalog based testing)
选择合适的特征、归类都需要经验的积累。“目录”可以整合测试设计的经验,通过罗列出每一种测试类型的重要事项,使得功能测试效率提升。
测试流程
1、分析初始的规格文档,识别基础元素:
前提条件
后置条件
定义
变量
操作
2、根据前置条件,后置条件和定义,推导出第一组测试用例
3、应用“目录”完善这组测试用例
一个简单的测试目录
此处的in/out代表是否在输入/输出场景中可以出现。
对于我们在测试流程中识别到的元素和操作,可以按照测试目录扩充测试用例。比如下面这个非常简单的登录操作测试用例,每一个功能点都可以在目录里找到对应可以扩展的用例。
总结
类别划分:将自然语言描述的规格文档转化为一系列独立的功能,识别出不同的类别,取值,以及必要的约束,进而可以(自动化)得到组合用例。
基于目录的测试:通过对识别出来的取值,使用积累下来的测试模式,提升功能测试的效率。
结对测试:系统性的浓缩测试用例集的方法。
很显然,这几个方法之间有很强的关联性,在实际场景中几乎都是综合使用的。
还没有评论,来说两句吧...