Python實(shí)現(xiàn)正交實(shí)驗(yàn)法-高級篇

前情介紹:
測試過程中楣富,對于多參數(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

allpairspy.png

安裝后本身就自帶了一個(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é)果:

example.png

是不是很方便向族,很好用~~~以后遇到多因素的測試用例的時(shí)候呵燕,這個(gè)神器還是很好用的,當(dāng)然前提是你搞懂原理件相。

而且Pairiwise算法也有它不足的地方:
(1)Pairwise對于維度的分解來說再扭,需要對業(yè)務(wù)很熟悉。以及需要正交測試法的理論支持夜矗。需要中等專業(yè)的測試人員才能完成泛范。
(2)pairwise還是有一定的遺漏。相比于全正交設(shè)計(jì)法來說侯养,pairwise算法對于多于2個(gè)因素相互作用所產(chǎn)生的bug敦跌,沒有覆蓋率上會有遺漏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逛揩,一起剝皮案震驚了整個(gè)濱河市柠傍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辩稽,老刑警劉巖惧笛,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逞泄,居然都是意外死亡患整,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門喷众,熙熙樓的掌柜王于貴愁眉苦臉地迎上來各谚,“玉大人,你說我怎么就攤上這事到千〔常” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵憔四,是天一觀的道長膀息。 經(jīng)常有香客問我,道長了赵,這世上最難降的妖魔是什么潜支? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮柿汛,結(jié)果婚禮上冗酿,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好已烤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布鸠窗。 她就那樣靜靜地躺著,像睡著了一般胯究。 火紅的嫁衣襯著肌膚如雪稍计。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天裕循,我揣著相機(jī)與錄音臣嚣,去河邊找鬼。 笑死剥哑,一個(gè)胖子當(dāng)著我的面吹牛硅则,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播株婴,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼怎虫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了困介?” 一聲冷哼從身側(cè)響起大审,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎座哩,沒想到半個(gè)月后徒扶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡根穷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年姜骡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屿良。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡圈澈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尘惧,到底是詐尸還是另有隱情康栈,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布褥伴,位于F島的核電站,受9級特大地震影響漾狼,放射性物質(zhì)發(fā)生泄漏重慢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一逊躁、第九天 我趴在偏房一處隱蔽的房頂上張望似踱。 院中可真熱鬧,春花似錦、人聲如沸核芽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽轧简。三九已至驰坊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哮独,已是汗流浹背拳芙。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皮璧,地道東北人舟扎。 一個(gè)月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像悴务,于是被迫代替她去往敵國和親睹限。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前面的文章主要從理論的角度介紹了自然語言人機(jī)對話系統(tǒng)所可能涉及到的多個(gè)領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識讯檐。這篇文章羡疗,甚至之后...
    我偏笑_NSNirvana閱讀 13,913評論 2 64
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)裂垦,斷路器顺囊,智...
    卡卡羅2017閱讀 134,662評論 18 139
  • 前言 ? 本資料整理了高光譜遙感圖像概念定義、分析處理與分類識別的基本知識蕉拢。第一部分介紹高光譜圖像的一般性原理...
    Vinicer閱讀 5,961評論 0 24
  • 等價(jià)類劃分方法: 一.方法簡介 1.定義是把所有可能的輸入數(shù)據(jù),即程序的輸入域劃分成若干部分(子集),然后從每一個(gè)...
    繼續(xù)hug閱讀 5,599評論 1 16
  • 非原創(chuàng)特碳,出處不詳 Javascript從定義到執(zhí)行,JS引擎在實(shí)現(xiàn)層做了很多初始化工作,因此在學(xué)習(xí)JS引擎工作機(jī)制...
    前端xiyoki閱讀 388評論 1 1