陳小林
(四川大學(xué)計算機(jī)學(xué)院,成都610065)
在過去的二十年里,基于UML模型的測試已經(jīng)發(fā)展到面對大型復(fù)雜的工業(yè)軟件系統(tǒng)的挑戰(zhàn)。UML規(guī)范在軟件開發(fā)中的適應(yīng)不僅改變了開發(fā)的方式,也改變了測試過程的方式,這允許在設(shè)計階段控制錯誤。從測試的角度來看,來自不同工件的UML轉(zhuǎn)換序列提供了關(guān)于消息的重要信息,例如發(fā)送方/接收對象、相關(guān)參數(shù)和保護(hù)條件,例如,UML轉(zhuǎn)換序列是序列圖中的消息序列,狀態(tài)機(jī)圖中的轉(zhuǎn)換序列,或活動圖中的活動序列。因此,這些UML轉(zhuǎn)換序列是測試軟件的許多測試用例生成技術(shù)的基礎(chǔ),UML在大型系統(tǒng)的分析和設(shè)計中已經(jīng)扎根。此外,它在軟件行業(yè)和學(xué)術(shù)界都是一個事實上的標(biāo)準(zhǔn)。UML分析和設(shè)計在許多軟件項目中執(zhí)行。它是一種標(biāo)準(zhǔn)的建模語言,用于視覺描述結(jié)構(gòu)和理解系統(tǒng)的行為。因此,研究基于UML模型生成測試用例的意義是很重要的,在開發(fā)的早期進(jìn)行測試介入,可以極大程度地降低軟件測試的成本。
Philip Samuel[1]等提出了序列依賴圖的概念,并將順序圖轉(zhuǎn)化成該圖,通過遍歷序列依賴圖生成測試用例。文瑾[2]在文獻(xiàn)中給出了基于UML順序圖的測試場景生成方案和實現(xiàn)算法,并通過順序圖的比較獲取設(shè)計變更信息,作為回歸測試的依據(jù)。Emanuela[3]等研究了將UML順序圖轉(zhuǎn)化為標(biāo)簽轉(zhuǎn)換系統(tǒng)圖(LTSs)的方法,然后采用深度優(yōu)先遍歷算法遍歷后生成測試場景。
A.J.Offutt[4]等研究了基于UML狀態(tài)圖的測試用例生成方法,該研究的主要貢獻(xiàn)在于其定義了四種基于狀態(tài)圖的測試覆蓋準(zhǔn)則,并開發(fā)了第一個測試用例自動生成工具UMLTest。Kansomkea[5]等在文獻(xiàn)中給出了一種基于建模工具Rational Rose的測試用例生成方法,該方法支持從UML狀態(tài)圖的規(guī)格說明中提取測試信息。Supaporn[6]等研究了如何將狀態(tài)圖轉(zhuǎn)化為TFG的測試流圖,從而依據(jù)測試序列生成測試場景的方法,但該方法沒有提供測試數(shù)據(jù)的生成與組合方式。
Hyungchoul[7]等研究了從擴(kuò)展型的UML活動圖(IOAD)中提取全路徑的測試用例生成方法。該方法雖然保證了測試的有效性和充分性,但容易導(dǎo)致路徑爆炸,從而影響測試效率。覃釗璇[8]等結(jié)合面向?qū)ο蟮亩鄳B(tài)性提出一種基于擴(kuò)展的UML活動圖的測試用例生成方法。該方法引入權(quán)值的概念并在傳統(tǒng)的遍歷算法的基礎(chǔ)上加以改進(jìn),減少無效測試場景的輸出。袁潔松[9]等實現(xiàn)了一個測試用例自動生成工具UMLTGF,該工具基于灰盒測試?yán)碚?,但約束條件過多,只能實現(xiàn)部分自動化。
自動化測試用例生成器需要了解系統(tǒng)的行為。UML提供了一種使用UML轉(zhuǎn)換序列來表達(dá)動態(tài)行為的方法。基于模型的測試從設(shè)計模型中提取出部分和抽象的行為,從而生成測試用例。
序列圖顯示了對象之間的消息和控制結(jié)構(gòu)序列,它由一組對象和消息組成。對象用生命線表示,消息用對象中的行表示。消息顯示對象之間的關(guān)聯(lián),以完成系統(tǒng)功能,并從上到下順序依次交換自然順序,對于集成測試非常有用。例如,圖1顯示了圖書館借書的序列圖。
圖1 圖書館借書序列圖
M Elallaoui[11]在以前的工作中實現(xiàn)了一個作為輸入用戶的算法自動生成UML序列圖,UML序列圖是自動轉(zhuǎn)換的利用模型將模型轉(zhuǎn)化為文本轉(zhuǎn)換。這個變換,可以應(yīng)用于獲取測試用例,與AndroMDA實現(xiàn)源MDA框架。測試是軟件工程的一個重要領(lǐng)域。有各種不同的測試方法在不同的階段進(jìn)行軟件開發(fā)生命周期(SDLC)。M Dhineshkumar[12]提出了一個新的從UML序列圖生成測試用例的方法,包括將序列圖轉(zhuǎn)換成SDG,從SDG中生成測試用例。序列圖是根據(jù)用例圖編寫的描述系統(tǒng)的整體視圖。之間的可追溯性模型由使用關(guān)系定義語言提供。RK Swain[13]等提出了一種新的測試用例生成技術(shù)UML 2.0序列圖。首先,構(gòu)建UML序列圖的一個系統(tǒng)。然后,從該模型構(gòu)造消息依賴圖(MDG)序列圖(SD)并通過遍歷MDG選擇條件謂詞。然后,計算對應(yīng)于每個條件謂詞的片。最后,根據(jù)給定的切片標(biāo)準(zhǔn)生成測試用例。測試策略通過切片測試覆蓋、高路徑覆蓋和完整來獲取測試用例謂詞覆蓋標(biāo)準(zhǔn)。在這里,關(guān)注的是對消息序列的測試在用例場景的對象中,技術(shù)可以用于系統(tǒng)以及對對象消息和條件的集群級測試信息。CAlvin[14]等為UML序列圖的靜態(tài)生成提供了一個框架,從面向?qū)ο蟮脑创a。該框架提供了一個查詢細(xì)化系統(tǒng),引導(dǎo)用戶在源中進(jìn)行有趣的交互代碼。技術(shù)包括構(gòu)造一個超圖源代碼,通過用戶定義的查詢遍歷超圖生成相應(yīng)的序列圖集合。并實現(xiàn)了工具的框架,StaticGen,分析一個30個An?droid應(yīng)用程序的語料庫。
UML活動圖用于建模一組對象的動態(tài)特性和操作的控制流程。他們還在一個圖表中指定了一整套用例場景?;顒訄D的基本思想是模型活動及其可能的執(zhí)行順序,描述了活動的順序和并發(fā)控制流。如圖2表示ATM取款的活動圖。
圖2 ATM取款活動圖
Yasmina[16]等提出了一個框架,將自動UML活動圖2.0轉(zhuǎn)換為Petri網(wǎng),用于分析目的,使用了INA analyz?er工具。這種轉(zhuǎn)換幫助軟件設(shè)計人員分析和驗證屬性。為了實現(xiàn)這個轉(zhuǎn)換,提出了一個um l-ad的元模型和一個用于PN的元模型?;谶@些元模型,定義了一個執(zhí)行轉(zhuǎn)換過程的圖形語法。AToM3被用作元建模和圖形轉(zhuǎn)換的工具。Hettab[17]等使用圖形轉(zhuǎn)換技術(shù)和AToM3工具從UML活動圖生成測試用例。提出了兩個圖形語法,第一個將UML活動圖轉(zhuǎn)換為一個中間圖,稱之為EADG(擴(kuò)展活動依賴圖)。EADG模型是活動依賴圖的一個擴(kuò)展,它捕獲與測試用例生成相關(guān)的活動圖的所有特性。第二個圖語法根據(jù)混合覆蓋標(biāo)準(zhǔn)從EADG模型生成測試用例集。Biswal BN[18]等從活動圖中生成測試場景,從而完美地實現(xiàn)了測試的充分性標(biāo)準(zhǔn)。通過分析每個場景的相關(guān)序列和類圖來生成測試用例,實現(xiàn)了最大路徑覆蓋標(biāo)準(zhǔn)。隨著設(shè)計重用,測試模型創(chuàng)建的成本也降低了。Li L[19]等首次將軟件測試與擴(kuò)展相結(jié)合,提出了一種基于擴(kuò)展理論的UML活動圖生成測試用例的自動方法。為了通過最小化測試用例,在軟件系統(tǒng)中找到更多的缺陷,設(shè)計了算法來構(gòu)造歐拉電路,并由歐拉電路算法自動生成測試序列。初步結(jié)果表明,測試用例不僅滿足了指定的測試覆蓋標(biāo)準(zhǔn),而且測試用例的數(shù)量也減少了。
狀態(tài)圖指定在響應(yīng)事件時對象的生命周期中發(fā)生的事件序列。它描述單個對象或整個系統(tǒng)的行為,狀態(tài)和轉(zhuǎn)換是狀態(tài)圖的主要組成部分[10]。單個類對象、用例和整個系統(tǒng)的動態(tài)行為可以用UML建模中的狀態(tài)圖來表示。例如,圖3表示CD player狀態(tài)圖。
圖3 CD player狀態(tài)圖
Chimisliu V[20]等提出了一種使用控制、數(shù)據(jù)和通信依賴的方法,以增強(qiáng)對垃圾轉(zhuǎn)換的測試目的。一個測試的目的是描述一個原始模型的抽象,描述一個需要測試的場景。在測試用例生成過程中使用了垃圾轉(zhuǎn)換,以限制被搜索的狀態(tài)空間。由于自動化測試用例生成活動非常重要,因此測試用例和測試用例的生成是完全自動的。從工業(yè)和其他一些文獻(xiàn)中對三種模型的方法進(jìn)行了評估,計算時間有了改進(jìn)。Salman Y D[21]等的目標(biāo)是使用UML狀態(tài)圖圖,特別是在處理循環(huán)中,提出適合測試用例的覆蓋標(biāo)準(zhǔn)。為了實現(xiàn)這一目標(biāo),這項工作回顧了以前的研究,提出了最實用的覆蓋標(biāo)準(zhǔn)組合,包括全狀態(tài)、全轉(zhuǎn)換、全傳遞對和全環(huán)自由路徑的覆蓋。通過計算來確定所覆蓋的覆蓋率標(biāo)準(zhǔn)的覆蓋率百分比,并將其應(yīng)用到UML狀態(tài)圖圖中。這個發(fā)現(xiàn)在測試用例的領(lǐng)域中是很有幫助的,特別是在UML狀態(tài)圖圖表中的處理循環(huán)中。Gulia,Preeti[22]等提出了一種利用遺傳算法從UML狀態(tài)圖中生成和優(yōu)化測試用例的新方法。為了生成新的測試序列,采用遺傳算法對交叉遺傳算法進(jìn)行了優(yōu)化,并通過突變分析對測試序列的效率進(jìn)行了評價。
綜上所述,對所有的動態(tài)模型圖的使用方法進(jìn)行總結(jié),如表1。
表1 模型方法匯總
作為一種半正式的建模語言,UML被廣泛用于描述學(xué)術(shù)界和業(yè)界的分析和設(shè)計規(guī)范,綜上所述,在基于UML轉(zhuǎn)換序列的測試領(lǐng)域進(jìn)行了研究。測試用例生成技術(shù)分為基于序列圖、狀態(tài)圖和活動圖描述了正在測試的軟件的動態(tài)行為。每個視圖代表系統(tǒng)中相同場景的一個特定特征。因此,這些模型相對于基于代碼的測試在測試用例的完整性方面有更好的應(yīng)用。在就將來的工作中可以結(jié)合使用不同的模型圖,提高測試的覆蓋率和效率。
參考文獻(xiàn):
[1]Philip Samuel,Anju Teresa Joseph.Test Sequence Generation from UML Sequence Diagrams[J].Ninth ACIS International Conference on Software Engineering.Aug,2008.
[2]文瑾.基于UML順序圖的回歸測試用例生成研究[J].集成技術(shù),2013,2(03):75-78.
[3]Emanuela G.Cartaxo,Francisco G.O.Neto and Patr'?cia D.L.Machado.TestCase Generation by Means of UML Sequence Diagrams and Labeled Transition Systems[C].IEEE.2007,292-297.
[4]A.J.Offutt,Y.Xiong,S.Y.Liu.Criteria for Generating Specification-based Tests[C].Fifth IEEE Intemational Conference on Engineering of Complex Computer Sy Stem.October1999.
[5]S.Kansomkea,W.C.Rivepi boon.Automated-Generating Test Case Using UML State Chart Diagrams[J].Proceedings of SAICSIT.2003,296-300.
[6]Supaporn K,WanchaiR.Automated-Generating TestCase using UML State Chart Diagrams[J].Proceedings of SAICSIT,2003,296-300.
[7]Hyungchoul Kim,Sungwon Kang,Jong moon Baik,Inyoung Ko.Test Cases Generation from UML Activity Diagrams[C].Eighth ACIS International Conference on Software Engineering,Artificial Intelligence,Networking,and Parallel/Distributed Computing,IEEE.2007,556-561.
[8]覃釗璇,曾一,柴艷欣,徐攀登.基于UML活動圖的多態(tài)性測試用例生成[J].計算機(jī)工程,2010,36(11):83-87.
[9]袁潔松,王林章,李宣東,鄭國梁.UMLTGF:一個基于灰盒方法從UML活動圖生成測試用例的工具[J].計算機(jī)研究與發(fā)展,2006,43(1):46-53.
[10]OMG,UML superstructure v2.1.2,"November2007.http://www.omg.org/spec/UML/2.1.2/.
[11]ElallaouiM,Nafil K,TouahniR.Automatic Generation of Test NG Tests Cases from UML Sequence Diagrams in Scrum Process[C].IEEE International Colloquium on Information Science and Technology.IEEE,2016:65-70.
[12]DhineshkumarM.An Approach to Generate Test Cases from Sequence Diagram[C].International Conference on Intelligent Computing Applications.IEEE Computer Society,2014:345-349.
[13]Swain RK,PanthiV,Behera PK,etal.Slicing-based Test Case Generation Using UML 2.0 Sequence Diagram[J].International Journal of Computational Intelligence Studies,2014,3(2/3):221-250.
[14]Alvin C,Peterson B,Mukhopadhyay S.Static Gen:Static Generation of UML Sequence Diagrams[M].Fundamental Approaches to Software Engineering,2017.
[15]M.Chen,P.Mishra,and D.Kalita,Coverage-driven Automatic Test Generation for UML Activity Diagrams.in Proceedings of the 18th ACM Great Lakessymposium on VLSI,pp.139-142,2008.
[16]Yasmina,Rahmoune&Chaoui,Allaoua&Kerkouche,Elhillali.(2015).A Framework for Modeling and Analysis UML Activity Diagram using Graph Transformation.Procedia Computer Science.56.612-617.10.1016/j.procs.2015.07.261.
[17]Hettab,Abdelkamel&Kerkouche,Elhillali&Chaoui,Allaoua.(2008).AGraph Transformation Approach for Automatic Test Cases Generation from UML Activity Diagrams.88-97.10.1145/2790798.2790801.
[18]BiswalBN,Nanda P,Mohapatra DP.ANovel Approach for Scenario-Based Test Case Generation[C].International Conferenceon Information Technology.IEEE Computer Society,2008:244-247.
[19]Li L,LiX,He T,etal.Extenics-based TestCase Generation for UMLActivity Diagram[J].Procedia Computer Science,2013,17:1186-1193.
[20]Chimisliu V,Wotawa F.Improving TestCase Generation from UMLStatechartsby Using Control,Data and Communication Dependencies[C].International Conference on Quality Software.IEEE Computer Society,2013:125-134.
[21]Salman YD,Hashim N L,Rejab MM,etal.Coverage Criteria for Test Case Generation Using UML State Chart Diagram[C].The,International Conference on Applied Science and Technology,2017:020125.
[22]Gulia,Preeti&S.Chillar,R.(2012).ANew Approach to Generate and Optimize Test Cases for UML State Diagram Using Genetic Algorithm.ACM SIGSOFT Software Engineering Notes.37.1.10.1145/2180921.2180933.