软件测试用例设计之Pairwise算法

Pairwise算法是一种优化后的测试用例设计方法,源于正交分析法,旨在减少测试用例数量的同时保证高覆盖率。通过两两组合参数值,删除冗余组合,确保大部分缺陷由单因子或双因子交互作用引发的场景被覆盖。在实际案例中,如银行柜面开户业务,使用Pairwise算法可以显著减少测试用例数量,提高测试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pairwise算法简介

Pairwise是L. L. Thurstone(29 May1887 – 30 September 1955)在1927年首先提出来的。他是美国的一位心理统计学家。Pairwise也正是基于数学统计和对传统的正交分析法进行优化后得到的产物。

测试过程中,对于多参数参数多值的情况进行测试用例组织,把每个参数的所有值分别和其他参数的值做一个全量组合,就是正交分析法, 优点是测试用例覆盖率100%,缺点测试用例数量庞大,执行用例消耗的人工巨大。

Pairwise (结对)算法源于对传统的正交分析方法优化后得到的产物,它的理论来自于数学统计。

核心理念

1、一组测试用例(每个用例有3个参数的值组成,如[业务类型,证件类型,联系方式])中每一个2个元素组合起来,两两组合,就有3种组合方式(有位置的[业务类型,证件类型],[业务类型,联系方式],[证件类型,联系方式]);

2、这第一组测试用两两组合出的3种组合方式,与其他组元素的对比原则是 :[业务类型,证件类型]只会和其他组的第一个元素对比,[业务类型,联系方式]只会和其他组中第二个元素对比;

如果[业务类型,证件类型],[业务类型,联系方式],[证件类型,联系方式] 这三个元素分别出现在其余有效组相同位置的元素中,就可以认为这一组Case为多余Case,并进行删除。

3、最终得到测试用例,就是结对算法计算出来的最优测试用例集合.

对这段说明写个例子,如果一个测试场景有业务类型,证件类型,联系方式三个字段要填,它们可选值如图, 全覆盖的话需要3*3*3=27个用例.

上面第2点,体现在图上就是:

  • 前两位是1和a的,只取一个,其他全部删除.
  • 后两位是a和x的,只第一个,后面全部删除.
  • 前两位是1和b的,只第一个,后面全部删除.
  • 依次类推下去,就只剩下图片圈起来的9个组合.
    在这里插入图片描述

Pairwise基于如下2个假设:

(1)每一个维度都是正交的,即每一个维度互相都没有交集。

(2)根据数学统计分析,73%的缺陷(单因子是35%,双因子是38%)是由单因子或2个因子相互作用产生的。19%的缺陷是由3个因子相互作用产生的。

因此,pairwise基于覆盖所有2因子的交互作用产生的用例集合性价比最高而产生的。


再来个例子:
银行的柜面开户业务,涉及十多个输入框,每个输入框都有多个选项,如果要全覆盖所有参数,用例数会十分庞大.
选其中5个输入框选项为例,

    ['开卡','开账户','开存折'],
    ['身份证','军官证','户口本','护照'],
    ['手机','固定电话'],
    ['现金','转账','待销账'],
    ['个人活期存款','随心取','个人定活','个人整存整取'],

这五个输入框的选项,完全组合的话,有3*4*2*3*4=288个测试用例.

然而用Pariwise算法过滤后,只需要测试19个用例即可覆盖绝大多数场景.

代码演示

from allpairspy import AllPairs

parameters = [
    ['开卡','开账户','开存折'],
    ['身份证','军官证','户口本','护照'],
    ['手机','固定电话'],
    ['现金','转账','待销账'],
    ['个人活期存款','随心取','个人定活','个人整存整取'],
]

print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters)):
    print("{:2d}: {}".format(i, pairs))
    
输入结果
PAIRWISE:
 0: ['开卡', '身份证', '手机', '现金', '个人活期存款']
 1: ['开账户', '军官证', '固定电话', '转账', '个人活期存款']
 2: ['开存折', '户口本', '固定电话', '待销账', '随心取']
 3: ['开存折', '护照', '手机', '转账', '个人定活']
 4: ['开账户', '护照', '手机', '待销账', '个人整存整取']
 5: ['开卡', '户口本', '固定电话', '现金', '个人整存整取']
 6: ['开卡', '军官证', '手机', '待销账', '个人定活']
 7: ['开账户', '身份证', '固定电话', '转账', '个人定活']
 8: ['开存折', '身份证', '手机', '现金', '随心取']
 9: ['开存折', '军官证', '手机', '现金', '个人整存整取']
10: ['开账户', '户口本', '手机', '转账', '随心取']
11: ['开卡', '护照', '固定电话', '转账', '随心取']
12: ['开账户', '护照', '手机', '现金', '个人定活']
13: ['开存折', '户口本', '手机', '转账', '个人活期存款']
14: ['开存折', '身份证', '手机', '待销账', '个人活期存款']
15: ['开存折', '身份证', '手机', '转账', '个人整存整取']
16: ['开存折', '户口本', '手机', '转账', '个人定活']
17: ['开存折', '护照', '手机', '转账', '个人活期存款']
18: ['开存折', '军官证', '手机', '转账', '随心取']
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值