网站首页 > 技术教程 正文
Pairwise算法是什么
对于以下测试场景:
- 浏览器:M,O,P
- 操作平台:W(windows),L(linux),i(ios)
- 语言:C(chinese),E(english)
该如何设计功能测试用例呢?
根据数学统计分析,73%的缺陷(单因子是35%,双因子是38%)是由单因子或2个因子相互作用产生的。19%的缺陷是由3个因子相互作用产生的。也就是说,大多数的bug都是条件的两两组合造成的。
Pairwise算法是L. L. Thurstone在1927年首先提出来的,他是美国的一位心理统计学家。Pairwise算法基于两两组合,过滤出性价比高的用例集。它的思路是:如果某一组用例的两两组合结果,在其他组合中均出现,就删除该组用例,从而精简用例。
对于上述测试场景,可以通过笛卡尔积设计18条两两组合的测试用例:
1,M W C
2,M W E
3,M L C
4,M L E
5,M I C
6,M I E
7,O W C
8,O W E
9,O L C
10,O L E
11,O I C
12,O I E
13,P W C
14,P W E
15,P L C
16,P L E
17,P I C
18,P I E
对于第18条用例P I E来说,两两组合是PI ,PE ,IE,PI在17号,PE在16号,IE在12号出现过,所以第18条用例可以过滤掉。按照这个算法继续过滤,最终剩下9条用例:
1,M W C
4,M L E
6,M I E
7,O W E
9,O L C
11,O I C
14,P W E
15,P L C
17,P I C
用例减少了50%!而且维度越多越明显,当有10个维度的时候4*4*4*4*3*3*3*2*2*2=55296个测试case,pairwise为24个,是原始测试用例规模的0.04%。
Python实现
import copy
import itertools
from sys import stdout
from loguru import logger
def parewise(option):
"""pairwise算法"""
cp = [] # 笛卡尔积
s = [] # 两两拆分
for x in eval('itertools.product' + str(tuple(option))):
cp.append(x)
s.append([i for i in itertools.combinations(x, 2)])
logger.info('笛卡尔积:%s' % len(cp))
del_row = []
bar(0)
s2 = copy.deepcopy(s)
for i in range(len(s)): # 对每行用例进行匹配
if (i % 100) == 0 or i == len(s) - 1:
bar(int(100 * i / (len(s) - 1)))
t = 0
for j in range(len(s[i])): # 对每行用例的两两拆分进行判断,是否出现在其他行
flag = False
for i2 in [x for x in range(len(s2)) if s2[x] != s[i]]: # 找同一列
if s[i][j] == s2[i2][j]:
t = t + 1
flag = True
break
if not flag: # 同一列没找到,不用找剩余列了
break
if t == len(s[i]):
del_row.append(i)
s2.remove(s[i])
res = [cp[i] for i in range(len(cp)) if i not in del_row]
logger.info('过滤后:%s' % len(res))
return res
def bar(i):
"""进度条"""
c = int(i / 10)
jd = '\r %2d%% [%s%s]'
a = '■' * c
b = '□' * (10 - c)
msg = jd % (i, a, b)
stdout.write(msg)
stdout.flush()
if __name__ == '__main__':
pl = [['M', 'O', 'P'], ['W', 'L', 'I'], ['C', 'E']]
a = parewise(pl)
print()
for i in a:
print(i)
输出结果:
100% [■■■■■■■■■■]
('M', 'W', 'E')
('M', 'L', 'E')
('M', 'I', 'C')
('O', 'W', 'E')
('O', 'L', 'E')
('O', 'I', 'C')
('P', 'W', 'C')
('P', 'L', 'C')
('P', 'I', 'E')
2021-11-07 11:38:56.850 | INFO | __main__:parewise:24 - 笛卡尔积:18
2021-11-07 11:38:56.850 | INFO | __main__:parewise:45 - 过滤后:9
- 上一篇: 七律 巴夫洛谷的春天 巴夫洛logo
- 下一篇: 一篇文章详述配对测试的测试用例设计!强烈建议收藏
猜你喜欢
- 2024-10-06 2D头像生成3D虚拟人开视频会,谷歌新作让人难绷
- 2024-10-06 探索C++20的std::views::adjacent:滑动窗口视图的优雅实现
- 2024-10-06 万万没想到,鱼油竟可增加房颤风险!建议多从食物中获取营养
- 2024-10-06 字节跳动一站式数据治理思考及实践
- 2024-10-06 首届大模型顶会COLM 高分论文:偏好搜索算法,让大模型评估更高效
- 2024-10-06 一篇文章详述配对测试的测试用例设计!强烈建议收藏
你 发表评论:
欢迎- 05-1613步震撼淘宝大促闪光裂纹破墙立体字PS制作教程
- 05-16AI教程 | 绘制扁平的萌萌哒图标
- 05-160基础学平面设计所需了解的基础常识汇总
- 05-16自学平面设计需要多长时间?十六年职业设计总监告诉你
- 05-16平面设计都要学习哪些内容?
- 05-16李涛PS教程 高手之路PS教程 合成教程 —制作一个小星球
- 05-16Illustrator实例教程:制作炫酷的漩涡效果
- 05-16Illustrator实例教程:利用混合工具制作一朵炫酷的花
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)