前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试随笔:一个创建全对偶测试集的简单例子

测试随笔:一个创建全对偶测试集的简单例子

作者头像
张树臣
发布2021-09-27 10:48:34
7480
发布2021-09-27 10:48:34
举报

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. 在列上标出标量名称,注意需要按照变量的取值数量降序排列,即V1、V2、V3。
  2. 填写表格,一次填写一列。第一列每次重复其元素2次(V2变量的取值数量),空出一行,然后再重复给出下一个元素,这样第一列包含A、A、B、B、C、C。
  3. 在第二列中,循环列出变量2的所有取值。至此,表的结构如附录表1所示;
  4. 第三列填值时,将两个AA行看成一个段,两个BB行看成一个段,等等,然后每个段要包含变量V3的所有取值。这些取值的顺序要使变量3与变量2也构成全对偶,必要时可将变量V3的值反过来。参考附录表2。

表1:

表2:

这样就完成了三个变量的练习。如果该程序有六个变量会怎样呢?

我们先来增加第四个变量V4,假设变量V4有两个取值(E、F),那就需要从头来,因为表中的变量必须从取值个数最多的变量开始降序排列。(也可以不这么做,但不这么做很容易出错)

给出第四列很容易。首选保证第四列和第一、二列的所有取值对偶(可以在AA和BB段中完成),然后保证第二列和第三列的所有取值对偶。参见表3:

表3:

按照这个思路去尝试第五列,我们有可能会出现表4这样情况:即发现第五列得到的GH与第一、二和三列的所有值都对偶,但是没有得到与第四列的对偶。

表4:

出现这个情况时,只需要尝试重新排列V5的值即可,比如:

  1. 颠倒最新的任意选择(即第五列BB段,HG改为GH)
  2. 擦掉CC段,因为HG的选择是根据BB段HG做出的,需要擦掉。
  3. 通过检查遗漏的对偶,重新填写CC段。GH、GH得到两个XG、XG对偶,因此CC段颠倒为HG。这使得第二列X对应第五列的H,第二列的Y对应第五列的G,如:表5。

表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条用例的情况,已经大大节省时间了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试经验与教训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 案例讲解
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档