一般都說
測試先做
單元測試,然后做集成測試,然后做
系統測試之類的,其實說白了,也可以理解成將最基本的測試步驟,或者說測試環境使用一定的方法組合以后再生成新的
測試用例。因為人工組合,第一比較費神,第二是有時要么是設計了幾個等價的測試用例,重復執行這些等價的測試用例,比較費時。這里有一個比較好的測試技術,叫做配對(pair-wise)測試,它可以根據你設定的條件,自動生成在測試時間(即
工作量)和測試覆蓋率之間做出平衡的組合。
配對測試的基本理念是,雖然程序的某個組件,或者程序自己會接受很多的輸入,但大部分情況下,程序的bug不是因為這些輸入同時作用而產生的,而是由一 到兩個輸入條件同時作用導致的。因此配對測試在生成測試組合的時候,主要關注將每個條件與其它條件至少配對一次,而不是試圖生成全組合,這樣就可以大大減 少需要測試的組合數,盡而節省測試工作量,同時又能達到滿意的測試覆蓋率。
當然不能期望配對測試是萬能的,即我們僅依賴于配對測試自動生成的測試用例就可以了,使用配對測試的目的是為了減少測試人員浪費在執行太多的等價組合的時間,將寶貴的時間盡可能地放在設計符合用戶使用場景的測試用例上。
具體示例(手工步驟)
廢話少說,先看一個具體的示例,假設我們有下面一個產品,界面如下:

對于上面這個產品(假設文本框接受1到100之間的整數),可以將測試條件劃分為下面這樣子:

當然,文本框的條件我們還可以再細分一下,但是為了描述簡單,我把條件設置的比較粗糙,如果按照全組合的用例設置方式,需要 6 (下拉框控件可能的條件) * 2 (復選框可能的條件) * 2 (單選框可能的條件) * 6 (文本框可能的條件) = 144個組合。
我們來看使用配對方式設計組合的方式:
1、先將上面的條件輸入到Excel里,并在列頭標明可能出現的條件的個數,并按條件的個數將各個輸入參數排序,如下圖所示:

2、先將第二個和第三個參數的各個條件組合一次,這里為了省事起見,我先去掉第一個參數,只介紹第二、三、四個參數的配對組合方法:

3、然后再將第二個參數和第四個參數的各個條件組合一次,如下圖所示:

4、為了確保第四個參數跟第三個參數的各個條件都有一次組合,可以使用Excel提供的過濾功能來判斷,例如下圖中,很明顯,兩個參數沒有一個完全組合:

5、解決方案很簡單,只需要再添加兩行,將兩個參數中沒有組合的條件各自組合一次好了(當然,你也可以將第四個參數的條件稍微調整一下達到相同的目的):

自動化步驟
上面的工作還是有點繁瑣,實際上早已有人將這個過程自動化了,這里介紹一個免費開源的工具allpairs.exe,請于下面這個鏈接里下載:http://www.satisfice.com/tools/pairs.zip
對于上面的例子,使用allpairs生成組合的方式是:
1、先將上面的條件輸入到Excel里,如下圖所示(因為這個工具是老外寫得,沒有考慮支持中文的問題,所以最好全部用英文表示):

2、將Excel文件保存為以Tab鍵作為分隔符的文本文件:

3、然后使用allpairs.exe處理這個文件:
allpairs.exe test.txt > output.txt
4、在output.txt里,PAIRING DETAILS下面的東西都是沒有用的,可以直接刪掉,刪掉以后,結果如下:

你可以在設計測試環境矩陣還有組合測試用例的時候使用allpairs這個技術,當然,你不能完全依賴這個技術,除了allpairs組合的測試用例以外,你最好再根據測試覆蓋率和用戶場景覆蓋率入手,補充更有價值的測試用例。
另外,使用配對測試的算法,我們有可能結合Behavior Driven Design技術,直接從需求自動生成測試用例,加之如果我們將基本的測試用例自動化以后,完全可以使用這個技術將自動化過的測試用例配對組合(當然需要 加上一些限制條件),在節省測試時間的同時,達到滿意的測試覆蓋率,當然,這樣做要求我們自己寫一個測試工具來實現這個技術—至少到現在我還沒有看到現成 的工具,而且這個技術應該要比模型驅動測試更容易使用,因為模型驅動測試的問題是建模太困難。