Combinatorial
Testing
组合测试
---
在软件测试中,为了对系统进行充分的检测,测试用例的数量会随着参数组合的增大而增大。但是这么一来,问题也就来了,一旦该系统的(输入)参数有很多,可选项有很多,这个时候我们的参数组合数量会急剧增长,甚至是一个天文数字!这也稍稍涉及到了测试充分性的问题,于是人们为了既保证测试质量,又想减少测试的数量,想到了一个方法,就是组合测试(Combinatorial Testing 以下简称 CT)。
准确的来说,组合测试是在保证错误检出率的前提下,尽可能减少测试用例的数量的一个方法。看似相互矛盾,其实不然。Kuhn及其同行
[3] 通过对两大开源软件项目browser 和 web server的统计表明,超过70%的错误是由2个参数相互作用而引发的,接近90%的错误是由3个参数相互作用而引发的,如下图所示(论文原图)
(论文原话:Our finding suggest that more than 95% error in software studied are detected by test case covered all 4-way combinations of values.)
这组数据给了人们启示,人们逐渐意识到在设计测试用的时候,只要保证测试用例能够对任意 t(t可以等于2或者3)个参数进行覆盖,就会在保证错误检出率的同时,降低了测试的开销。
举例说明(该例子来源于
[1]),假设我们的系统中需要4个参数,每个参数又有3个可选项,如果按照传统测试方法,我们需要设计 3^4=81 个测试用例来进行测试。但是如果我们运用组合测试的方法,使之覆盖任意2个参数的组合,这样一来,我们只需要设计9个测试用例了,如下图表1,表2所示,
以上就是组合测试的基本概念。由表2可知,组合测试的测试用例集可以用一个矩阵来表示,矩阵的每一行表示一个测试用例,矩阵的每一列表示系统的每一个参数。我们可以建立覆盖数组(Covering Array,CA)和混合覆盖数组(Mixed level Covering Array,MCA)用来描述测试用例集。
除了这些基本概念,我们实际上还需要考虑:种子组合(某些参数取值组合必须取到,这种取值组合就叫做种子),参数之间的限制等。
【参考文献】
-----------------------