在黑盒用例設計方法中有一個你們耳熟能詳的正交分析法,卻鮮有人知 「Pairwise」設計理念。前端
設想一種常見的場景,工期很緊的項目,原定的測試時間被「無理」地壓縮以後,如何能用極少的時間去保證更高的質量呢?linux
舉個例子,若是讓你測試一下word字體效果,你會整理出多少個用例呢?git
答案很簡單是2的七次方=128個用例,但當工期特別緊的時候(128個用例執行不完)你又會從中選取哪些用例來執行呢?github
「Pairwise」(官網: http://www.pairwise.org/)是行之有效的一個思路或者是強有力的理論基礎。它是L. L. Thurstone(29 May1887 – 30 September 1955)在1927年首先提出來的。他是美國的一位心理統計學家。Pairwise也正是基於數學統計和對傳統的正交分析法進行優化後獲得的產物。windows
Pairwise基於以下2個假設:app
(1)每個維度都是正交的,即每個維度互相都沒有交集。工具
(2)根據數學統計分析,73%的缺陷(單因子是35%,雙因子是38%)是由單因子或2個因子相互做用產生的。19%的缺陷是由3個因子相互做用產生的。測試
所以,pairwise基於覆蓋全部2因子的交互做用產生的用例集合性價比最高而產生的。字體
舉例來講明:當因子A爲a一、B爲b1時,接下來不可出現A爲a一、B爲b1 或者是 B爲b一、A爲a1(爲何會倒過來描述,能夠思考一下)。優化
固然,在現實中會是有各類約束條件的,因此會出現IF … Then…,或者是在同一場景下,因子A、B、C之間的組合是能夠精簡的,而因子D、E、F、G倒是須要全組合(在Pairwise中的術語稱謂「階」)。一個個徹底依靠人工來進行輸出太麻煩,各大contributor貢獻出本身的開源工具,這裏挑一個大公司的(微軟)給你們介紹一下,工具名PICT。
工具下載地址:https://github.com/Microsoft/pict
最新的版本支持多平臺(linux、mac、windows),須要自行編譯。
1)先準備一個文本文件abc.txt,內容以下:
直接運行pict abc.txt便可獲得pairwise以後的結果:
若是須要全組合狀況,則能夠在命令行參數中指定/o:3,其中3是因子的個數,(/o的默認值是2,此參數爲上面所述的「階」)如:
2)在文本中指定因子的組合狀況,
直接運行pict abc.txt 便可獲得全組合的
3)因子判斷結構:
輸出的結果:(知足了當A爲a1時,B不等於b2,C 不等於c3)
以「星火錢包——開戶管理」的 「查詢」 功能測試爲例來詳細介紹一下PICT工具的使用思路和過程。
查詢因子有:「星火用戶ID」、「開戶狀態」、「開戶渠道」、「開戶時間」,其中每一個因子的限制以下:
每一個因子須要考慮值的範圍爲:
星火用戶ID:空(默認)、非數字、12098847654八、120988476900
(假設120988476548是能夠查詢出結果的,120988476900是查詢不出結果的)
開戶狀態:請選擇(默認)、開戶成功、開戶失敗
開戶渠道:請選擇(默認)、PC、wap、app
開戶開始時間:空(默認)、2015010一、2016010一、20170101
開戶結束時間:空(默認)、2015010一、2015030一、2016020一、2016030一、20171101
「星火用戶ID」、「開戶狀態」、「開戶渠道」這三個因子,比較好整理,如圖所示,直接按照上面的內容直接填寫至文件中便可:
而「開戶開始時間」「開戶結束時間」有依賴性,因此,須要特殊處理,咱們將它們之間的依賴「翻譯」成PICT所能理解的方式:
換句話說,「開戶開始時間」「開戶結束時間」只能同時爲空。
「翻譯」:
IF [開戶開始時間] = "空" THEN [開戶結束時間]= "空";
IF [開戶結束時間] = "空" THEN [開戶開始時間]= "空";
( 固然,你也能夠這樣寫: IF [開戶開始時間] NOT IN {"20150101","20160101","20170101"} THEN [開戶結束時間]= "空"; IF [開戶結束時間] NOT IN {"20150101","20150301","20160201","20160301","20171101"} THEN [開戶開始時間]= "空"; )
「翻譯」:
IF [開戶開始時間] <> "空" AND [開戶結束時間] <> "空" THEN [開戶開始時間] <= [開戶結束時間];
準備好所有的「翻譯」結果,如圖所示:
咱們先看一下「全組合」的用例總數爲多少?答案481條,如圖所示:
使用Pairwise思想,整理出的用例數量僅爲30條,如圖所示:
用例的詳細內容以下:(每行即每條用例)
星火用戶ID | 開戶狀態 | 開戶渠道 | 開戶開始時間 | 開戶結束時間 |
---|---|---|---|---|
120988476900 | 請選擇 | 請選擇 | 空 | 空 |
120988476548 | 開戶失敗 | PC | 20150101 | 20171101 |
非數字 | 開戶失敗 | wap | 空 | 空 |
120988476900 | 開戶成功 | app | 20150101 | 20150301 |
空 | 請選擇 | pc | 20160101 | 20160301 |
120988476548 | 開戶失敗 | app | 20160101 | 20160301 |
空 | 開戶成功 | wap | 20170101 | 20171101 |
空 | 開戶失敗 | 請選擇 | 20150101 | 20150301 |
非數字 | 開戶成功 | pc | 20150101 | 20150101 |
空 | 請選擇 | wap | 20150101 | 20150101 |
非數字 | 開戶成功 | 請選擇 | 20160101 | 20171101 |
非數字 | 請選擇 | app | 20150101 | 20160301 |
120988476548 | 開戶成功 | app | 空 | 空 |
120988476548 | 請選擇 | app | 20160101 | 20160201 |
120988476900 | 開戶失敗 | wap | 20160101 | 20160201 |
120988476548 | 開戶成功 | wap | 20150101 | 20160301 |
非數字 | 開戶成功 | 請選擇 | 20150101 | 20160201 |
空 | 開戶成功 | pc | 空 | 空 |
120988476900 | 請選擇 | app | 20170101 | 20171101 |
120988476900 | 開戶失敗 | 請選擇 | 20150101 | 20150101 |
空 | 請選擇 | app | 20150101 | 20160201 |
120988476548 | 開戶失敗 | app | 20150101 | 20150101 |
120988476900 | 開戶成功 | 請選擇 | 20150101 | 20160301 |
120988476900 | 請選擇 | pc | 20150101 | 20150301 |
120988476548 | 開戶失敗 | 請選擇 | 20170101 | 20171101 |
120988476548 | 開戶失敗 | wap | 20150101 | 20150301 |
空 | 請選擇 | pc | 20150101 | 20160201 |
非數字 | 請選擇 | 請選擇 | 20150101 | 20150301 |
非數字 | 開戶成功 | pc | 20170101 | 20171101 |
Pairwise是一種有效的測試用例生成技術,經過對測試變量的全部維度及值的組合,避免窮舉測試全部維度的全部值及其組合來減小測試用例量。
遙想當年,Cohen等人應用Pairwise測試技術對Unix中的「Sort」命令進行了測試,測試結果代表覆蓋率高達90%以上。
對於當今迭代開發測試如此高效率的時代,更須要將這種測試方法,並將其應用於測試當中。
做者:宋金剛
來源:宜信技術學院