黃 龍, 繆淮扣, 王 皙, 郭 亮
(1.上海大學計算機工程與科學學院,上海200072;2.上海市軟件評測重點實驗室,上海201112)
測試是提高軟件可靠性的重要方法,而基于模型的測試是一種高效的測試方法.統一建模語言(unified modeling language,UML)以其操作簡單、易懂和易用的特點,在Web應用開發的建模中得到了廣泛的應用.雖然現在有很多從UML模型直接生成的測試用例的方法,但由于其半形式化的特點,使得UML模型很難直接用于基于模型的自動測試.
有限狀態機(finite state machine,FSM)是一個重要的建模工具,可為軟件設計人員提供一種便利的對軟件功能建模的方法.FSM具有成熟的理論基礎,它利用形式語言和自動機理論來設計和分析模型.目前,已有一些使用FSM建模Web應用的研究[1-3].而基于場景的測試能夠清晰明確地驗證用戶需求,提高測試的效率與質量,具有廣泛的應用前景.
UML是一種面向對象的標準建模語言,已廣泛應用于Web應用建模等領域.從測試用例生成的角度出發,FSM利用其自身的特點在軟件建模、測試和驗證中得到了廣泛的應用.UML在產生測試用例方面已有很多成熟的理論和方法.文獻[4]利用時間擴展UML狀態圖的語義,介紹了時間擴展UML狀態圖的混合時間Petri網模型的構造方法、混合時間Petri網模型測試用例生成方法.文獻[5]給出了順序圖的形式化定義,并將其用于對類圖以及狀態圖一致性的核對,但未將順序圖用于生成形式化測試模型的研究.文獻[6]從UML2.0順序圖中得到與其對應的消息流通圖,并通過遍歷該圖得到相應的測試序列.雖然這些方法可以從UML模型中直接產生測試用例,但是由于沒有形式化推理工具的理論引導,因此,不能提供模型驗證,缺乏嚴格的理論推導和證明.
本工作在已有研究[7]的基礎上,研究了如何使用UML順序圖表示場景,并利用場景來規約使用FSM表示的系統行為模型,從而得到基于場景的形式化測試模型.
有限狀態機(FSM)M通常是一個5元組,M= (Q,Σ,δ,q0,F),其中Q={q0,q1,…,qn}表示非空的有限狀態集,在任一確定的時刻,FSM只能處于一個確定的狀態qi(0≤i≤n);Σ={σ1,σ2,…,σm}表示非空的有限輸入符號集,在任一確定的時刻,FSM只能接收一個確定的輸入σj(1≤j≤m);δ:Q× Σ→Q為狀態遷移函數.如果在某一確定的時刻,FSM處于某一個狀態qi∈Q,并接收一個輸入的字符σj∈Σ,那么,下一時刻將處于一個確定的狀態qj=δ(qi,σj)∈Q;q0∈Q為初始狀態,FSM由此狀態開始接收輸入;F∈Q為終止狀態集合,在達到終態后,FSM不再接收輸入.
所謂場景(scenario),就是描述系統中各相關構件之間如何進行交互,以完成操作的某一個系統功能[8].本工作使用UML順序圖來表示場景.
UML是一種定義良好、易于表達、功能強大且普遍適用的建模語言.順序圖(sequence diagram)是強調消息的時間次序的交互圖,順序圖展示了一組角色和扮演這些角色的實例發送和接收的消息.
圖1為一個簡單的UML順序圖,由3個對象和3條同步消息組成.順序圖著重反映的是一組消息發生的時間的先后次序,其中消息“M1*”中的符號“*”表示該條消息可以重復進行多次(如可以模擬用戶輸入信息的操作),而消息“#”表示該條消息是緊接上一條消息自動進行的內部遷移操作(如用戶點擊另一頁面的鏈接時,由當前頁面進行的跳轉).

圖1 UML順序圖Fig.1 UML sequence diagram
本工作所定義的投影操作,是在描述系統狀態變化的FSM上,根據由順序圖表示的場景進行遍歷得到約簡后的FSM,該FSM只包括場景中所涉及的對象間的遷移.
投影的具體過程如下:①從順序圖中得到對象間進行通信的消息序列;②把得到的消息序列和描述系統狀態變化的FSM中的遷移集合進行交運算;③輸出只包含進行求交運算得到的遷移集合的子FSM,以達到對系統FSM約簡的目的.
本工作通過使用一個網站的郵箱服務來說明如何利用本方法得到基于場景的形式化測試模型.用戶通過點擊一個網站主頁中的郵箱服務,進入登錄界面后輸入用戶信息,并在確認信息后進入個人郵箱進行后續操作.
圖2所示的郵箱服務功能包括從網站主頁選擇鏈接到郵箱登錄界面,輸入用戶信息點擊Submit,在信息得到確認后進入個人郵箱界面,或者點擊Cancel退出到登錄界面.在進入個人郵箱界面后,可選擇進入收件箱等界面進行操作(模型在此省略后續操作).最后點擊Logout退出到登錄頁面.

圖2 郵箱服務系統的FSMFig.2 FSM of E-mail service system
圖3為模擬用戶登錄郵箱后不進行其他操作直接退出郵箱的場景.

圖3 模擬用戶操作的場景Fig.3 Scenario imitating user’s operation
圖4為使用圖2所示的場景和圖3所示的系統FSM進行投影操作后,得到的基于場景的FSM,所生成的測試模型可以用于后期自動產生測試用例.
首先,使用UML狀態圖對系統行為進行建模,并根據文獻[7](主要針對非正交的UML狀態圖)中的方法進行形式化轉換工作;然后,使用UML順序圖對場景進行建模;最后,通過對系統行為的FSM和場景進行投影操作,得到基于場景的形式化測試模型(見圖5).

圖4 投影操作后的FSMFig.4 FSM after projection operation

圖5 形式化測試模型的生成Fig.5 Generation of formal testing model
本工作采用可擴展標記語言(extensible markup language,XML)文本格式來存儲UML模型,用狀態圖擴展標記語言(state chart XML,SCXML)文本格式來存儲FSM模型.
元數據交換(XML-based matadata intercharge,XMI)使用XML的語法,是為程序員和其他用戶提供元數據信息交換的標準方法.XMI產生的目的在于幫助使用UML以及不同語言和開發工具的程序員彼此交換數據模型,規范了如何從UML模型生成XML文檔,實現二者之間的無縫裝換.XMI元素與UML模型的對應關系如表1所示.

表1 UML和XMI元素對應表Table 1 Corresponding elements of UML and XMI
SCXML給出了FSM模型的XML文本表示,它是基于呼叫控制擴展標記語言(call control XML,CCXML)和Harel State Tables的執行環境.SCXML提供了通用狀態機的描述方法,并且可以定義和處理復雜的概念,例如層次性,因此,本工作選用SCXML作為FSM的文本表示方式.SCXML元素與FSM模型的對應關系如表2所示.

表2 FSM和SCXML元素對應表Table 2 Corresponding elements of FSM and SCXML
表1和表2是UML模型到FSM模型轉換的基礎,模型能通過文本的形式得到很好的表達,為后面模型之間的轉換做好準備.
模型的生成過程按照以下幾個步驟進行:
(1)使用開源工具ArgoumUML對系統狀態變化以及場景進行建模,然后導出并保存為XMI格式的文本;
(2)使用已有的方法[7]形式化系統行為狀態圖,并保存為SCXML格式的文本;
(3)導入使用XMI格式存儲的場景;
(4)解析導入的場景,輸出消息序列,并保存在程序內存中;
(5)導入使用SCXML格式表示系統狀態變化的FSM;
(6)對系統FSM和消息序列進行投影操作,輸出投影后的結果,使用SCXML格式進行保存.
上述過程包括了對表示UML模型的XMI文本的載入和解析.由于XMI是一種XML語言,層次的查找和分析成為工具原型主要的功能模塊,通過調用dom4j的API來查找Node以實現解析的目標,解析過程分別如圖6和圖7所示.

圖6 載入XMI文檔界面Fig.6 Loading XMI

圖7 解析后的SCXML文檔界面Fig.7 Result of resolution in the form of SCXML
本工作提出了生成基于場景的形式化測試模型的方法,采用XMI作為UML模型的文本表示語言,采用SCXML作為FSM模型的文本表示語言,通過投影操作完成對系統行為模型的約簡,并得到基于場景的精簡的測試模型.下一步的工作是研究場景本身應具備的一些性質,使得所生成的測試模型具有完備、冗余少的優點,并對所得到的測試模型進行可視化研究.
[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] 唐波,廖偉志.統一建模語言狀態圖的測試用例生成方法[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模型的轉換[J].計算機科學,2009(7):113-116,149.
[8] 胡軍,于笑豐,張巖,等.基于場景規約的構件式系統設計分析與驗證[J].計算機學報,2006,29(4):513-525.