
摘要:文章首先介紹了軟件組合試驗面臨的測試案例難于篩選的問題,然后闡述正交實驗的理論,并結合具體軟件測試案例通過使用正交表解決了案例選擇的問題,同時正交實驗的實踐要點和局限性也被介紹。綜上所述,正交試驗設計法適用于多因素低水平因子的組合測試場景,通過較少的測試用例獲得良好的測試覆蓋率和測試質量,在實際軟件測試工作中能有效地提高測試效率。
關鍵詞:組合測試;因素;水平;正交表;測試案例
中圖分類號:TP311 ? ? ? ? ?文獻標識碼:A
文章編號:1009-3044(2022)05-0068-02
1 組合測試面臨的問題
復雜的軟件測試系統往往具有多個變量,每個變量可以有多個取值。某些嚴重錯誤的出現會依賴特定的變量的特定取值組合,所以有必要設計多個測試案例來覆蓋各個變量的不同取值,這被稱為軟件測試中的組合測試。
在軟件測試的實際實施中,留給測試階段時間是非常有限的。如果遍歷所有變量的所有取值組合顯然費時耗力,而且許多案例很可能多余。但是,如果為了減少測試案例的數量而對測試案例進行隨機選擇,測試人員又很可能會漏測很多特定參數組合的測試案例,導致bug沒有被發現。因此,軟件測試人員需要找到合適的方式來選擇測試案例,保證既覆蓋必要的參數值組合,又避免類似的重復的參數組合[1]。
2 正交試驗設計的理論基礎
正交試驗設計法是研究多因素多水平系統的試驗設計方法。它依據正交理論,不再進行全面試驗,而只是選擇其中一些有典型的數值點來試驗。在前面所述的軟件測試系統中,多參數且每個參數多取值的特點正好符合正交實驗設計的實驗前提,所以可以嘗試使用正交實驗設計來減少組合測試中的測試案例的數量,以達到用最少的測試用例提供最大的參數值覆蓋的目的。
正交試驗設計的概念最好用一個例子來說明。假設有三個參數(A、B和C),每個參數有三個可能值(1、2、3)。測試三個參數的所有可能組合需要27個(3 ^ 3)測試用例。這么多測試用例真的有必要嗎?顯然只有當故障依賴于所有三個參數的某種特定組合時才有必要(例如,只有當A=1,B=1,C=1的情況下才會發生故障)。然而,通過對大量故障做事后分析發現:絕大多數故障的出現只會取決于兩個參數的取值組合。比如某個故障可能發生在三個測試用例中的每一個:(A=1,B=1,C=1);(A=1,B=1,C=2)或(A=1,B=1,C=3)。在這個情況下,顯然C無論取何值都不影響故障的捕捉,所以選擇三個測試中的任意一個即可[2-3]。也就是說每個變量的每個值與另一個變量的每個值各碰一次就可以了,這與正交性正好吻合。
在具體實驗設計中,我們主要依靠數學預先計算出來的正交表為基本工具。 正交表是利用組合理論知識的一種標準化形式。以正交表L8(27)為例:“L”象征正交表;其下的角標數字“8”表示有 8行,代表要進行8次實驗;括號內的指數“7”表示有7列,表示系統中實驗的因素最多為7 個;數“2”表示因素最多允許擁有的水平數,有兩種水平1與2。可以看出,通過正交表安排的實驗方法整齊可比,均勻分散性。也就是說:每一列中,任意兩列中數字的排列方式均衡,不同的數字(水平)出現的次數相等[4]。
使用正交實驗設計運用于軟件組合測試,正交表中的行數就是測試案例的數目。為方便起見,將影響測試結果的變量稱為因素。而某個因素所能取值的數量稱為該因素的水平。 因素可以表示為正交表中的列數,正交表寫為LRuns(水平因素)。正交表可以分為等水平正交表和混合水平正交表。前者系統中每個因素的水平數相同,如L8(27);后者系統中每個因素的水平數不相同,例如L18(21×37)。
根據法整齊可比,均勻分散性的正交性,對于某個確定的正交表中,各個因素的每一個水平的出現次數相同的。例如,正交表L8(27) 中的七個因素都擁有兩個水平數,而正交表有8行,可見各個因素的每水平各出現4次。
假設某測試系統具有七個因素、每個因素有兩個水平。如果做全覆蓋,組合測試案例數可以大到2 ^ 7=128,但如果使用正交表L8(27),則可以將測試案例數數減少到8,也就是原來的1/16。顯然,正交實驗法在保證測試質量的同時又減少需要執行的案例,從而大大提高測試效率。
3 正交實驗設計法在軟件測試中的運用
下面以一個實例為例介紹了用正交表設計對多因素系統進行軟件測試用例設計的步驟:
3.1 提取測試系統中因素的數量和每個因素的水平數
假定某測試系統有7個獨立變量(因素)。其中有兩個因素的水平數為2,而其他五個因素的水平數為3,表示為:
A: A1,A2; B: B1, B2; C: C1, C2, C3; D: D1, D2, D3; E: E1, E2, E3; F: F1, F2, F3; G: G1, G2, G3
3.2 選擇合適的正交表
選擇一個合適的正交表,它可以覆蓋每個因素的所有水平。選擇的正交表應滿足以下條件:
從因素的角度來選擇:表中因素的數目>=7;
從水平的角度來選擇:表中至少有兩個因素的水平數>=2,至少有五個因素的水平數>=3。
通過網站(比如約克大學數學系網站)查詢可知, 正交表L18(21×37) 和 L27(313) 都可以符合上面的要求。由于正交表的行數對應測試案例的個數,從較少測試案例的角度,應該選擇行數較少的表,因此正交表L18(21×37)被選中。
3.3 將軟件測試系統映射到正交表
將測試系統中的因素映射到正交表的列,水平映射到正交表中的行。由于實際的測試系統具有的因素的數目和各個因素的水平數千差萬別,預先計算好的正交表不一定能完全匹配測試系統,所以需要做一些折中。具體到本例,由于系統只有7個因素,但L18(21*37)有8個因素,所以正交表的第七列需要被忽略。
正交表中兩個水平數的因素只有1個(21),所以首先從正交表映射到組合測試案例表的是水平數為2的因素A。因此盡管因素 B也只有兩個水平,但是也被映射為三個水平的因素,也就是組合測試案例表中第二列,第二列的3的值可以均勻地映射為B1或B2。而因素C\D\E\F\G 水平數都是3,顯然就被映射到第三\四\五\六\八列。組合測試案例表的第七列被忽略。
3.4 將表中每個行中各因素組合作為測試用例
通過前面的步驟,從正交表映射過來的組合測試案例表已經形成。正交表的因素和水平映射到組合測試案例表中就是各個變量以及其不同的值。該測試案例表由于來源于了正交表,保證了測試系統中任意一個獨立變量的每個值都和與其他每個獨立變量的每個值都組合一次。這樣就從理論上保證了組合測試中案例選擇的完備性。
3.5 添加可疑且不出現在表格中的組合
軟件測試是理論和經驗結合的藝術。正交表形成的組合測試集盡管非常高效,但是它的理論前提絕大多數故障的出現只會取決于兩個參數的取值組合。如果測試人員懷疑個別三個及以上參數的取值組合有導致bug的可能,可以人為地添加上去,但注意這樣的測試案例數量一般不要超過原來案例的10%。
4 正交實驗設計法的局限
研究發現,使用正交實驗法后組合測試的案例數為 rq2,其中r為自然數,q為系統的最大水平數。顯然,當系統因素較多,但是每個因素的水平數較小時,也就是系統中因素的水平比較均勻時,正交實驗法能大大降低正交表的行數。但是當系統中某一個或幾個因素水平數q較大時,正交表行數會大大增加。所以該方法對擁有高水平因素的系統不適用[5]。
由此可知,正交實驗設計法運用在軟件測試中組合測試里,最適合的情況是多個變量但是每個變量的取值較少的這種“均勻可比”的情況,一旦某個變量的取值數目遠遠大于其他變量的取值,系統變量將變得不再均勻,從而軟件測試案例的數目也會大大增加。
雖然該方法存在著一定的局限,但是實際情況中,大部分系統的變量取值都比較均勻,所以該方法對大部分測試系統而言能有效地降低組合測試的測試案例數量,從而能大大降低軟件測試的時間,提高軟件迭代的效率,具有較強的實用性。
參考文獻:
[1] 梅耶.軟件測試的藝術[M]. 3版.張曉明,黃琳,譯.北京:機械工業出版社,2013.
[2] 斛嘉乙,符永蔚,樊映川.軟件測試技術指南[M].北京:機械工業出版社,2019.
[3] 朱少民.全程軟件測試[M].3版.北京:人民郵電出版社,2019.
[4] 方開泰,馬長興.正交與均勻試驗設計[M].北京:科學出版社,2001.
[5] 郭興家,熊英.實驗數據處理與統計[M].北京:化學工業出版社,2019.
【通聯編輯:梁書】
收稿日期:2021-08-27
作者簡介:任洛漪(1976—),女,湖北武漢人,講師,碩士,研究方向為軟件測試,算法優化。