如何用测试算法 "高效体验奶茶口感"

原创
03/29 08:20
阅读数 66

故事的起源


某技术大群...

@所有人  刚刚跟一些同学讨论了一下,为了减少技术分享会的启动压力(比如需要较长时间准备,就导致惰性和阻力),我们干脆化整为零,从明天开始每天最早的晨会前,来一个5分钟快闪分享,轮流分享一个小的技术点...
CTO


于是乎,我给大伙分享了一个 "高效体验奶茶口感" 的算法...



以下为部分分享内容及互动...



我:


今日分享tips: 关于测试用例参数生成


在接口测试或是单元测试中,我们常常会遇到参数组合过多的问题。


举个例子,有一个接口,有 5 个参数,每个参数又可以取值 7 个,如果要验证所有参数传入情况的话则需要测试 7*7*7*7*7 = 16807 种情况。


针对这种情况,我们可以使用 Pairwise 方法有效地减少测试用例数量的同时保证测试质量。


什么是 Pairwise? 


Pairwise 是一种覆盖参数双因子组合的测试方法。


Pairwise基于如下 2 个假设:每一个维度都是正交的,即每一个维度互相都没有交集;根据数学统计分析,73% 的缺陷(单因子是 35%,双因子是 38%)是由单因子或两个因子相互作用产生的,19% 的缺陷是由 3 个因子相互作用产生的。


因此,Pairwise 基于覆盖所有双因子的交互作用产生的用例集合,是非常具有测试性价比的。


但是 Pairwise 和 "喝奶茶" 又有什么关系...


然而 Pairwise 方法不仅可以用在生成测试用例中,甚至可以用在生活中... 


如果想有效体验不同的奶茶配料组合会产生怎样不同的口感(假设奶茶的口感主要由 2 个关键的配料组合而决定),也可以试试参考 Pairwise 给出的答案  [旺柴] 


下面给大家展示一个例子:


from allpairspy import AllPairs
parameters = [    ["常规""+波波""+椰果""+芋圆""+厚芋泥"],    ["正常冰""少冰""去冰""温热""热"],    ["标准糖""七分糖""五分糖""三分糖""不另外加糖"],    ["奶茶""牛乳茶""果茶""果汁"]]
print("PAIRWISE:")for i, pairs in enumerate(AllPairs(parameters)):    print("{:2d}: {}".format(i, pairs))


可以看到上述代码中的 parameters 包含了所有奶茶配料的组合(共 5 * 5 * 5 * 4 = 500 种),然而经过 pairwise 优化后,配料组合量减少至了 27 种!:


PAIRWISE:0: ['常规', '正常冰', '标准糖', '奶茶']1: ['+波波''少冰''七分糖''奶茶']..........25: ['+厚芋泥''热''标准糖''果茶']26: ['+厚芋泥''温热''标准糖''果汁']


那些来自同事们的声音...


牛逼啊

同事A


你们个个都是人才啊!

同事B


这个例子我一下子看懂了。
同事C


想 + 啵啵 + 椰果 + 芋圆 + 厚芋泥 (都加) 怎么办 ?[奸笑]
同事D


再加一份奶盖,谢谢。
同事E


请问现在去喝六个核桃还能望得到各位大佬的项背吗?
同事F


六个核桃我不知道,我觉得我要喝脑白金
同事G


我的理解他的假设就是只有少部分bug是需要三个以上参数同时特定的取值才能踩到的,


所以就放弃了那部分,专注在一两个上,这样可以大大减少枚举个数。

同事H


这个例子我快速看了下,任意两个输出之间,至少有2项(两个维度值)不同,其他3项/4项就更多。而原本的 5 * 5 * 5 * 4 = 500,其中很多输出之间是仅有一项不同的。所以应该是有统计学理论支撑了某些挑选依据。
同事I


你们的分享都这么高端,让后来者很难啊!
同事J


......


或许这就是技术夸夸群吧 [旺柴] 


本文分享自微信公众号 - AI测试前线(TaisiteMagicWorld)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部