黃 龍, 繆淮扣, 王 皙, 郭 亮
(1.上海大學計算機工程與科學學院,上海200072;2.上海市軟件評測重點實驗室,上海201112)
測試是提高軟件可靠性的重要方法,而基于模型的測試是一種高效的測試方法.統(tǒng)一建模語言(unified modeling language,UML)以其操作簡單、易懂和易用的特點,在Web應(yīng)用開發(fā)的建模中得到了廣泛的應(yīng)用.雖然現(xiàn)在有很多從UML模型直接生成的測試用例的方法,但由于其半形式化的特點,使得UML模型很難直接用于基于模型的自動測試.
有限狀態(tài)機(finite state machine,F(xiàn)SM)是一個重要的建模工具,可為軟件設(shè)計人員提供一種便利的對軟件功能建模的方法.FSM具有成熟的理論基礎(chǔ),它利用形式語言和自動機理論來設(shè)計和分析模型.目前,已有一些使用FSM建模Web應(yīng)用的研究[1-3].而基于場景的測試能夠清晰明確地驗證用戶需求,提高測試的效率與質(zhì)量,具有廣泛的應(yīng)用前景.
UML是一種面向?qū)ο蟮臉藴式UZ言,已廣泛應(yīng)用于Web應(yīng)用建模等領(lǐng)域.從測試用例生成的角度出發(fā),F(xiàn)SM利用其自身的特點在軟件建模、測試和驗證中得到了廣泛的應(yīng)用.UML在產(chǎn)生測試用例方面已有很多成熟的理論和方法.文獻[4]利用時間擴展UML狀態(tài)圖的語義,介紹了時間擴展UML狀態(tài)圖的混合時間Petri網(wǎng)模型的構(gòu)造方法、混合時間Petri網(wǎng)模型測試用例生成方法.文獻[5]給出了順序圖的形式化定義,并將其用于對類圖以及狀態(tài)圖一致性的核對,但未將順序圖用于生成形式化測試模型的研究.文獻[6]從UML2.0順序圖中得到與其對應(yīng)的消息流通圖,并通過遍歷該圖得到相應(yīng)的測試序列.雖然這些方法可以從UML模型中直接產(chǎn)生測試用例,但是由于沒有形式化推理工具的理論引導,因此,不能提供模型驗證,缺乏嚴格的理論推導和證明.
本工作在已有研究[7]的基礎(chǔ)上,研究了如何使用UML順序圖表示場景,并利用場景來規(guī)約使用FSM表示的系統(tǒng)行為模型,從而得到基于場景的形式化測試模型.
有限狀態(tài)機(FSM)M通常是一個5元組,M= (Q,Σ,δ,q0,F(xiàn)),其中Q={q0,q1,…,qn}表示非空的有限狀態(tài)集,在任一確定的時刻,F(xiàn)SM只能處于一個確定的狀態(tài)qi(0≤i≤n);Σ={σ1,σ2,…,σm}表示非空的有限輸入符號集,在任一確定的時刻,F(xiàn)SM只能接收一個確定的輸入σj(1≤j≤m);δ:Q× Σ→Q為狀態(tài)遷移函數(shù).如果在某一確定的時刻,F(xiàn)SM處于某一個狀態(tài)qi∈Q,并接收一個輸入的字符σj∈Σ,那么,下一時刻將處于一個確定的狀態(tài)qj=δ(qi,σj)∈Q;q0∈Q為初始狀態(tài),F(xiàn)SM由此狀態(tài)開始接收輸入;F∈Q為終止狀態(tài)集合,在達到終態(tài)后,F(xiàn)SM不再接收輸入.
所謂場景(scenario),就是描述系統(tǒng)中各相關(guān)構(gòu)件之間如何進行交互,以完成操作的某一個系統(tǒng)功能[8].本工作使用UML順序圖來表示場景.
UML是一種定義良好、易于表達、功能強大且普遍適用的建模語言.順序圖(sequence diagram)是強調(diào)消息的時間次序的交互圖,順序圖展示了一組角色和扮演這些角色的實例發(fā)送和接收的消息.
圖1為一個簡單的UML順序圖,由3個對象和3條同步消息組成.順序圖著重反映的是一組消息發(fā)生的時間的先后次序,其中消息“M1*”中的符號“*”表示該條消息可以重復進行多次(如可以模擬用戶輸入信息的操作),而消息“#”表示該條消息是緊接上一條消息自動進行的內(nèi)部遷移操作(如用戶點擊另一頁面的鏈接時,由當前頁面進行的跳轉(zhuǎn)).
圖1 UML順序圖Fig.1 UML sequence diagram
本工作所定義的投影操作,是在描述系統(tǒng)狀態(tài)變化的FSM上,根據(jù)由順序圖表示的場景進行遍歷得到約簡后的FSM,該FSM只包括場景中所涉及的對象間的遷移.
投影的具體過程如下:①從順序圖中得到對象間進行通信的消息序列;②把得到的消息序列和描述系統(tǒng)狀態(tài)變化的FSM中的遷移集合進行交運算;③輸出只包含進行求交運算得到的遷移集合的子FSM,以達到對系統(tǒng)FSM約簡的目的.
本工作通過使用一個網(wǎng)站的郵箱服務(wù)來說明如何利用本方法得到基于場景的形式化測試模型.用戶通過點擊一個網(wǎng)站主頁中的郵箱服務(wù),進入登錄界面后輸入用戶信息,并在確認信息后進入個人郵箱進行后續(xù)操作.
圖2所示的郵箱服務(wù)功能包括從網(wǎng)站主頁選擇鏈接到郵箱登錄界面,輸入用戶信息點擊Submit,在信息得到確認后進入個人郵箱界面,或者點擊Cancel退出到登錄界面.在進入個人郵箱界面后,可選擇進入收件箱等界面進行操作(模型在此省略后續(xù)操作).最后點擊Logout退出到登錄頁面.
圖2 郵箱服務(wù)系統(tǒng)的FSMFig.2 FSM of E-mail service system
圖3為模擬用戶登錄郵箱后不進行其他操作直接退出郵箱的場景.
圖3 模擬用戶操作的場景Fig.3 Scenario imitating user’s operation
圖4為使用圖2所示的場景和圖3所示的系統(tǒng)FSM進行投影操作后,得到的基于場景的FSM,所生成的測試模型可以用于后期自動產(chǎn)生測試用例.
首先,使用UML狀態(tài)圖對系統(tǒng)行為進行建模,并根據(jù)文獻[7](主要針對非正交的UML狀態(tài)圖)中的方法進行形式化轉(zhuǎn)換工作;然后,使用UML順序圖對場景進行建模;最后,通過對系統(tǒng)行為的FSM和場景進行投影操作,得到基于場景的形式化測試模型(見圖5).
圖4 投影操作后的FSMFig.4 FSM after projection operation
圖5 形式化測試模型的生成Fig.5 Generation of formal testing model
本工作采用可擴展標記語言(extensible markup language,XML)文本格式來存儲UML模型,用狀態(tài)圖擴展標記語言(state chart XML,SCXML)文本格式來存儲FSM模型.
元數(shù)據(jù)交換(XML-based matadata intercharge,XMI)使用XML的語法,是為程序員和其他用戶提供元數(shù)據(jù)信息交換的標準方法.XMI產(chǎn)生的目的在于幫助使用UML以及不同語言和開發(fā)工具的程序員彼此交換數(shù)據(jù)模型,規(guī)范了如何從UML模型生成XML文檔,實現(xiàn)二者之間的無縫裝換.XMI元素與UML模型的對應(yīng)關(guān)系如表1所示.
表1 UML和XMI元素對應(yīng)表Table 1 Corresponding elements of UML and XMI
SCXML給出了FSM模型的XML文本表示,它是基于呼叫控制擴展標記語言(call control XML,CCXML)和Harel State Tables的執(zhí)行環(huán)境.SCXML提供了通用狀態(tài)機的描述方法,并且可以定義和處理復雜的概念,例如層次性,因此,本工作選用SCXML作為FSM的文本表示方式.SCXML元素與FSM模型的對應(yīng)關(guān)系如表2所示.
表2 FSM和SCXML元素對應(yīng)表Table 2 Corresponding elements of FSM and SCXML
表1和表2是UML模型到FSM模型轉(zhuǎn)換的基礎(chǔ),模型能通過文本的形式得到很好的表達,為后面模型之間的轉(zhuǎn)換做好準備.
模型的生成過程按照以下幾個步驟進行:
(1)使用開源工具ArgoumUML對系統(tǒng)狀態(tài)變化以及場景進行建模,然后導出并保存為XMI格式的文本;
(2)使用已有的方法[7]形式化系統(tǒng)行為狀態(tài)圖,并保存為SCXML格式的文本;
(3)導入使用XMI格式存儲的場景;
(4)解析導入的場景,輸出消息序列,并保存在程序內(nèi)存中;
(5)導入使用SCXML格式表示系統(tǒng)狀態(tài)變化的FSM;
(6)對系統(tǒng)FSM和消息序列進行投影操作,輸出投影后的結(jié)果,使用SCXML格式進行保存.
上述過程包括了對表示UML模型的XMI文本的載入和解析.由于XMI是一種XML語言,層次的查找和分析成為工具原型主要的功能模塊,通過調(diào)用dom4j的API來查找Node以實現(xiàn)解析的目標,解析過程分別如圖6和圖7所示.
圖6 載入XMI文檔界面Fig.6 Loading XMI
圖7 解析后的SCXML文檔界面Fig.7 Result of resolution in the form of SCXML
本工作提出了生成基于場景的形式化測試模型的方法,采用XMI作為UML模型的文本表示語言,采用SCXML作為FSM模型的文本表示語言,通過投影操作完成對系統(tǒng)行為模型的約簡,并得到基于場景的精簡的測試模型.下一步的工作是研究場景本身應(yīng)具備的一些性質(zhì),使得所生成的測試模型具有完備、冗余少的優(yōu)點,并對所得到的測試模型進行可視化研究.
[1] CHOWT.Testing software designs modeled by finite-state machines [J]. IEEE Transactions on Software Engineering,1978,SE-4(3):178-187.
[2] OFFUTTJ,LIUS Y,ABDURAZIKA,et al.Generating test data from state-based specifications[J].Software Testing,Verification&Reliability,2003,13(1):25-53.
[3] ANDREWSA,OFFUTTJ,ALEXANDERR.Testing web applications by modeling with FSMs[J].Software Systems and Modeling,2005,4(3):326-345.
[4] 唐波,廖偉志.統(tǒng)一建模語言狀態(tài)圖的測試用例生成方法[J].計算機仿真,2007,24(8):90-92.
[5] LIX S,LIUZ M,HEJ F.A formal semantics of UML sequence diagram [C]∥ Proceedings of the 2004 Australian Software Engineering Conference.2004:168-177.
[6] SAMUELP,JOSEPHA T.Test sequence generation from UML sequence diagrams[C]∥ Ninth ACIS International Conference on Software Engineering, Artificial Intelligence, Networking, and Parallel/Distributed Computing.2008:879-887.
[7] 郭亮,繆淮扣,王皙,等.UML模型到FSM模型的轉(zhuǎn)換[J].計算機科學,2009(7):113-116,149.
[8] 胡軍,于笑豐,張巖,等.基于場景規(guī)約的構(gòu)件式系統(tǒng)設(shè)計分析與驗證[J].計算機學報,2006,29(4):513-525.