正交分析法設計理論及實踐

1、理念介紹

在黑盒用例設計方法中有一個你們耳熟能詳的正交分析法,卻鮮有人知 「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),須要自行編譯。

2、PICT工具使用

1)先準備一個文本文件abc.txt,內容以下:

直接運行pict abc.txt便可獲得pairwise以後的結果:

若是須要全組合狀況,則能夠在命令行參數中指定/o:3,其中3是因子的個數,(/o的默認值是2,此參數爲上面所述的「階」)如:

2)在文本中指定因子的組合狀況,

直接運行pict abc.txt 便可獲得全組合的

3)因子判斷結構:

輸出的結果:(知足了當A爲a1時,B不等於b2,C 不等於c3)

3、案例實踐

以「星火錢包——開戶管理」的 「查詢」 功能測試爲例來詳細介紹一下PICT工具的使用思路和過程。

查詢因子有:「星火用戶ID」、「開戶狀態」、「開戶渠道」、「開戶時間」,其中每一個因子的限制以下:

  • 星火用戶ID:不限制輸入的內容
  • 開戶狀態:請選擇(默認)、開戶成功、開戶失敗
  • 開戶渠道:請選擇(默認)、開戶成功、開戶失敗
  • 開戶時間:選擇時間區間範圍(前端頁面的限制:填寫其一,另一個值會自動填充相同的時間,結束日期>=開始日期)(先不考慮後臺接口的限制)。

每一個因子須要考慮值的範圍爲:

星火用戶ID:空(默認)、非數字、12098847654八、120988476900

(假設120988476548是能夠查詢出結果的,120988476900是查詢不出結果的)

開戶狀態:請選擇(默認)、開戶成功、開戶失敗

開戶渠道:請選擇(默認)、PC、wap、app

開戶開始時間:空(默認)、2015010一、2016010一、20170101

開戶結束時間:空(默認)、2015010一、2015030一、2016020一、2016030一、20171101

「星火用戶ID」、「開戶狀態」、「開戶渠道」這三個因子,比較好整理,如圖所示,直接按照上面的內容直接填寫至文件中便可:

而「開戶開始時間」「開戶結束時間」有依賴性,因此,須要特殊處理,咱們將它們之間的依賴「翻譯」成PICT所能理解的方式:

1)「填寫其一,另一個值會自動填充相同的時間」

換句話說,「開戶開始時間」「開戶結束時間」只能同時爲空。

「翻譯」:

IF [開戶開始時間] = "空" THEN [開戶結束時間]= "空";

IF [開戶結束時間] = "空" THEN [開戶開始時間]= "空";

(

固然,你也能夠這樣寫:

IF [開戶開始時間] NOT IN {"20150101","20160101","20170101"} THEN [開戶結束時間]= "空";

IF [開戶結束時間] NOT IN {"20150101","20150301","20160201","20160301","20171101"} THEN [開戶開始時間]= "空";

)

2)「結束日期>=開始日期」

「翻譯」:

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

4、總結

Pairwise是一種有效的測試用例生成技術,經過對測試變量的全部維度及值的組合,避免窮舉測試全部維度的全部值及其組合來減小測試用例量。

遙想當年,Cohen等人應用Pairwise測試技術對Unix中的「Sort」命令進行了測試,測試結果代表覆蓋率高達90%以上。

對於當今迭代開發測試如此高效率的時代,更須要將這種測試方法,並將其應用於測試當中。

做者:宋金剛

來源:宜信技術學院

相關文章
相關標籤/搜索