如何有效減少測試用例數(shù)目
在測試過程中,測試人員經(jīng)常需要將測試對象的各種輸入?yún)?shù)進行組合之后進行測試。有時候,將各種輸入?yún)?shù)進行組合,得到的測試用例數(shù)目將是非常龐大的。由于測試時間和成本的限制,無法對測試對象輸入值的所有組合進行測試。下面是某個網(wǎng)站測試的要求:
某網(wǎng)站需要支持
1、不同的瀏覽器:IE5.0、IE5.5、IE6.0、Netscape6.0、Netscape6.1、Netscape7.0、Mozilla1.1和Opera7;
2、不同的插件:RealPlayer、MediaPlayer或者沒有任何插件None;
3、不同的客戶端操作系統(tǒng):Windows95、Windows98、WindowsME、、WindowsNT、Windows2000和WindowsXP;
4、不同的Web服務器軟件:IIS、Apache和WebLogic;
5、不同的服務器端操作系統(tǒng):WindowsNT、Windows2000和Linux。
這種情況下,需要針對不同的組合進行測試:
1、8種瀏覽器
2、3種插件
3、6種客戶端操作系統(tǒng)
4、3種Web服務器軟件
5、3種服務器端操作系統(tǒng)
如果考慮所有參數(shù)不同取值的組合,那么需要設計和執(zhí)行的測試用例的數(shù)目是1296(8 x 3 x 6 x 3 x 3 = 1296)。
在軟件測試過程中,這種類型的組合是非常普遍的。每種情形都可能有龐大的組合需要進行測試,假如不對它們進行測試,可能會存在較大的風險;而如果對所有組合進行測試,測試時間和資源又不允許。測試人員在面對這種情況的時候,可以采用以下幾種常用的策略:
嘗試測試所有輸入的組合,延期項目,導致的后果可能是失去產(chǎn)品的市場。
選擇一些容易設計和執(zhí)行的測試用例,而忽略其是否能夠提供產(chǎn)品質(zhì)量的信息。
羅列所有的組合,并隨機選擇其中的子集進行測試。
采取特殊的測試技術,選擇能發(fā)現(xiàn)大部分缺陷的子集進行測試。
如果采用***一個策略,那么使用結對測試技術是一個很好的選擇。采用結對測試的技術,測試并不針對輸入值的所有組合進行測試,而只是針對所有輸入值的兩兩組合。結對測試技術可以顯著地減少測試用例的數(shù)目,同時保證較高的測試質(zhì)量。下面是應用結對測試技術減少測試用例數(shù)目的例子:
假如軟件系統(tǒng)有四個不同的輸入?yún)?shù),每個參數(shù)有3個不同的輸入值,得到的完全組合數(shù)目是34即81。假如采用結對測試的技術,只需要9個測試用例即可覆蓋所有參數(shù)的兩兩組合。
假如軟件系統(tǒng)有13個不同的輸入?yún)?shù),每個參數(shù)有3個不同的輸入值,得到的完全組合數(shù)目是313即1594323。假如采用結對測試的技術,只需要15個測試用例即可覆蓋所有參數(shù)的兩兩組合。
假如軟件系統(tǒng)有20個不同的輸入?yún)?shù),每個參數(shù)有10個不同的輸入值,得到的完全組合數(shù)目是1020。假如采用結對測試的技術,只需要180個測試用例即可覆蓋所有參數(shù)的兩兩組合。
結對測試技術能夠發(fā)現(xiàn)所有的單模式失效(Single-mode Fault)和雙模式失效(Double-mode Fault)。但是,結對測試并不一定適合于發(fā)現(xiàn)測試對象中的多模式失效(Multimode Fault)。
單模式失效:失效是由單個參數(shù)引起的,只要針對所有獨立參數(shù)進行測試,就能夠發(fā)現(xiàn)該失效。
雙模式缺陷:失效是由兩個參數(shù)共同引起的,必須針對所有參數(shù)的兩兩組合進行測試,才能夠確保發(fā)現(xiàn)此類缺陷。
多模式缺陷:失效是由三個或三個以上參數(shù)共同引起的,采用結對測試技術也可能發(fā)現(xiàn)多模式缺陷,但是不能保證測試的充分性。
下面的幾個數(shù)據(jù)可以說明結對測試技術的有效性:
1、根據(jù)AT&T在對其基于局域網(wǎng)的郵件系統(tǒng)進行的測試中,應用結對測試技術得到的1000條測試用例比其原有的1500條測試用例多發(fā)現(xiàn)了20%的缺陷,而測試工作量卻減少了50%。
2、National Institute of Standards and Technology在一項對醫(yī)療設備測試所進行的15年追蹤中發(fā)現(xiàn),有98%的軟件缺陷可以通過結對測試技術發(fā)現(xiàn)。
3、根據(jù)對Mozilla網(wǎng)頁瀏覽器的缺陷分析顯示,76%的缺陷可以通過結對測試技術發(fā)現(xiàn)。
4、具體的結對測試,可以通過不同的測試技術來得到,包括正交矩陣(Orthogonal Arrays)的方法、James Bach提供的Allpairs方法,也可以通過分類樹方法。表1得到的測試用例是通過Allpairs方法實現(xiàn)的,詳細的內(nèi)容以及其他測試技術的實現(xiàn)方法,可以參考《軟件測試設計》原著。
圖1 使用Allpairs得到的測試數(shù)據(jù)
假如測試數(shù)據(jù)列表中的某個參數(shù)的取值以~開頭,那么說明該參數(shù)取值已經(jīng)有兩兩組合了。以~開頭的參數(shù)取值,可以用該參數(shù)的任何其他取值來代替,而不會影響其兩兩組合的覆蓋率。因此,可以將以~開頭的參數(shù)取值,用更關鍵的或者經(jīng)常使用的參數(shù)值來代替。同時,使用Allpairs得到的測試數(shù)據(jù)中,還羅列了所有的兩兩組合,并且統(tǒng)計了每個兩兩組合出現(xiàn)的次數(shù),以及每個測試用例所包含的兩兩組合數(shù)。
從上面的結果可以看到:通過采用合適的測試技術,測試用例數(shù)目原來需要1296個,而目前只需要48個進行覆蓋,測試用例數(shù)目減少了96%。前面已經(jīng)提到了,結對測試可以發(fā)現(xiàn)所有的單失效模式和雙失效模式的缺陷,而實踐過程中,大部分的失效是單失效模式和雙失效模式,多失效模式占的比例很少。
因此,通過采用合適的結對測試,可以大大降低測試用例數(shù)目,減少測試工作量,同時可以實現(xiàn)較好的測試覆蓋率,保證測試質(zhì)量。
【編輯推薦】