李曉潔
(西南交通大學(xué) 交通信息工程及控制,成都 610031)
列車自動防護系統(tǒng)是列車控制系統(tǒng)的重要組成部分,對列車安全負有直接責任,因此對其進行全面的功能測試,確保其正確完成系統(tǒng)需求規(guī)范所要求的功能,對高速鐵路建設(shè)具有十分重要的意義。本文主要研究如何將UML自動測試技術(shù)引入到列車自動防護系統(tǒng)的測試中。
列車自動防護(ATP,Automatic Train Protection)系統(tǒng)作為列車自動運行控制系統(tǒng)的重要組成部分,其主要任務(wù)在于保證行車安全、防止列車進入前方列車占用的區(qū)段以及防止列車超速運行。ATP系統(tǒng)屬于安全苛求系統(tǒng),對列車安全負有直接責任,因此,對ATP設(shè)備進行系統(tǒng)功能測試等評估測試工作具有重要意義。
ATP系統(tǒng)屬于大規(guī)模集成系統(tǒng),若采用傳統(tǒng)測試方法對其進行安全評估測試,不但無法保證測試的科學(xué)性與嚴密性,還會因為測試工作的重復(fù)性耗費大量的時間、成本、人力和物力資源。因此,將自動測試技術(shù)引入ATP系統(tǒng)的測試很有必要。基于UML的自動測試技術(shù)是近年來自動測試技術(shù)發(fā)展的主流趨勢,本文以ATP系統(tǒng)的動態(tài)速度監(jiān)控功能為例,采用此方法對ATP系統(tǒng)測試進行分析。ATP系統(tǒng)的動態(tài)速度監(jiān)控用例圖如圖1所示。
圖1 ATP系統(tǒng)的動態(tài)速度監(jiān)控用例圖
在軟件測試過程中,測試用例和數(shù)據(jù)設(shè)計是非常困難和繁重的工作。測試用例的生成方法主要有2種:基于代碼的測試用例生成和基于規(guī)格說明的測試用例生成。
基于代碼的測試用例生成并不適用于大規(guī)模的集成測試和系統(tǒng)測試,ATP車載系統(tǒng)屬于大規(guī)模集成系統(tǒng),在開發(fā)用于ATP系統(tǒng)的測試用例時,本文選擇基于規(guī)格說明的測試用例生成方法。
基于UML的軟件測試的優(yōu)點在于比其它的形式化方法具有更廣泛的適用性。通過將系統(tǒng)需求規(guī)范轉(zhuǎn)換成標準的UML模型,并將其作為測試需求的直接來源,驅(qū)動整個測試過程。基于UML的軟件測試過程如圖2所示。
圖2 基于UML的軟件測試過程
要使UML支持軟件測試,首先需要研究UML模型的可測試性,針對不同類型不同階段的測試,給出嚴格的可測試的UML模型[1]??蓽y性問題實際上就是研究一個UML模型是否包含足夠的信息來產(chǎn)生測試用例的問題。
一個可測試的模型需要滿足的條件有:
(1)模型是對被測系統(tǒng)完整且準確的描述,而且還描述了所需測試的所有功能特性;
(2)模型是對系統(tǒng)細節(jié)的抽象描述;
(3)模型保留了被測系統(tǒng)中有利于發(fā)現(xiàn)錯誤和驗證系統(tǒng)一致性的關(guān)鍵細節(jié);
(4)對狀態(tài)模型而言,模型應(yīng)該描述了所有的動作、狀態(tài)和事件,并且對所有狀態(tài)進行了明確的定義。
UML作為一種半形式化的建模語言,具有高度的靈活性,因此在建模的過程中,只要遵循了UML的語法和語義,并且遵循一定的建模方法,得到的UML模型是可以達到可測試性標準的。
建立了良好可測的UML模型后,就需要進一步研究如何從UML模型生成測試用例,自動測試技術(shù)要求測試用例具有良好的通用性和可移植性,使用XML規(guī)范來對測試用例進行描述滿足上述要求,因此本文采用基于XML的測試用例描述方法。
可擴展標記語言(XML)是一種通用語言規(guī)范,它以一種開放的自我描述方式定義數(shù)據(jù)結(jié)構(gòu),在描述數(shù)據(jù)內(nèi)容的同時能突出對結(jié)構(gòu)的描述,從而體現(xiàn)出數(shù)據(jù)之間的關(guān)系[2]。
測試用例是測試系統(tǒng)與被測系統(tǒng)的交互信息集合,包括輸入序列、期望的系統(tǒng)執(zhí)行操作序列和期望的輸出序列。其本質(zhì)就是一種數(shù)據(jù)對象,因此使用XML描述這種數(shù)據(jù)對象有著相當?shù)膬?yōu)勢。
本文采用一種從UML到XML Schema的3層設(shè)計方法來實現(xiàn)從需求分析的UML模型到XML測試腳本的轉(zhuǎn)化方法。這種3層設(shè)計方法是基于UML類圖實現(xiàn)的[3],其設(shè)計思路如圖3所示。
圖3 從UML生成XML測試腳本的3層設(shè)計方法
該過程可以描述為3個步驟:(1)根據(jù)系統(tǒng)需求規(guī)范,創(chuàng)建所需測試系統(tǒng)的UML圖。在創(chuàng)建過程中,要遵守可測試建模規(guī)則;(2)根據(jù)一系列的轉(zhuǎn)換規(guī)則,將概念層的UML圖轉(zhuǎn)換為使用XML Schema說明的邏輯層UML類圖;(3)根據(jù)邏輯層UML類圖,導(dǎo)出XML Schema文檔[4]。
概念層模型無法直接轉(zhuǎn)換為XML Schema,這是由于概念層模型中的數(shù)據(jù)類型以及類之間的關(guān)系等與XML Schema之間沒有必然關(guān)聯(lián),而且概念層模型中沒有對類的結(jié)構(gòu)從屬和嵌套關(guān)系的定義,所以需要根據(jù)XML Schema定義的構(gòu)造型來構(gòu)建邏輯層的UML類圖[5]。
(1)對UML中定義的符號進行擴展,即用UML類圖表示XML Schema中的概念。UML提供了特有的擴展機制,包括構(gòu)造型、約束和標簽值。在構(gòu)造邏輯層類圖模型時,只用到構(gòu)造型擴展機制,這是由于基于一個已經(jīng)存在的模型元素來定義一種新的模型元素時,構(gòu)造型的信息內(nèi)容和形式與已經(jīng)存在的基本模型元素相同,只是其含義和使用不同。這樣就能使XML Schema中的元素類型嵌入到邏輯層模型中。
(2)需要通過這些擴展過的構(gòu)造型對屬性的數(shù)據(jù)類型進行轉(zhuǎn)化。在邏輯層模型中,有3種適用于描述各種數(shù)據(jù)類型的構(gòu)造數(shù)據(jù)類型:XSDSimpleType、SimpleType和ComplexType,這3種類型分別對應(yīng)于XML模式中的內(nèi)置簡單類型、簡單類型和復(fù)雜類型。其轉(zhuǎn)化規(guī)則如下:
a.屬性中的數(shù)據(jù)類型若是內(nèi)置簡單數(shù)據(jù)類型,則將其直接轉(zhuǎn)化為XSDSimpleType構(gòu)造型,僅在數(shù)據(jù)類型前加上xsd,表示該數(shù)據(jù)類型是邏輯層的內(nèi)置數(shù)據(jù)類型。例如,string可以直接映射為xsd:string。
b.屬性中的數(shù)據(jù)類型若是僅在內(nèi)置簡單數(shù)據(jù)類型上進行了一定限制,如枚舉類型、列表類型和對數(shù)據(jù)的上限下限進行限定等,則將該數(shù)據(jù)類型轉(zhuǎn)換為SimpleType構(gòu)造型。在其中將限制內(nèi)容設(shè)定為屬性和值,并被一個XSDSimpleType約束。
c.屬性中的數(shù)據(jù)類型如果是具體類,則將其轉(zhuǎn)換為ComplexType構(gòu)造型。
(3)要確定類的關(guān)系走向。將類表示成結(jié)構(gòu)化的關(guān)系,即通過類之間的關(guān)系確定類的嵌套關(guān)系。
根據(jù)以上規(guī)則,以列車自動防護系統(tǒng)中動態(tài)曲線生成功能為例,可以構(gòu)造其邏輯層UML類圖,如圖4所示。
圖4 動態(tài)曲線計算的邏輯層UML類圖
物理層測試案例是從邏輯層的模型映射得到的XML Schema,由于在構(gòu)建轉(zhuǎn)換邏輯層模型是已經(jīng)用到了根據(jù)XML Schema定義的構(gòu)造型,所以映射關(guān)系為互相對應(yīng)的,映射方法如下:
表1 結(jié)構(gòu)對應(yīng)關(guān)系:物理模型中的元素、數(shù)據(jù)類型及關(guān)系用邏輯模型表示
表2 文檔包含對應(yīng)關(guān)系:物理模型中的模式文檔包含關(guān)系用邏輯模型表示
表3 內(nèi)容模型及類型對應(yīng)關(guān)系:物理模型中的內(nèi)容模型以及類型用相應(yīng)的邏輯模型表示
根據(jù)以上對應(yīng)關(guān)系,可以寫出圖4的物理層XML Schema文檔,由于篇幅有限,此處僅對其進行部分描述:
type=”xsd:integer” /> type=”xsd:integer” /> type=”xsd:integer” /> 本文對列車自動防護系統(tǒng)測試用例的生成方法進行了描述,以ATP系統(tǒng)動態(tài)速度監(jiān)控功能為例,采用由UML生成XML測試腳本的3層設(shè)計方法,從構(gòu)建測試案例的概念層UML圖開始,使用轉(zhuǎn)換規(guī)則及對應(yīng)關(guān)系,最終生成了測試案例的XML Schema文檔。這種方法基于統(tǒng)一建模語言UML,采用可擴展標記語言XML來對測試案例進行描述。生成的測試文檔具有通用性,有利于自動化測試技術(shù)的展開和發(fā)展。 由于列車控制系統(tǒng)的復(fù)雜性,其自動化測試技術(shù)的實現(xiàn)依然存在諸多難點,在得到了測試用例之后,如何分析其可行性,具體生成實際測試中的測試序列,依然是未來研究的重點。 [1] 徐宏喆,陳建明.UML自動化測試技術(shù)[M] . 西安:西安交通大學(xué)出版社,2006,8. [2] 高怡新.XML基礎(chǔ)教程[M] :北京:人民郵電出版社,2006,11. [3] Routledge N, Bird L, Goodchild A.UML and XML schema[J] . Australian Computer Science Communications, 2002,24(2):157-166. [4] David Carlson,Modeling XML Applications with UMLPractical e-Business Applications[M] .Pearson Education,2001. [5] 王明文,朱清新.基于UML的XML Schema設(shè)計[J] .電子科技大學(xué)學(xué)報,2006,35(3):389-391.4 結(jié)束語