摘 要:根據類對象之間的消息通信產生的同步消息、消息傳遞以及消息等待的交互特征,設計了一種有向同步交互圖(DSIG)模型,提出了類繼承的同步交互路徑(SIAPaths)測試用例生成方法,給出了自動生成同步交互路徑的算法。同時,提出了同步交互序列測試充分性準則,并從基本交互路徑序列和基本交互消息序列的測試覆蓋率兩方面闡述了測試的可行性。
關鍵詞:類繼承測試; 有向同步圖; 交互路徑; 測試用例生成算法; 同步交互序列
中圖分類號:TP301.6文獻標志碼:A
文章編號:1001-3695(2007)06-0048-04
0 引言
面向對象的軟件測試是面向對象軟件開發不可缺少的一環。面向對象的繼承機制增加了類測試技術的復雜性[1~3],例如,類的多層繼承或多重繼承使得對象在消息傳遞過程中出現歧義性,產生狀態不可預料的錯誤;在測試基類的子類時,由于類的交互導致測試路徑爆炸的問題;在類族之間進行消息通信時,可能發生相互等待對方的輸出數據而產生死鎖問題。Fielder[4]指出,在父類充分測試的基礎上,被子類繼承的方法只需最小測試。Turner[5]主張在測試子類時,只需對被繼承的屬性和新屬性之間的交互進行測試。Perry等人[6]認為子類中繼承的方法和重新定義的方法都必須在子類環境中重新測試;對被繼承方法是充分的測試數據集未必對重定義的方法是充分的。Jorgensen[1]提出了事件消息驅動的Petri網(EMDPN)模型。文獻[7]將EMDPN模型運用于類的層次測試中,提出了基于EMDPN的類的層次測試用例生成方法;但其模型復雜、節點類型多樣,運用在類的繼承測試中過于復雜。本文將結構測試易形式化描述與功能測試強調輸入/輸出的特點[8]結合起來,用類及其子類對象的交互圖描述被測軟件的結構;對象間的消息傳遞就是類的輸入/輸出,構造類族的有向同步交互圖;再與協同路徑生成并行程序測試用例的方法[9,10]相結合,測試類的繼承間交互產生的錯誤。
1 有向同步交互圖
有向圖是構成軟件測試模型的基礎[11],其結構提供了面向對象軟件數據流分析框架。將類對象之間的同步通信與有向圖結合起來,得出有向同步圖的定義如下:
在較復雜的面向對象軟件系統中,可能同時存在較多的同步交互消息傳遞。因而將這些同步交互消息傳遞定義為同步交互消息序列集合。
定義3(同步交互消息序列集) 面向對象軟件系統中的同步交互消息序列集由同步消息序列集、消息傳遞序列集與消息等待序列集構成,即
2 用DSG表示類繼承間的交互
以哲學家就餐問題為例。假設類族A和B,類族A中的子類C的成員函數X()為重載函數,用于產生叉子數以及產生C的新對象便于交互測試;類族B中的子類D的成員函數Y()為重新定義的操作,表示哲學家的狀態,通過調用繼承的成員函數Z1()和Z2()分別控制叉子的拿起和放下。當一個哲學家拿起左邊和右邊的兩把叉子時,他便開始進餐;如果下一個哲學家想用他左邊或右邊的任何一把叉子,他必須等待;一個哲學家吃完后放下兩把叉子,并開始思考。其類圖和類間交互的狀態如圖1所示。下面是部分成員函數的C++偽代碼:
定義4(有向同步交互圖) 有向同步交互圖(Directed Synchronous Interactions Graph,DSIG)由有向同步圖和類族之間的同步交互消息組成,表示類族間的行為特征,可以描述為2 用DSG表示類繼承間的交互
以哲學家就餐問題為例。假設類族A和B,類族A中的子類C的成員函數X()為重載函數,用于產生叉子數以及產生C的新對象便于交互測試;類族B中的子類D的成員函數Y()為重新定義的操作,表示哲學家的狀態,通過調用繼承的成員函數Z1()和Z2()分別控制叉子的拿起和放下。當一個哲學家拿起左邊和右邊的兩把叉子時,他便開始進餐;如果下一個哲學家想用他左邊或右邊的任何一把叉子,他必須等待;一個哲學家吃完后放下兩把叉子,并開始思考。其類圖和類間交互的狀態如圖1所示。下面是部分成員函數的C++偽代碼:
3 基于DSIG的同步交互路徑生成算法
首先考慮生成基于DSG的測試用例,這些測試用例就是DSG的路徑和子路徑。下面定義基于DSG的子路徑集(Subpaths)。
4 測試覆蓋準則
Howden[12]指出,測試標準規定的不僅僅是生成測試用例的終止條件,而且也是軟件測試可靠性分析的重要依據。McGregor[2]提出了基于狀態的覆蓋率的類的測試充分性標準,指出以測試用列覆蓋了狀態轉換圖中多少個狀態為依據。但是,即使測試用例對所有的狀態轉換都覆蓋了至少一次,測試的充分性仍值得懷疑,因為還要關注各個操作在涉及狀態轉換時的交互問題。路徑覆蓋準則要優于其他已知的覆蓋準則[13],但是對于一般的軟件路徑數目太大,以至于實際難以實現。文獻[8]提出的基本路徑覆蓋準則指出,選取足夠多的數據使得每條路徑至少被覆蓋一次。但是在面向對象軟件測試中僅僅考慮基于路徑的覆蓋準則顯然是不夠的,面向對象的消息傳遞機制要求測試人員必須考慮消息傳遞和消息等待的覆蓋率問題;在類對象同步交互時,還要考慮同步交互消息的測試覆蓋情況。因而,將有向同步交互圖與并行程序有序序列測試充分性準則[14,15]結合起來,提出面向對象的類族交互測試的同步交互序列測試準則如下:
定義10(同步交互序列測試準則) 在測試含有m(m≥2)個類族的面向對象軟件系統時,將所有可行的同步交互路徑序列和同步交互消息序列至少執行一次,稱為同步交互序列測試準則(Synchronization Interaction Sequences Testing Criteria,SISC)。記為
由圖3可知,新提出的同步交互路徑自動生成算法得到的測試用例滿足SISC測試標準。因此新算法具有較好的覆蓋率。
5 結束語
本文算法能較好地自動生成測試用例,可以解決面向對象軟件測試中產生不可預料狀態、測試路徑爆炸以及測試時發生死鎖的問題。如何開發生成測試用例的工具,使得生成的測試用例更加自動化、規范化?如何進一步優化測試用例,提高生成測試用例的可行性?這些都是今后進一步研究的問題。
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。