前情介紹:
測試過程中楣富,對于多參數(shù)參數(shù)多值的情況進(jìn)行測試用例組織凿掂,之前一直使用【正交分析法】進(jìn)行用例組織,就是把每個(gè)參數(shù)的所有值分別和其他參數(shù)的值做一個(gè)全量組合纹蝴,用Python腳本實(shí)現(xiàn)缠劝,就是itertools模塊中product方法(又稱笛卡爾積法),然后再用正交表進(jìn)行篩選。
pairwise算法
Pairwise (結(jié)對)算法源于對傳統(tǒng)的正交分析方法優(yōu)化后得到的產(chǎn)物骗灶,Pairwise是L. L. Thurstone(29 May1887 – 30 September 1955)在1927年首先提出來的。他是美國的一位心理統(tǒng)計(jì)學(xué)家秉馏。Pairwise也正是基于數(shù)學(xué)統(tǒng)計(jì)和對傳統(tǒng)的正交分析法進(jìn)行優(yōu)化后得到的產(chǎn)物耙旦。
Pairwise基于如下2個(gè)假設(shè):
(1)每一個(gè)維度都是正交的,即每一個(gè)維度互相都沒有交集萝究。
(2)根據(jù)數(shù)學(xué)統(tǒng)計(jì)分析免都,73%的缺陷(單因子是35%,雙因子是38%)是由單因子或2個(gè)因子相互作用產(chǎn)生的帆竹。19%的缺陷是由3個(gè)因子相互作用產(chǎn)生的绕娘。
因此,pairwise基于覆蓋所有2因子的交互作用產(chǎn)生的用例集合性價(jià)比最高而產(chǎn)生的栽连。
pairwise算法詳解
假設(shè)有3個(gè)維度险领,每個(gè)維度有幾個(gè)因子。如下:
瀏覽器:M(Firefox),O(Opera)秒紧,IE
操作平臺:W(windows)绢陌,L(Linux),i(iOS)
語言:C(chinese)熔恢,E(english)
求解:
使用pairwise算法脐湾,有多少個(gè)測試case?具體是什么case叙淌?
我們沿用數(shù)學(xué)做題的格式秤掌。
解:如果不用pairwise算法愁铺,我們需要 332=18個(gè)測試case。下面是具體的case:
1闻鉴,M W C
2茵乱,MW 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個(gè)世落,很繁瑣淮腾。但是這是100%的測試覆蓋率,缺陷率也是100%屉佳。
現(xiàn)在我們使用pairwise谷朝,看看結(jié)果如何?
首先咱們從最下方一個(gè)18號開始武花,它是 P I E圆凰,兩兩組合是 PI ,PE 体箕,IE专钉。看這3個(gè)組合在以上的相同位置出現(xiàn)過沒有累铅,PI在17號驶沼,PE在16號,IE在12號出現(xiàn)過争群。所以18這個(gè)case就可以舍去回怜。
最終剩下的如下:
1,MWC
4,MLE
6玉雾,MIE
7翔试,OWE
9,OLC
11复旬,OIC
14垦缅, PWE
15, PLC
17驹碍,PIC
共計(jì)9個(gè)測試case壁涎,節(jié)省了50%的測試case。
現(xiàn)在我們從上面開始重新做一次志秃。1號是MWC怔球,兩兩組合是MW MC WC 都出現(xiàn)過,去掉浮还。最終剩下的是:
2竟坛,MWE
4, MLE
5, MIC
8, OWE
10, OLE
11, OIC
13 PWC
15 PLC
18 PIE
這樣也是剩下9個(gè)測試case,但是具體的case內(nèi)容不一樣钧舌。
經(jīng)過L. L. Thurstone證明担汤,pairwise算法最終剩下的測試case個(gè)數(shù)肯定相同,但是可以有不同的case組合洼冻。
Pairwise算法的效率
Pairwise算法和正交分析法進(jìn)行比較崭歧,當(dāng)有3個(gè)維度,每個(gè)維度有4個(gè)因子的時(shí)候:
(1)正交分析法的case數(shù)量:444=64個(gè)
(2)Pairwise算法的case數(shù)量:20個(gè)
Pairwise的case數(shù)量是正交設(shè)計(jì)法的三分之一撞牢。當(dāng)維度越多的時(shí)候驾荣,效果越明顯。當(dāng)有10個(gè)維度的時(shí)候 444433322*2=55296個(gè)測試case普泡,pairwise為24個(gè)。是原始測試用例規(guī)模的0.04%审编。
pairwise算法的比較
Pairwise算法和單因素測試用例設(shè)計(jì)的比較撼班,能夠覆蓋到兩個(gè)維度的正交組合設(shè)計(jì)。能適當(dāng)減少遺漏的測試垒酬。
Pairwise算法和全正交設(shè)計(jì)法的比較砰嘁,全正交設(shè)計(jì)法,測試case太多勘究,投入的成本太大矮湘。Pairwise算法在數(shù)學(xué)統(tǒng)計(jì)分析的基礎(chǔ)上,對傳統(tǒng)的全正交設(shè)計(jì)法進(jìn)行了優(yōu)化口糕,適當(dāng)?shù)奶岣吡诵省?/p>
現(xiàn)有很多程序都是圍繞pairwise算法產(chǎn)生的缅阳,最著名的就是ReduceArray;SmartDesgin 和微軟的PICT景描。
不出意外的在PYPI上找到一個(gè)pairwise的第三方包:AllPairspy
安裝后本身就自帶了一個(gè)Example的目錄十办,里面有一些使用的例子秀撇,以上面的測試需求為例,代碼如下:
#!/usr/bin/env python
# encoding: utf-8
"""
Demo of the basic functionality - just getting pairwise/n-wise combinations
"""
from __future__ import print_function
from allpairspy import AllPairs
parameters = [
["Windows", "Linux","MAC"],
["Firefox", "Opera", "IE"],
["Chinese", "English"],
]
# sample parameters are is taken from
# http://www.stsc.hill.af.mil/consulting/sw_testing/improvement/cst.html
print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters)):
print("{:2d}: {}".format(i, pairs))
運(yùn)行結(jié)果:
是不是很方便向族,很好用~~~以后遇到多因素的測試用例的時(shí)候呵燕,這個(gè)神器還是很好用的,當(dāng)然前提是你搞懂原理件相。
而且Pairiwise算法也有它不足的地方:
(1)Pairwise對于維度的分解來說再扭,需要對業(yè)務(wù)很熟悉。以及需要正交測試法的理論支持夜矗。需要中等專業(yè)的測試人員才能完成泛范。
(2)pairwise還是有一定的遺漏。相比于全正交設(shè)計(jì)法來說侯养,pairwise算法對于多于2個(gè)因素相互作用所產(chǎn)生的bug敦跌,沒有覆蓋率上會有遺漏。