組合測試法中的全對偶測試法

2021-07-28 03:25:21 字數 3241 閱讀 9845

在測試設計過程中,大家都會遇到很多變數進行組合的情況,對相互組合的兩個或更多變數進行的測試活動就是組合測試,一般情況下都是使用組合測試法,但這種情況很多測試人員研究得不夠深入。測試人員需要開發或了解組合測試法中使用到的工具,通過程式得到用例組合才更加合理和全面,如果不在測試中一起改變某些變數,就會遺漏由不同的變數組合而觸發的錯誤。

首先介紹下組合測試法的定義,組合測試是一種測試用例生成方法。它將被測系統抽象出來的變數的取值進行組合並生成一組測試用例的過程,一般情況下,組合測試能夠在保證錯誤遺漏率的前提下採用較少的測試用例測試系統。但是對於如何從全集合的變數組合中抽取出有效的測試用例,會有不同的方法,兩因素(pairwise)組合測試就是一種比較好的方法去挖掘出有效的測試用例組合。接下來介紹另外一種方法去自動生成較好的測試用例集,那就是全對偶測試法(all pairs)。這些組合測試方法也是高階測試工程師必須掌握的。

現在我們假設存在3個變數:v1、v2、v3,v1變數存在3個值:a、b、c;v2變數存在2個值:d、e;v3變數存在2個值:f、g。按照組合測試法,可以組合出3*2*2 = 12種情況,也就是可以設計出12個測試用例。如果3個變數都存在5個不同的值的話,那就可以組合出5*5*5 = 125種情況,也就是需要設計出125個測試用例。測試專家james bach使用全對偶測試法(all pairs)將這125個測試用例壓縮成25個測試用例,從理論上來覆蓋變數組合的測試覆蓋率,全對偶測試法有個基本的原則是每個變數的每個取值都要與至少乙個用例中的每個其他變數的每個取值配對。

假設我們有兩個引數需要測試,比如作業系統,印表機,先列出每個引數的值:

作業系統:

win 98

win xp

win 7

印表機:

hp 4050

hp 4100

為了測試所有的組合對(pairings),測試用例包括如下情況:

在兩個引數的情況下,所有的組合對(pairings)就是引數之間的所有組合情況。但是如果我們新增乙個引數將會發生什麼呢?

是否雙面列印:是否

下面是3個引數進行組合的所有測試用例:

對應三個引數的所有組合情況就是12個測試用例。但是我們需要的是在一組測試用例中能夠保證至少乙個用例中的每個其他變數的每個取值都配對過。這種情況就可以得到較少的測試用例,我們就可以得到6個測試用例。

事實上,如果這三個引數中的某兩個引數的值的任意不同的組合會觸發乙個bug的話,那**上的那組測試用例也可以發現該bug。當三個特殊的值組合在一起觸發的某個bug,那**上的那組測試用例不一定能發現該bug,但是至少我們覆蓋了所有的全對偶(all pairs)。

相對於所有組合情況來說,全對偶的測試覆蓋率要容易很多。例如,如果你想測試10個引數且都有26個值的功能,所有組合情況將導致存在141,167,095,653,376個測試用例。而全對偶測試法就只要測試1094個測試用例就可以。

為了能較好的使用allpairs工具,測試人員需要在**上列出所有的引數和引數值,一般可以使用excel工具來表達:

然後將這個excel**拷貝到乙個text檔案(暫時命名為vars.txt),在dos平台上執行allpairs程式,使用如下的命令:

allpairs vars.txt > testcases.txt
如果測試人員也安裝了perl,也可以使用如下的命令:

perl allpairs.pl vars.txt > testcases.txt
testcases.txt檔案裡面的資料也適合拷貝到excel檔案中,類似於如下:

上圖的第一部分是測試用例的集合,那個」pairrings」列說明的是全對偶方法找到的唯一pairrings的數量。

上圖的第二部分是幫助測試人員了解全對偶方法的是怎麼完成的。它列出了每個pair,且顯示了這個pair在測試用例列表中出現的次數,且列表出了每個pair出現的時候所對應的測試用例的用例號。

james bach 也在《軟體測試經驗與教訓》中詳細的說明任何使用全對偶的測試方法進行組合測試。主要分三大步驟,第乙個步驟是 從域劃分開始,確定和壓縮每個引數所取的值和個數;第二個步驟是 獲得全單值,保證覆蓋到每個變數的每個重要取值;第三個步驟是 獲得全對偶,保證每個變數的每個取值都要與至少乙個測試用例中的每個其他變數的每個取值配對。同時他還表示僅僅使用全對偶測試是有風險的,與全單值一樣,測試人員可能知道被廣泛應用的特定組合,或可能有麻煩的組合。

當然很多人會問是不是還有其他的工具來自動化生成組合的測試用例,由於全對偶測試法並不是乙個最完美的解決辦法,但在大部分情況下,對測試來說還是足夠的。考慮10個引數且都有10個值的情況,全對偶測試(all pairs)需要使用177個測試用例來覆蓋組合測試情況。最有可能的最佳的用例個數是100到177之間,james懷疑在130個測試用例左右。但是與成千上萬的測試用例集合相比,177個並不是特別差的情況。當然,對於使用全對偶測試(all pairs)法產生的所有測試用例集合也可以是可執行的自動化指令碼,由於引數和取值之間沒有約束關係,所以產生的用例集合有規律,目前**網技術質量部開發了相關的工具用於通過組合測試法生成頁面自動化指令碼,該指令碼是ruby語言編寫,通過規則和引數化取值來準備資料,使用關鍵的key標識來組合自動化指令碼的框架,有興趣的同學可以一同研究。

一般在測試設計過程中,組合測試法不會單獨使用,而是會與其他方法進行組合使用,大部分時候是和判定表和邊界值組合使用,在關鍵性的高穩定要求的系統軟體中,組合測試和邊界測試的組合覆蓋率尤其重要。這個組合測試策略在相容性測試策略方案上也有很大的作用,在選擇作業系統,瀏覽器版本,其他軟體配置的相容性測試上給出方向性的指導。

美國telcordia 技術公司有乙個基於web的工具,它產生的結果集要優於全對偶測試(all pairs)得到的結果集。例如,存在40個引數且都有3個值的情況,這個工具可以使用21個測試用例來覆蓋所有的pairs。全對偶測試(all pairs)則需要29個測試用例才能達到同樣的效果,但是這個工具是收費的,相比較免費的全對偶測試(all pairs),測試人員可以自己做出選擇。

組合測試法中的全對偶測試法

在測試設計過程中,大家都會遇到很多變數進行組合的情況,對相互組合的兩個或更多變數進行的測試活動就是組合測試,一般情況下都是使用組合測試法,但這種情況很多測試人員研究得不夠深入。測試人員需要開發或了解組合測試法中使用到的工具,通過程式得到用例組合才更加合理和全面,如果不在測試中一起改變某些變數,就會遺...

混合測試法

通過場景操作引入變化 測試人員必須找到其他替代的方法來執行場景中每個步驟或動作。如果要查詢商品,可以通過名稱來查詢,也可以通過商品編號來查詢,應為被測試軟體提供了這兩個功能,那麼我們就可以通過建立衍生場景的方式來測試第二種選擇。同樣,購買商品時,我們可以使用鍵盤快捷鍵而不是滑鼠來操作。還可以繞過建立...

MillerRabin素數測試法

知道大家比較關心正確,網上教程好難找到資料,我就自己去wiki翻了 if n 2,047,it is enough to test a 2 if n 1,373,653,it is enough to test a 2 and 3 if n 9,080,191,it is enough to tes...