曹真,曹旻
上海大學計算機工程與科學學院,上海 200072
面向測試的構件系統模型及測試用例生成方法
曹真,曹旻
上海大學計算機工程與科學學院,上海 200072
隨著軟件系統規模的不斷增長,構件系統的理論日益成熟,基于構件的軟件開發逐漸成為軟件開發的重要方法,也成為解決軟件危機的重要途徑之一。在構件技術中,構件描述模型和構件系統集成測試技術是保證基于構件的軟件系統質量的關鍵技術之一。構件描述模型是對構件功能、性質的模型抽象,關于構件描述的研究已經有很多,但依然沒有統一的構件描述模型標準,而在已經出現的構件描述模型中,大多數模型更多關心的是構件的使用信息,如:構件版本、使用環境、接口信息等,很少包含有為構件系統測試服務的相關描述,導致構件系統開發完畢后在完成集成測試階段的功能測試和邊界測試等工作時,往往需要對系統逆向建立測試模型,再在測試模型的基礎上通過模型測試技術進一步生成測試用例,導致了對構件系統的多次建模,增加了軟件開發的成本。通常情況下,集成測試的功能測試和邊界測試的測試模型建立需要構件間的交互信息作為基礎,如果可以在構件描述模型中就加入這些信息,在構件系統搭建時對這些信息進行完善,則在系統搭建完畢后就可自動產生相關測試模型,進一步產生測試用例。省去了構件系統搭建完成后為了測試再手工為系統建立測試模型這一步驟,極大程度地提高了構件系統的開發效率,縮短了開發構件系統軟件的周期。同時構件描述模型中的交互信息,可以在構建系統搭建過程中驗證構件行為的正確性,進一步保證軟件質量。
基于上述思想,本文提出一種改進的構件描述模型,稱為面向測試的構件模型(Test-oriented Component System Model,TCSM)。與傳統模型不同,TCSM模型著重關心構件的交互關系和行為約束等動態描述,這些動態描述為構件系統集成測試提供了大量可用信息。在此模型的描述體系基礎上,提出一種在構件系統搭建時把該描述模型轉換成測試模型的方法,該測試模型以UML協作圖模型為基礎,在語義上進行了一定拓展,實現了構件系統從描述模型到測試模型的自動轉換。提出了一種自動生成測試用例的算法。實驗表明,所產生的測試用例符合系統的實際使用場景,可以較完整地覆蓋到構件系統的各個使用路徑和交互行為。
關于構件描述模型,在學術界和產業界已經有很多研究和發展,如早期提出的3C模型、REBOOT模型等。但3C、REBOOT等模型的抽象層次較高,是一種模板性質的描述,在具體構件使用時對構件的描述就顯得不完備[1]。企業界和一些組織對構件模型進行了進一步研究并提出了各自的描述方法。OMG組織提出了CORBA模型[2],Sun公司提出了基于java的構件模型,即JAVABeans和EJB[3],Microsoft也有自己的COM模型[4]。上述模型較為清楚地描述了構件的特性和功能,但對構件系統的依賴關系、運行層次以及交互約束等動態描述尚有欠缺。為進一步描述構件的動態行為等信息,Wright、SOFA等構件模型一定程度上提供了構件行為層次上的描述,Wright運用CSP并對其進行一定的擴充,來描述構件接口的交互行為[5];SOFA使用了類正則(Regular-Like)表達式來描述構件在各個端口上的行為[6];文獻[7]提出了一種描述構件間依賴關系的模型。但這些動態描述方法并沒有專門從測試角度來考慮構件模型中應該包含的信息,也沒有具體提出一種直接產生測試用例的方法,所以面向測試的構件描述模型需要進一步的研究和完善。本文提出的構件描述模型在包含構件必要的基本信息的同時,在模型中添加了大量動態信息描述,以便于良好地記錄和體現構件的動態性與交互性。同時以測試為驅動,進一步考慮測試時所關心的信息要素和特點,優化模型中的動態信息內容,使其能直接為構件系統測試所使用。
在構件系統的模型測試研究方面,文獻[8]提出了一種模型驅動的測試用例生成方法,并介紹了其基于JUnit的模型生成和模型測試框架,實現了從系統模型到測試模型的轉換,但該框架主要適用于單元測試,缺失對大型構件系統集成測試的支持和優化;文獻[9]中介紹了一種以面向對象技術為基礎的模型測試技術,實現對系統中的類、接口、結構的方法有針對性地測試,但沒有對方法和接口按照類型和關系進一步劃分,并為其增加上下文關系對應的語義描述,所以在具體應用時,不能良好地測試大型系統中的邏輯和時序關系;文獻[10]提出了一種基于UML時序圖場景的模型測試方法,通過對系統UML模型的形式化解析,將UML模型轉換為FSM模型,再通過FSM進一步產生測試用例,但UML模型本身的建立需要人工參與,而通過FSM模型產生測試用例的方法在復雜構件系統上應用時,容易產生狀態爆炸問題。本文使用了一種基于UML協作圖的測試模型,并在語義上對其進行了拓展。UML協作圖強調的是調用和被調用的對象之間的組織結構、消息傳輸和上下文關系,這與基于構件的軟件系統內部組成和工作原理極為相似。同時UML具有豐富的語義,并且支持形式化描述,這都有利于對構件系統的行為和邏輯進行進一步描述和驗證。
本文提出的TCSM主要是用來描述構件提供的接口功能以及接口交互時的依賴與約束,而這些動態特性往往正是測試過程所關心的。Wu[11]和Mariani[12]對構件系統出現的錯誤進行了系統的分析和分類,認為這些錯誤的產生大多數來自于構件交互。Wu認為構件測試過程應該考慮以下幾個內容:接口,消息,上下文關系,內容依賴關系。但其描述有大量的重復和冗余信息,也沒有提出一套從描述產生測試用例的具體方案。
3.1 TCSM體系的定義
TCSM從測試角度出發,除了包含有構件的基本信息以外,還包含了構件的動態信息描述,并將構件動態描述內容分為以下幾個方面:構件屬性與接口、調用順序、上下文依賴、輸入返回。
構件屬性與接口:構件本身具有屬性;接口即為構件對外提供的接口函數。
調用類型:構件間相互調用的邏輯順序類型,包括直接調用,嵌套調用,并行調用,異步調用。
上下文依賴:構件在被調用時受到的上下文關系約束,稱為前置條件(執行調用操作前必須滿足的約束條件),前置條件包含狀態約束和值約束兩類約束條件。
輸入返回:構件間相互操作時的輸入值和返回值。
定義1(TCSM)面向測試的構件系統模型可以表示為一個兩元組,TCSM=(SD,DD),其中SD表示模型中的靜態描述內容,DD表示模型中的動態描述內容。
定義2(SD)TCSM中的靜態描述SD為一個四元組,SD=(BI,CE,AF,OP)。其中BI為構件基本信息,CE為構件使用環境,AF為構件應用領域,OP為構件運行性能。以上每一項也都由一個n元組構成,BI=(BI_name,BI_author,BI_time,BI_version),分別表示構件名稱、構件作者、更新時間、版本號等信息,CE=(CE_config,CE_system,CE_platform),分別描述構件使用時的系統配置、操作系統、開發平臺,AF=(AF_domain,AF_range,AF_type),代表構件的使用領域、應用范圍、功能類型,OP=(OP_Frequency,OP_security,OP_stability,OP_duration},以上集合構成了TCSM的靜態描述內容。
該靜態描述體系較全面地描述了TCSM中構件的基本信息,與現有模型相比提供了更多的構件基本信息,也為構件系統的自動化測試提供了靜態信息來源。
定義3(DD)TCSM的動態描述部分DD由一個四元組組成,DD=(CS,IS,CD,IR),分別代表構件接口信息、調用類型、上下文依賴、輸入返回。其中CS為一個二元組,CS=(CS_name,CS_invokeName),CS_name表示構件方法名稱,CS_invokeName表示該方法所調用的構件名稱;IS的值集合為IS={IS_direct,IS_nest,IS_paiallel,IS_async},IS_direct代表直接調用,IS_nest代表嵌套調用,IS_paiallel代表并行調用,IS_async代表異步調用;CD為一個二元組,CD=(CD_state,CD_value),分別表示前置條件狀態約束、前置條件值約束;IR=(IR_input,IR_return)也是一個二元組,其中IR_input表示輸入,IR_input取值集合為{input0,input1,…,inputn},其中inputn為IR_input中所含參數,IR_input可以包含0個至n個參數,IR_return表示輸出,IR_return可以為某個唯一值或者為空,表示包含1個或者0個返回參數。TCSM的DD結構樹如圖1所示。

圖1 TCSM結構樹
TCSM的動態描述與部分已有模型中的動態描述相比,著重關心構件間的交互方式和順序信息,還增加了相關約束信息。而這些信息在搭建構件系統時也需要描述清楚,將其以構件描述的方式保存在TCSM中,既利于組合構件系統,又可用來生成測試場景,進一步生成測試路徑。接下來進一步討論其具體的實現方法。
3.2 TCSM的建立
本文以一個簡單的基于構件的Web應用程序:學生選課系統(Student Course Selection System,SCSS)來說明如何建立TCSM描述系統,以及自動生成系統的測試用例。SCSS主要實現了學生網上在線選課的功能,學生在使用SCSS選課前需要先登錄系統,登錄成功后在選課過程中可以查詢相關課程情況,完成選課后系統會發送郵件通知學生選課成功和課程信息。
SCSS包含的主要構件有:學生身份驗證構件(Student Authentication)、課程信息查詢構件(Course Information Search)和選課系統構件(Course Selection)。Student Authentication構件中包含有redirectToSelectionSys()接口,該接口功能為登錄信息驗證成功后自動進入選課系統;revalidate()接口,該接口功能為登錄信息驗證失敗后返回登錄界面要求用戶重新輸入登錄信息。Course Information Search構件中包含有enterSelectionSys()接口,實現從課程查詢頁面進入選課系統。Course Selection構件中包含enterSearchSys()接口,實現從選課系統進入課程查詢頁面;updateDataBase()接口,實現將選課結果更新至數據庫;sendMail()接口,將選課成功信息和課程基本信息發送至學生郵箱;redirectToLoginSys()接口,通過該接口可以退出登錄并重新返回登錄界面。SCSS構件系統構件間的關系模型如圖2所示。

圖2 SCSS構件間的關系模型
以SCSS中Course Selection構件的enterSearchSys和updateDataBase接口為例,分別為其建立TCSM。學生可以多次從選課系統進入課程信息查詢系統然后再返回,所以認為enterSearchSys調用類型為嵌套,調用前的守衛信息為學生登錄成功。學生在選課成功后,系統會同時更新數據庫信息并給學生發送通知郵件,所以認為updateDataBase的調用類型為并行,守衛條件是選課成功。具體的XML描述如下:

依次為其他構件建立TCSM,受篇幅所限,SCSS的其他XML描述不再羅列,按照上述方法,完成對SCSS的TCSM建模。可見搭建好的TCSM模型中完整地保留了構件間的交互與層次信息,以及相關約束和輸入輸出信息,為構件系統的集成測試和接下來進一步實現測試模型的自動生產提供了必要信息和基礎。
本節討論從TCSM自動產生測試模型的方法。
定義4(CM)TCSM生成的測試模型CM是一個三元組,CM=(CP,MSG,MV),CP表示模型中所包含的所有構件的集合。MSG是構件間的消息集合MSG= {msgi|MSG},其中每個msgi∈MSG都是一個五元組,msg=(msg_name,msg_sequence,msg_guard,msg_input,msg_return),分別表示消息名稱、消息序號、守衛條件、輸入、輸出。MV:CP×MSG→CP是遷移關系。
4.1 從TCSM自動生成測試模型
從TCSM到測試模型CM的具體轉換算法如下:
(1)將TCSM中涉及到的所有構件加入測試模型的構件集合CP。
(2)將TCSM描述中的構件接口名轉換為測試模型的消息名稱,CS_name→msg_name。
(3)根據TCSM描述中的消息類型IS,以及所調用的目標構件名稱CS_invokeName,生成測試模型中的消息序號msg_sequence。最高層次的信息直接用數字表示。如果消息類型為直接調用IS=IS_direct,則在前一消息的序號基礎上加1,如前一消息的序號為1.1,則本次調用消息序號為1.2;如果消息類型為嵌套IS= IS_nest,則消息的層次降低,消息的序號層次加1,如上層的消息為1.1,發生嵌套調用后消息的序號變為1.1.1;如果發生并行調用IS=IS_paiallel,則在并行消息的序號上加小寫字母,如消息1.1的兩條并行消息為1.1a,1.1b;如果消息類型為異步調用IS=IS_async,則增加消息嵌套層次,與嵌套調用類似,同時消息調用的實線變為虛線。
(4)TCSM中的前置條件狀態約束CD_state轉換為測試模型調用消息的守衛條件msg_guard,在守衛條件滿足時發生調用動作;前置條件值約束CD_value轉換為測試模型中的分支條件,根據前置條件值的數量,決定測試模型中的分支路徑數。如消息的前置條件值分為真和假兩種取值,則代表產生兩條分支路徑,分支以大寫字母區分,如兩條選擇路徑可分別表示為1.1A和1.1B。
(5)TCSM中的輸入輸出,轉換為協作圖中的消息的輸入輸出,將IR_input所包含的輸入參數轉換至msg_input的參數中,將IR_return的返回值轉換成msg_return的返回值。
根據以上準則,可把通過TCSM描述的構件系統自動轉換為測試模型,之前學生選課系統(SCSS)根據該算法產生的測試模型圖如圖3所示。
生成的該測試模型完整地保留了構件系統的關鍵交互信息,利用這些信息可以準確地反應該構件系統的行為和約束。同時體現了構件間的時序關系,隱含了構件系統的使用場景,根據一定的路徑覆蓋準則,則可以進一步產生測試用例。

圖3 TCSM自動產生的測試模式圖
4.2 測試用例的自動生成
根據TCSM自動產生的測試模型,可以進一步自動生成測試用例。
4.2.1 測試覆蓋準則
文獻[13]提出了一種測試準則,但基于構件系統的自身特點,傳統的測試覆蓋準則不太適用于構件系統軟件測試。文獻[14]提出了一種適用于構件系統的模型測試覆蓋準則,但對構件系統中并行關系和守衛條件沒有提出具體的處理方法。文獻[15]提出了一種產生約簡測試集的方法,本文通過守衛條件對產生的測試用例進行了進一步優化和約簡。
基于構件系統和TCSM的特點,提出下述測試覆蓋準則:(1)每個組件之間的每條交互消息至少被覆蓋一次;(2)每個有效場景的所有路徑必須覆蓋一次;(3)測試模型中的并行消息如果其中一條被覆蓋,另外一條也必須被覆蓋;(4)測試模型中的每條嵌套消息產生的循環路徑必須分別被測試0次、1次、2次。
4.2.2 測試用例生成算法
在已經建立測試模型的前提下,測試用例生成的思路是,使用深度優先算法根據消息偏序關系以及消息類型遍歷測試模型圖,直到到達無后繼的消息,從而生成一條測試路徑,以此類推,生成所有測試場景。
具體方法如下:(1)將每條消息按照偏序關系以及消息類型找到它的直接后繼,建立一張有向圖;(2)找到有向圖中的環,將環處理成一個節點;(3)按照測試準則用深度優先算法遍歷圖,產生測試路徑;(4)檢查路徑中不符合消息前置、后置條件約束的路徑,標注這些路徑以與其他正常測試路徑區分。同時根據消息類型檢查無效測試路徑(如并行消息包含不完整的路徑,理論上是系統無法達到的),并去除這些路徑;(5)將所有路徑組合產生測試場景。測試用例生成算法的偽代碼如下:


文獻[16]提出了一種較為有代表性的從UML協作圖生成測試用例的方法,其首先對系統進行UML人工建模,然后依據對模型的形式化定義和一定的覆蓋準則生成測試用例。為了對比通過本文模型轉換算法自動生成的測試用例的覆蓋度和正確性,用文獻[16]中的方法生成本文SCSS中系統的測試用例,作為預期輸出。按照消息類型對比二者生成的測試用例,結果如圖4所示。

圖4 文獻[16]與本文測試用例生成結果對比
可見本文自動生成的測驗用例覆蓋了大部分的預期測試用例輸出結果。通過進一步分析和對比,本文提出方法所產生的測試用例符合系統的實際使用場景,可以較完整地覆蓋到構件系統的各個使用行為和消息路徑,守衛條件的增加也有效地避免了測試用例產生時的路徑爆炸問題,提高了所產生的測試用例質量。
本文提出一種新的面向測試的構件系統描述模型TCSM,較完整地描述了構件系統中構件間的交互類型、約束條件、輸入輸出等消息,有效地包含了構件系統集成中功能測試、邊界測試等階段所需要的關鍵信息。通過本文提出的模型轉換算法自動產生測試模型,減少了通常構件系統在開發完成后為了測試需要逆向人工參與搭建測試模型的步驟,最后根據測試模型自動產生測試用例。該方法從構件行為描述入手,所描述的構件信息緊密結合構件系統的測試需求,進一步實現了構件系統的自動化建模和測試,提高構件系統開發的效率和質量。
未來的工作方向主要為,根據構件間的動態描述信息,預計可以在構件組裝時檢測到構件系統的邏輯錯誤和驗證系統的安全性,具體的方法和可行性需要進一步研究和測試。
[1]Latour L,Wheeler T,Frakes B.Descriptive and predictive aspects of the 3Cs model:SETA1 working group summary[J].ACM SIGAda Ada Letters,1991,11(3):9-17.
[2]張國明.基于E JB和CORBA的分布式異構系統的集成[D].中國優秀碩士學位論文全文數據庫,2009(9).
[3]Monica Pawlan.The J2EE Tutorial[M].[S.l.]:Sun Microsystem Corporation,2000.
[4]Rogesmo D.COM技術內幕[M].北京:清華大學出版社,1993.
[5]Allen R.A formal approach to software architecture[D]. School of Computer Science,Carnegie Mellon University,1997.
[6]Plasil F,Visnavsky S.Behavior protocols for software components[J].IEEE Trans on Software Engineering,2002,28(11):1056-1076.
[7]羅舒,邢天揚,曹旻.Web應用開發中構件描述的研究與應用[J].計算機工程與設計,2010,31(18):3989-3992.
[8]劉揚,李亞芬,王普.模型驅動的測試用例自動生成框架[J].計算機工程,2011,37(1):39-44.
[9]謝冰,張晨東.一種基于面向對象測試模型的測試代碼生成方法與工具[J].計算機研究與發展,2008,45(Sl):336-340.
[10]黃龍,繆淮扣,王皙,等.基于場景的形式化測試模型生成方法[J].上海大學學報,2011,17(5):595-599.
[11]Wu Y,Pan Dai,Chen Mei Hwa.Techniques for testing component-based software[C]//Proceedings of the Seventh InternationalConferenceonEngineeringofComplex Computer Systems,2001.
[12]Mariani L.A fault taxonomy for component-based software[J].Electr Notes Theor Comput Sci,2003,82(6).
[13]劉攀,繆淮扣,曾紅衛,等.確定性有限狀態機的最小測試成本遷移覆蓋準則[J].軟件學報,2011,22(7).
[14]曾紅衛,繆淮扣.用模型檢驗產生安全性質的測試[J].應用科學學報,2011(29):529-536.
[15]田野,曾紅衛.用模型檢驗產生約簡測試集[J].計算機工程與應用,2012,48(17):93-98.
[16]曾紅衛,周建云.基于UML協作圖的測試用例生成方法與實現[J].計算機工程與設計,2007,28(16):3805-3811.
CAO Zhen,CAO Min
College of Computer Engineering and Science,Shanghai University,Shanghai 200072,China
With the extensive application of the component-oriented software development methods,the description and test of the component systems is becoming the key of software quality assurance.For the particularity of the component system complexity and development methods,component systems’integration test using traditional methods often face with many difficulties.This paper presents an improved test-oriented component describe model called TCSM.It focuses on the interactions and behavioral constraints between components in the component systems and provides a wealth of information for the phase of functional test and boundary test in system integration test.An approach to transfer the TCSM to test model,which based on UML collaboration diagram and supports the conversion of one component system from its description model to test model automatically,is also proposed in the paper.Furthermore,an algorithm for generating test cases automatically is realized.TCSM can better describe the interactive behaviors and realize the automatic test of component-based systems.The proposed model can not only reduce plenty of time in the process of system modeling and test, but also improve the efficiency and reliability of the component-based systems.
component system integration testing;component system test model;model conversion;test case generation
隨著面向構件的軟件開發方法的廣泛應用,構件系統的描述和測試成為保證軟件質量的關鍵所在。由于構件系統的復雜性和開發方法的特殊性,用傳統方法對構件系統進行集成測試往往面對很多困難。提出了一種改進的面向測試的構件描述模型,稱為TCSM,它著重對構件系統中的構件間的交互和約束進行了動態描述,為構件系統集成測試階段的功能測試和邊界測試等提供了大量可用信息。在此基礎上,進一步提出一種把TCSM轉換成測試模型的方法,以UML協作圖模型為原型,實現了構件系統從描述模型到測試模型的自動轉換。最后,實現了一種在所產生的測試模型上自動生成測試用例的算法。TCSM更好地描述了構件的交互行為信息,進一步實現了系統的自動化測試,減少了通常需要在構件系統搭建完成后,針對測試對系統手工建立測試模型的工作,提高了構件系統開發的效率和可靠性。
構件系統集成測試;構件系統測試模型;模型轉換;測試用例生成
A
TP31
10.3778/j.issn.1002-8331.1212-0362
CAO Zhen,CAO Min.Test-oriented component model and test case generation method.Computer Engineering and Applications,2014,50(22):59-64.
上海市教委創新項目資助(No.12ZZ094)。
曹真(1987—),男,碩士研究生,主要研究領域為軟件測試、軟件架構;曹旻(1966—),女,博士,副教授,主要研究領域為軟件工程、Web應用。E-mail:cz00000@126.com
2012-12-30
2013-04-27
1002-8331(2014)22-0059-06
CNKI網絡優先出版:2013-05-24,http://www.cnki.net/kcms/detail/11.2127.TP.20130524.1509.008.html