職 曉 裴阿平 張江華
(西安電子工程研究所 西安 710100)
隨著電子技術的不斷發展,現代雷達系統軟件化程度越來越高,雷達系統軟件的研制占整個系統開發周期的比重越來越大。作為軟件質量的重要保證手段,軟件測試逐漸成為雷達系統軟件研制的重要環節。其中設計有效的測試用例是直接關系測試質量的關鍵因素。理論上窮舉法即設計包含所有輸入參數的所有取值組合的用例集,其可靠性最高;然而,由于窮舉法帶來的計算爆炸,無法在工程實際中得到有效應用。因此從上述完備的測試用例集中挑選盡量少的用例,保證足夠的組合覆蓋率成為近年來軟件測試研究中的一個重要課題[1]。
分類樹方法是由Grochtmann 和Grimm 在1993年設計提出,經過不斷的實踐證明是一種有效的軟件功能測試用例設計方法[2~4]。文獻[2]中作者利用分類樹方法和分類樹工具CTE XL 完成了WEB服務測試用例的自動生成。文獻[3]中作者基于分類樹方法和形式規格說明完成了一個網上購物系統的測試用例生成。由以上文獻可以看出,應用分類樹方法和分類樹工具CTE XL 設計用例大大提高了測試效率,同時提升了測試的自動化程度。然而從中仍可以看出,在測試用例的執行過程中,生成的用例集仍有很大冗余。所以為了提高這種方法的工程實用性,有必要進一步對分類樹方法生成的用例集做進一步的優化。
針對上述問題,本文提出一種將分類樹和正交試驗設計方法相結合的測試用例設計方法,利用分類樹方法和分類樹工具CTE XL 自動生成測試用例,然后利用正交試驗設計方法對生成的用例做進一步的精簡。這種方法既避免了以往功能測試的隨機性和盲目性,同時減少了冗余用例對測試資源的浪費。經驗證,在雷達軟件測試中有著較好的工程應用價值。
分類樹方法的主要思想是根據被測單元的需求規格說明,對單元模塊的輸入數據進行抽象,將整個單元的輸入域分割成若干個獨立的子類,每個子類再根據一定的準則再次劃分,直到將整個輸入域分割成一些不可再分的子類的組合。分類樹作為描述此方法的工具,其主要由節點和分支組成。其中節點又可分為內節點和葉節點,分支為各級節點間從屬關系的體現,具體定義如下:
定義1:如圖1所示,一棵分類樹是一個四元集合CT= {B,L,U,R},其中B 表示根節點,是整個分類樹最頂層節點,也是整個單元測試的輸入域。接著對B 進行逐層分解。L= {L11,L12,...L1n1,L21,L22,...L2n2,...Lm1,Lm2,...Lmn|m,n,n1,n2∈N+} 表示葉節點,是分類樹的最底層節點,是測試中輸入域的不可再分的子類屬性值,即被測單元的輸入值。U= {U1,U2,...Um|m ∈N+} 表示除根節點和葉節點外的內節點,是整個分類樹建立過程中的獨立類屬性。R= {r1,r2} 表示上述的父類與子類的從屬關系,其中r1= {<B,Ui>i ∈N+,i ≤m},r2= {<B,Lij>i,j ∈N+,i ≤m,j ≤n}。

圖1 分類樹結構圖
分類樹方法在測試中應用有許多優點。首先,因為分類樹是一種類似于流程圖的結構,所以用分類樹來設計測試用例可以使原本主要依靠測試人員經驗設計過程變成一種結構化和系統化的設計過程。其次,分類樹方法還可以很好地分析程序錯誤的特征,定位缺陷位置[5]。
雖然,利用分類樹工具CTE XL 的約束關系可以一定程度地精簡測試用例,但分類樹方法在實際工程應用中仍有很大缺陷。隨著輸入域和分類子集的遞增,分類樹方法將會生成十分龐大的測試用例集,隨之產生大量冗余的測試用例。在測試時間和資源有限的情況下,全部覆蓋其生成的用例集是不現實的。所以在保證一定測試覆蓋率的前提下,需要進一步地精簡該測試用例集。
針對上述缺陷,正交試驗設計法可以將分類樹工具生成的初始測試用例集進一步精簡,去除冗余測試用例,同時保證測試用例集中的用例成對組合且均勻分布,從而在保證一定測試覆蓋率的前提下,提高測試的效率,節約測試的成本。
正交試驗設計法是一種基于統計數學的科學試驗方法的總結,其廣泛應用于各試驗科學領域。具體來說,它是根據Galois 理論,由統計學模型推導出的正交表去安排科學試驗的一種實踐方法。正交試驗設計法可以從大量的試驗數據中篩選出少量具有代表性的試驗數據進行試驗,大幅減少了試驗次數,從而優化了試驗效率。從本質上來講,正交試驗設計法是遺傳算法的一種特例,即一種初始種群固定的、只使用定向變異算子、只進化一代的遺傳算法。相較一般的遺傳算法,它的優化解必然不及一般遺傳算法產生的優化解,但一般遺傳算法的步驟更復雜,產生的試驗次數也更多[6]。所以正交試驗設計法從工程的角度來看具有更好的應用價值。
正交表作為這種方法的基本工具,已有很多學者進行了深入的研究。現有大量現成的正交表可以供試驗中直接使用,當然特殊情況也可以通過數學模型推導出匹配的正交表。通常以LRuns(LevelsFac-tors)的形式來表示正交表。具體根據各個因素(Factors)的水平(Levels)的數目相同與否,又可以分為等水平正交表和混合水平正交表。其中,次數(Runs)代表優化后試驗的次數,其值等于正交表的行數,對應測試用例集中的用例個數。因素(Factors)是對整個試驗結果會產生主要影響的要素,因素數等于正交表的列數,對應被測單元的接口參數個數。水平(Levels)是各因素具體的可能取值或狀態,對應被測單元的接口參數可能取值數。
應用正交試驗設計法對分類樹方法生成的用例集優化步驟如下:
2.3.1 確定因素,即被測單元的輸入參數。這里具體對應圖1 分類樹中的U= {U1,U2,...Um|m ∈N+};
2.3.2 確定水平,即被測單元的輸入參數對應的可能取值。這里對應圖1 分類樹中的L= {L11,L12,...L1n1,L21,L22,...L2n2,...Lm1,Lm2,...Lmn|m,n,n1,n2∈N+};
2.3.3 選擇正交表,即查找正交表。根據因素數和水平數選擇匹配的正交表。如果各因素的水平數相等,則直接選擇等水平正交表。如果各水平數不完全相等,則需要選擇適合的混合水平正交表;
2.3.4 將水平映射到所選擇的正交表。如果找到的正交表的因素數大于實際用例設計中的因素數,則可以選擇忽略表中部分的因素,其并不影響由生成的測試集的可靠性[7]。如果選擇的正交表中某個因素有剩余的水平數,則可以將這個因素余下的水平值依次循環迭代映射,以增加發現軟件缺陷的概率。
以某雷達軟件的搜索截獲模塊中的單幀目標凝聚測角單元的測試為例。
某雷達軟件需求規格說明對搜索截獲模塊中的單幀目標凝聚測角單元功能描述如下:其主要功能是在一幀的時間內根據搜索得到的目標報告中的所有目標點的信息,按照一定的規則進行凝聚處理。然后根據凝聚后的目標信息計算方位角和俯仰角的角誤差,最后形成單幀目標信息報告。根據上述規格說明描述,該單元的詳細設計如圖2所示,單幀凝聚測角單元的輸入參數包括目標信息數組、方位角補償、俯仰角補償、方位角、俯仰角、目標個數等。最終得到的輸出參數為凝聚后的目標距離、多普勒通道號、目標回波幅度以及相應的角誤差等目標信息鏈表。

圖2 單幀目標凝聚測角單元
單幀目標凝聚測角單元測試用例設計具體流程如圖3所示。

圖3 被測單元用例設計流程圖
具體步驟如下:
3.2.1 確定分類樹中輸入分類集合U。由上面的分析可知,單幀凝聚測角單元的輸入參數較多,全部作為單元測試的輸入會增加用例的個數,降低工程應用的可能。因此需要對其進行適當的裁剪。具體來說,目標信息數組中的多普勒通道號Dpl、目標距離Dist 以及目標回波幅度Amp 三個參數對整個單元的功能輸出起關鍵影響,這里可以定義它們為主要參數。除上面三個可控參數外,其余參數因對單元功能輸出影響較小,這里定義它們為次要參數。次要參數一般不出現在測試用例設計流程中,通常取常數。例如目標個數aimtnum 這個參數取常數3,即代表目標報告中有3 個目標,其余次要參數做同樣處理。綜上所述,此處分類集合U 可表示為U={Dpl,Dist,Amp}。
3.2.2 由(1)可得,目標報告中有3 個目標的信息。應用等價類劃分法和邊界值分析方法,對輸入域中的主要參數選取具有代表性的取值,即劃分U的各個輸入子集。現定義3 個目標的多普勒通道號為Dpl=(dpl1,dpl2,dpl3),目標的距離Dist=(dist1,dist2,dist3),目標回波幅度Amp=(amp1,amp2,amp3),具體劃分后的結果如表1所示。

表1 主要參數劃分結果
3.2.3 利用CTE XL 生成測試用例,并設置約束關系對測試集進行初步精簡。根據表2 和相應的約束關系,可以得到初始測試用例集C,如圖4所示,共81 個測試用例。

圖4 分類樹工具CTE XL 生成用例集
3.2.4 將U 和表1 的劃分結果與正交表的因素與水平一一對應,然后由因素和水平數選擇匹配的正交表。此處因素共3 個,分別為多普勒通道號Dpl、目標距離單元號Dist 以及目標回波幅度Amp。各因素水平對應表1,分別為一個9 水平和2 個3 水平。因為三個因素的水平不全相等,所以應選擇合適的混合水平正交表。同時,所選的正交表的因素數和對應水平不應小于上述因素數和水平數。所以,最終找到試驗次數(Runs)最少的正交表L(3^9 9^1),裁剪后如表2所示。

表2 裁剪后的L(3^9 9^1)
3.2.5 根據上述的映射規則將對應水平映射到所選的正交表,即可得到精簡后的最終測試用例集T,如表3所示。當然在人員和測試資源允許的情況下,還可以根據需要為T 從C 中挑選增加一些用例,這里不再詳述。
由表3 可以看出,初始測試用例集C 經過正交試驗設計法篩選后,得到27 個測試用例。與C 中的81 個用例相比,不但基本覆蓋了各主要參數的輸入組合,而且總用例數精簡了66%,大大減少了冗余用例,提高了測試效率,節約了測試成本。

表3 最終測試用例集T
近年來軟件測試領域中測試用例的精簡優化問題得到了越來越多的關注[1]。本文主要針對以往分類樹方法設計測試用例出現的冗余問題,提出了一種將分類樹方法與正交試驗設計法相結合的用例設計方法。較之原來僅使用分類樹方法設計用例,該方法大幅減少了冗余測試用例,提升了測試效率,提高了分類樹方法的工程應用價值。當然,圍繞這種方法仍有一些工作要做,下一步準備將分類樹工具與正交試驗設計法在軟件層面集成起來,進一步加強雷達軟件測試的自動化程度,以縮短雷達軟件的開發周期。
[1]Natalia Juristo,Ana M.Moreno.In search of what we experimentally know about unit testing[J].IEEE Software,2006,11:72-80.
[2]李喬,秦鋒,鄭嘯.用分類樹方法實現Web 服務測試用例的自動生成[J].計算機技術與發展,2007,17(11):197-200.
[3]朱連章,馬桂真.基于形式規格說明和分類樹方法生成軟件測試用例[J].微計算機應用,2007,28(4):411-414.
[4]徐偉,王林章,李宣東.基于分類樹的隨機測試用例生成[J].計算機科學,2009,36(1):263-266.
[5]嚴俊,張健.組合測試:原理與方法[J].軟件學報,2009,20(6):1393-1405.
[6]吳浩揚,常炳國.遺傳算法的一種特例—正交試驗設計法[J].軟件學報,2001,12(1):148-153.
[7]孫俊若.正交法在雷達軟件測試中應用[J].信息與電子工程,2009,7(6):501-505.