Let's make a difference together!
如果我的分享带给您收获,希望能介绍更多的人订阅,撒拉嘿呦!
“覆盖率”是我们进行软件测试活动时需考虑的首要问题之一,我们常常会经历一些业务逻辑颇为复杂的场景,比如笔者经历的某款电商系统中的订单功能,做一条订单需要考虑的因素包括买家的角色、商品的线上线下属性、商品是否被签约、买家和履约店铺的关系、是否为买家下的首个订单、买家的收货地址、是否选择了优惠券、优惠券是商品券还是平台券......
这种场景,我们一般会使用矩阵的方式来设计用例,因为矩阵相比传统的方式,更容易保证覆盖率。
接下来的内容,就是介绍针对这类场景,应该如何设计矩阵,以达到既能满足覆盖率,又能节约我们编写用例的时间、降低执行用例时的复杂度。
假设有一个三个变量(V1、V2、V3)的场景:V1有三个值(分别是A、B、C),V2有两个值(分别是X、Y),V3有两个值(分别是0、1)。如果V1、V2和V3是独立的,那么可能的组合是12个(3*2*2)。
为了构建全对偶表,可按以下步骤进行:
表1:
表2:
这样就完成了三个变量的练习。如果该程序有六个变量会怎样呢?
我们先来增加第四个变量V4,假设变量V4有两个取值(E、F),那就需要从头来,因为表中的变量必须从取值个数最多的变量开始降序排列。(也可以不这么做,但不这么做很容易出错)
给出第四列很容易。首选保证第四列和第一、二列的所有取值对偶(可以在AA和BB段中完成),然后保证第二列和第三列的所有取值对偶。参见表3:
表3:
按照这个思路去尝试第五列,我们有可能会出现表4这样情况:即发现第五列得到的GH与第一、二和三列的所有值都对偶,但是没有得到与第四列的对偶。
表4:
出现这个情况时,只需要尝试重新排列V5的值即可,比如:
表5:
如果再增加变量V6(假设V6有两个值I、J),这六个对偶就不行了。尝试任何顺序的IJ都不会成功。参考表6、表7。
不过这个问题很容易解决。只需要再增加两个测试用例,如表8所示(即在表7的基础上新增两行,把G与J配对,把H与I配对)。这样,表8就得到了所有值对偶,表8中空着的值无关紧要,可以任意填写。当然,如果还要不断增加变量,可以先不确定这些任意变量值,以后(再尝试使变量7和变量8适应同样的八个测试用例时)在决定在这些行中填写方便的值。
表6 :
表7:
表:8:
总结一下,如果我们按照常规的排列组合来设计用例,则需要的用例数量是3*2*2*2*2*2 = 96个用例。我们使用全对偶,把测试用例的数量压缩到了8,效果显著。
当然,如果仅仅使用全对偶测试用例是有风险的。解决的方法就是在用例中补充一些我们知道的常见组合的用例,我们已经把测试用例从96降到8,再补充几个常见场景无非多个5-10条,相比于96条用例的情况,已经大大节省时间了。