李 源,李 吟,姚海洋
(江蘇自動(dòng)化研究所,江蘇連云港 222061)
海軍服務(wù)化描述語言的靜態(tài)缺陷檢測方法*
李 源,李 吟,姚海洋
(江蘇自動(dòng)化研究所,江蘇連云港 222061)
在海軍面向服務(wù)架構(gòu)的待測系統(tǒng)中,提供多類型的海軍服務(wù)化描述語言(WSDL、SOAP、UDDI和BPEL),而作為服務(wù)對(duì)外提供的描述文件,服務(wù)化描述語言和服務(wù)都需要作為測試對(duì)象進(jìn)行測試和驗(yàn)證。對(duì)此,提出海軍服務(wù)化描述語言的靜態(tài)缺陷檢測框架,首先根據(jù)待測系統(tǒng)服務(wù)描述文檔進(jìn)行結(jié)構(gòu)化和領(lǐng)域知識(shí)的分析驗(yàn)證,檢查設(shè)計(jì)文檔中是否存在不符合語法規(guī)范和領(lǐng)域約束的錯(cuò)誤。隨后基于面向缺陷模式的業(yè)務(wù)流程組合測試實(shí)現(xiàn)在流程設(shè)計(jì)階段發(fā)現(xiàn)流程中潛在的隱蔽錯(cuò)誤。案例表明,該方法能夠有效地檢測出人工注入的多類型靜態(tài)缺陷錯(cuò)誤,并具有相應(yīng)的原型工具支撐,最終幫助用戶高效執(zhí)行靜態(tài)缺陷的檢測,達(dá)到提高軟件質(zhì)量的目的。
海軍服務(wù)化描述語言;靜態(tài)缺陷檢測;領(lǐng)域約束;業(yè)務(wù)流程組合缺陷
自20世紀(jì)80年代末開始,我國國防建設(shè)開始跨入大規(guī)模信息化建設(shè)時(shí)期,軍事電子信息系統(tǒng)組成模式經(jīng)歷了多次變化,信息系統(tǒng)的規(guī)模、作戰(zhàn)范圍、基礎(chǔ)設(shè)施、體系架構(gòu)、互操作能力及組網(wǎng)能力發(fā)生了巨大的變化。隨著裝備技術(shù)體系和國家戰(zhàn)略的發(fā)展、調(diào)整,信息化條件下全軍聯(lián)合作戰(zhàn)將是一體化海陸空潛電綜合防御和島嶼聯(lián)合進(jìn)攻的核心作戰(zhàn)樣式,其中網(wǎng)絡(luò)中心戰(zhàn)(NCW)是信息化聯(lián)合作戰(zhàn)的必然趨勢(shì), 全軍正處于平臺(tái)中心站向網(wǎng)絡(luò)中心戰(zhàn)轉(zhuǎn)型的重要時(shí)期,網(wǎng)絡(luò)中心行動(dòng)(NCO)及軍事信息柵格(MIG)的構(gòu)建迫在眉睫。
面向服務(wù)的體系架構(gòu)(Service Oriented Architecture,SOA)是一種構(gòu)建大型信息系統(tǒng)的結(jié)構(gòu)模型。它將應(yīng)用程序的不同功能單元通過服務(wù)之間定義好的接口契約聯(lián)系起來,通過業(yè)務(wù)流程編排進(jìn)行服務(wù)組合,通過服務(wù)總線進(jìn)行服務(wù)的管理和遠(yuǎn)程調(diào)用,進(jìn)而實(shí)現(xiàn)特定的任務(wù)。面向服務(wù)體系架構(gòu)能夠?qū)崿F(xiàn)作戰(zhàn)能力及信息的高度共享和靈活重組,是網(wǎng)絡(luò)中心戰(zhàn)以及“十二五”、“十三五”信息化建設(shè)的核心技術(shù)支撐,是取得“制信息權(quán)”的重要保障。海軍是海、陸、空、天、潛、電兵種齊全的特殊兵種,海戰(zhàn)場一體化聯(lián)合作戰(zhàn)正引領(lǐng)全軍綜合電子信息系統(tǒng)全面向服務(wù)化技術(shù)體制轉(zhuǎn)型。由于SOA是新一代的軟件架構(gòu)思想,同面向?qū)ο?、模型?qū)動(dòng)設(shè)計(jì)方式的出現(xiàn)一樣,它的系統(tǒng)復(fù)雜性、外部服務(wù)的源代碼不可得等特殊性給軟件開發(fā)、軟件測試帶來了新的挑戰(zhàn)。
隨著Web服務(wù)標(biāo)準(zhǔn)的成熟和應(yīng)用的普及,海軍服務(wù)實(shí)體以此為原型基礎(chǔ),采用基于WSDL、SOAP、UDDI和BPEL系統(tǒng)標(biāo)準(zhǔn)協(xié)議的海軍服務(wù)化描述語言作為服務(wù)對(duì)外提供的描述文件,引入一種新的服務(wù)應(yīng)用的開發(fā)、部署和集成的模式,完成面向服務(wù)體系架構(gòu)的構(gòu)建。為了保證服務(wù)實(shí)體的質(zhì)量,必須對(duì)其進(jìn)行詳盡的測試[1-2]。雖然目前服務(wù)實(shí)體的測試用例自動(dòng)生成的研究已經(jīng)取得了一些進(jìn)展,但是該類研究以服務(wù)作為測試和驗(yàn)證的對(duì)象,缺乏對(duì)服務(wù)描述語言標(biāo)準(zhǔn)協(xié)議及系統(tǒng)規(guī)范的符合性進(jìn)行驗(yàn)證,且沒有考慮海軍業(yè)務(wù)背景下元素間的約束關(guān)系,不能有效地保證服務(wù)對(duì)外提供信息的正確性,難以保障測試的充分性[3]。
本文以服務(wù)實(shí)體的靜態(tài)檢測技術(shù)為背景需求,基于海軍服務(wù)化描述語言系列標(biāo)準(zhǔn)協(xié)議以及服務(wù)實(shí)體和組合流程中可能存在的缺陷入手,集中對(duì)服務(wù)化描述語言的元素結(jié)構(gòu)、取值的正確性進(jìn)行研究,提出面向缺陷模式的BPEL靜態(tài)缺陷檢測方法。同時(shí),基于領(lǐng)域知識(shí)約束關(guān)系描述語言用于驗(yàn)證元數(shù)據(jù)的應(yīng)用領(lǐng)域、數(shù)據(jù)類型、數(shù)據(jù)精度等屬性是否滿足海軍的任務(wù)背景下的數(shù)據(jù)元素的描述和表示要求,并開發(fā)相應(yīng)的自動(dòng)化測試工具,支撐上述測試?yán)碚?為服務(wù)實(shí)體的靜態(tài)測試提供了有力手段,具有十分重要的理論意義和實(shí)用價(jià)值。
作為面向服務(wù)架構(gòu)SOA(Service-Oriented Architecture)的一種實(shí)現(xiàn)技術(shù),Web服務(wù)通過標(biāo)準(zhǔn)的Web協(xié)議提供服務(wù),建立了一個(gè)可互操作的分布式應(yīng)用程序平臺(tái),實(shí)現(xiàn)了基于開放標(biāo)準(zhǔn)、松散耦合和跨平臺(tái)的特性。作為服務(wù)對(duì)外提供的文件,例如WSDL、SOAP、UDDI和BPEL,均為標(biāo)準(zhǔn)的、規(guī)范的XML格式描述的,包含了與服務(wù)交互的全部細(xì)節(jié),包括消息格式(詳細(xì)描述操作)、傳輸協(xié)議和服務(wù)端點(diǎn)位置,為信息的自動(dòng)化處理提供了基礎(chǔ)[4-5]。
1.1 Web服務(wù)描述語言(WSDL)
WSDL(Web Service Description Language)是描述Web服務(wù)的標(biāo)準(zhǔn)XML格式文檔,它能夠準(zhǔn)確描述Web服務(wù)的功能和與Web服務(wù)進(jìn)行通信的具體接口,并且用一種與具體語言無關(guān)的抽象方式定義了相應(yīng)的Web服務(wù)的具體操作、相關(guān)信息和Web服務(wù)的具體服務(wù)地址(物理地址)[6-7],其具體的概念模型如圖1所示。
圖1 服務(wù)實(shí)體描述語言
1.2 簡單對(duì)象訪問協(xié)議(SOAP)
SOAP(Simple Object Access Protocol)是一種輕量級(jí)協(xié)議,是一種基于XML的用于在分布式環(huán)境中進(jìn)行信息交互的協(xié)議。它可以在任何傳輸協(xié)議下使用,如HTTP、TCP、SMTP等,也可以允許任何編程模型,而不依賴RPC[8]。
1.3 統(tǒng)一描述、發(fā)現(xiàn)和集成協(xié)議(UDDI)
UDDI(Universal Description Discovery and Integration)是一個(gè)跨平臺(tái)的開放性架構(gòu),用于描述、發(fā)現(xiàn)和集成相關(guān)的服務(wù),它是基于Internet的電子商務(wù)技術(shù)標(biāo)準(zhǔn),規(guī)定了一些訪問協(xié)議的標(biāo)準(zhǔn)和一組基于服務(wù)的分布式服務(wù)實(shí)體信息注冊(cè)中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范[8]。
1.4 業(yè)務(wù)流程編排語言(BPEL)
BPEL(Business Process Execution Language)是一種可擴(kuò)展標(biāo)記語言的業(yè)務(wù)流程組合語言,使用變量來保存和傳遞流程的狀態(tài)信息,是一種高級(jí)的、抽象的、可執(zhí)行的建模語言。它不僅實(shí)現(xiàn)服務(wù)實(shí)體之間交互的流程編制,也將流程自身暴露為服務(wù)實(shí)體。通過partnerLink、portType和operation確定組合流程需要調(diào)用的外部服務(wù),其中partnerLink執(zhí)行外部的服務(wù)提供者,portType指明該提供者所提供的一個(gè)端口,而operation則指定端口上的服務(wù)名。使用invoke活動(dòng)調(diào)用外部服務(wù),支持異步和同步兩種類型的服務(wù)調(diào)用[9]。
隨著面向服務(wù)架構(gòu)和服務(wù)描述語言規(guī)范的逐步成熟,Web服務(wù)標(biāo)準(zhǔn)協(xié)議(WSDL、SOAP、UDDI)的應(yīng)用也引起了更多的關(guān)注,同時(shí)BPEL業(yè)務(wù)流程規(guī)范也逐步變得復(fù)雜而龐大,這就不可避免地需要充分的測試來保障它的正確性和可靠性。白曉穎等人對(duì)Web服務(wù)測試存在的主要問題進(jìn)行了討論,指出了集成的Web服務(wù)測試應(yīng)該通過靜態(tài)驗(yàn)證和動(dòng)態(tài)虛擬執(zhí)行的方法進(jìn)行正確性驗(yàn)證[10]。在動(dòng)態(tài)測試方面存在大量的研究成果,Tsai、白曉穎等人提出了基于WSDL規(guī)約的方法進(jìn)行黑盒測試[11-12],隨后西北工業(yè)大學(xué)馬春燕等人提出了基于形式化樹模型指導(dǎo)測試用例的生成[13]。北京大學(xué)姜瑛等人則結(jié)合合約變異技術(shù)完成基于WSDL文檔測試用例的約簡[14]。在靜態(tài)測試方面,宮云戰(zhàn)提出了一種面向故障的軟件測試方法,將測試的對(duì)象,從整個(gè)軟件轉(zhuǎn)向了故障模型[15]。楊朝紅進(jìn)一步給出了面向故障的軟件測試需要的測試過程,需要從源代碼的輸入?yún)?shù)開始,經(jīng)歷預(yù)編譯、詞法分析、語法分析與語義處理、抽象語法樹生成、控制流圖生成和缺陷可疑點(diǎn)掃描等,最后自動(dòng)生成IP報(bào)表[16]。肖慶在面向故障的軟件測試技術(shù)中引入了有限狀態(tài)機(jī),采用故障描述狀態(tài)機(jī)來描述故障模型,以一種常用和易于理解的抽象形式給出了故障的狀態(tài)和狀態(tài)間的轉(zhuǎn)換條件,并對(duì)缺陷模式進(jìn)行歸納和分析,實(shí)現(xiàn)了基于源代碼的高效測試[17]。
從上述研究現(xiàn)狀來看,目前關(guān)于獨(dú)立Web服務(wù)的動(dòng)態(tài)測試研究比較完善,而針對(duì)服務(wù)的靜態(tài)驗(yàn)證,雖然存在一些基于源代碼的靜態(tài)缺陷檢測技術(shù),但是考慮到Web服務(wù)對(duì)外僅提供服務(wù)描述的標(biāo)準(zhǔn)系列協(xié)議,現(xiàn)有的靜態(tài)缺陷檢測技術(shù)存在明顯的不足,無法適用于Web服務(wù)的描述文件的靜態(tài)測試中。本文結(jié)合上述Web服務(wù)系列協(xié)議規(guī)范,針對(duì)服務(wù)描述文件與業(yè)務(wù)流程組合文件的特點(diǎn),分別采用XML Schema規(guī)范和海軍領(lǐng)域約束模型驗(yàn)證海軍服務(wù)化系列協(xié)議(WSDL、SOAP、UDDI、BPEL)的正確性及基于缺陷模式匹配的業(yè)務(wù)流程組合(BPEL)的靜態(tài)檢測。
軟件測試的主要目的在于發(fā)現(xiàn)軟件存在的錯(cuò)誤(BUG),靜態(tài)測試方法的優(yōu)劣取決于針對(duì)測試對(duì)象是否有較好的缺陷模式,缺陷模式和具體的檢測語言相關(guān),不同的檢測語言應(yīng)設(shè)計(jì)不同的缺陷模式庫。本文參考文獻(xiàn)[18]中提到的對(duì)傳統(tǒng)的程序語言設(shè)計(jì)相應(yīng)的缺陷檢測系統(tǒng),軟件缺陷模式庫中存儲(chǔ)的缺陷屬性需要包含缺陷標(biāo)識(shí)、缺陷類型、缺陷嚴(yán)重程度、缺陷優(yōu)先級(jí)、缺陷來源及缺陷原因等。根據(jù)海軍服務(wù)化系列描述的特點(diǎn)與區(qū)別,設(shè)計(jì)該協(xié)議對(duì)應(yīng)的缺陷模式。結(jié)合海軍服務(wù)描述協(xié)議的特點(diǎn),首先需要根據(jù)標(biāo)準(zhǔn)協(xié)議規(guī)范進(jìn)行協(xié)議的結(jié)構(gòu)性測試,檢測描述文件是否能夠符合協(xié)議的規(guī)范。除此之外,考慮到BPEL的特殊語法,使其具有其獨(dú)特的故障類型,如消息類型不匹配、死路徑、數(shù)據(jù)競爭、死鎖、link非法使用等,因此需要單獨(dú)歸納典型的BPEL的語義缺陷。
2.1 服務(wù)文件靜態(tài)缺陷模式檢測
待檢測的服務(wù)實(shí)體對(duì)外提供的描述文件(WSDL、SOAP、UDDI、BPEL)均為滿足W3C系統(tǒng)規(guī)范的XML文檔。W3C規(guī)范給出了相關(guān)的靜態(tài)分析要求,包含XML格式的結(jié)構(gòu)化規(guī)范以及符合每種描述語言特點(diǎn)的模式規(guī)范,采納這些語言規(guī)范,進(jìn)行缺陷模式的總結(jié),并進(jìn)行鑒別和篩選,定義圖2所示的缺陷規(guī)范類別。
圖2 靜態(tài)缺陷檢測規(guī)范
根據(jù)上圖歸納規(guī)范,設(shè)計(jì)出51種缺陷模式,具體如表1所示。
表1 靜態(tài)分析結(jié)果統(tǒng)計(jì)
2.2 業(yè)務(wù)流程組合缺陷模式檢測
由于BPEL本身的特性,如BPEL規(guī)范定義了許多稱為活動(dòng)(activity)的元素來執(zhí)行不同的任務(wù),可以分為基本活動(dòng)(BasicActivitieS)和結(jié)構(gòu)化活動(dòng)(strueturedActivitieS)兩大類,依次構(gòu)建出復(fù)雜的可執(zhí)行流程,可執(zhí)行流程是一個(gè)完整的可運(yùn)行的流程,包括了外部視圖和復(fù)雜的內(nèi)部邏輯。因此除了根據(jù)BPEL規(guī)范進(jìn)行結(jié)構(gòu)化檢測之外,還需要考慮其獨(dú)特的故障類型。為了便于查找相應(yīng)的故障,提高流程的可靠性和正確性,首先需要對(duì)具有一定模式的被檢測故障進(jìn)行定義,然后采用狀態(tài)機(jī)進(jìn)行統(tǒng)一建模,以便根據(jù)狀態(tài)機(jī)理論進(jìn)行故障檢測。
圖3是一個(gè)具體的BPEL流程的實(shí)際案例,復(fù)雜變量根據(jù)流程分支的不同產(chǎn)生不同的賦值情形,其中,假分支導(dǎo)致的賦值結(jié)果會(huì)引起變量未賦值的錯(cuò)誤,產(chǎn)生變量未初始化的缺陷。由于此類缺陷存在隱蔽性,因此很難在設(shè)計(jì)階段發(fā)現(xiàn)。而這種在軟件運(yùn)行時(shí)才能夠發(fā)生的故障,如死循環(huán)、路徑不可達(dá)等,會(huì)嚴(yán)重影響軟件的可靠性,因此需要對(duì)流程部署的文件進(jìn)行詳盡的靜態(tài)缺陷檢測。本文基于文獻(xiàn)[18]列舉的典型缺陷模式,構(gòu)建業(yè)務(wù)流程編排缺陷庫,具體為:未初始化變量、變量、遍歷子屬性定位失敗、死鎖、死循環(huán)、數(shù)據(jù)競爭、循環(huán)完成條件沖突、link非法使用、路徑不可達(dá)、分支活動(dòng)相同等。
如果BPEL文件流程中存在上述缺陷,會(huì)嚴(yán)重影響服務(wù)組合的可靠性,引起業(yè)務(wù)流程運(yùn)行異常,甚至產(chǎn)生中斷。同時(shí),此類缺陷往往不易發(fā)現(xiàn),且很難對(duì)此設(shè)計(jì)單獨(dú)的動(dòng)態(tài)測試用例,因此需要根據(jù)現(xiàn)有的缺陷模式,在軟件動(dòng)態(tài)執(zhí)行前進(jìn)行靜態(tài)的缺陷檢測。
圖3 未初始化變量流程實(shí)例
根據(jù)以上缺陷模式,可基于模式匹配方法完成靜態(tài)缺陷檢測流程。本文根據(jù)服務(wù)系列協(xié)議的特點(diǎn),將該流程分為兩個(gè)部分,如圖4所示。
圖4 缺陷檢測工作流
首先,根據(jù)XML語法及W3C定義的服務(wù)系統(tǒng)協(xié)議標(biāo)準(zhǔn),基于結(jié)構(gòu)化的特征,進(jìn)行海軍服務(wù)化描述語言的結(jié)構(gòu)檢測;其次,根據(jù)業(yè)務(wù)流程組合的缺陷行為缺陷,模擬缺陷的多類可能情況,基于面向缺陷的模式匹配,以捕獲BPEL流程中的缺陷行為。
3.1 服務(wù)文件靜態(tài)缺陷模式檢測流程
如圖4左邊流程所示,服務(wù)文件的靜態(tài)缺陷檢測分為如下幾個(gè)步驟:
1)XML文檔結(jié)構(gòu)解析:將海軍服務(wù)化描述語言中的標(biāo)簽元素映射為對(duì)象及其屬性,從而構(gòu)造出面向?qū)ο蟮腄OM樹;
2)核心建模:DOM樹完成了海軍服務(wù)化描述語言文件的XML標(biāo)簽樹狀表示,針對(duì)服務(wù)描述文件進(jìn)行靜態(tài)缺陷檢測,仍需建立基于缺陷庫的模式匹配模型,并以此進(jìn)行檢測。同時(shí),海軍服務(wù)化描述語言包含了海軍的領(lǐng)域信息,因此需要根據(jù)擴(kuò)展的海軍領(lǐng)域模型進(jìn)行領(lǐng)域知識(shí)的驗(yàn)證;
3)缺陷模式匹配:基于缺陷模式庫選取DOM樹中節(jié)點(diǎn)進(jìn)行一一遍歷;
4)測試執(zhí)行:整個(gè)測試過程基于核心建模和模式匹配進(jìn)行,通過模式匹配加載建立的缺陷模式模型,建立缺陷模式庫,然后依次根據(jù)模式庫中缺陷描述匹配DOM樹中的標(biāo)簽元素,驗(yàn)證其正確性、一致性和完整性,并上報(bào)存在的錯(cuò)誤,直到DOM樹中標(biāo)簽元素遍歷完全;
5)測試結(jié)果:當(dāng)缺陷檢測執(zhí)行完畢,上報(bào)服務(wù)描述文件存在錯(cuò)誤的行號(hào)、對(duì)應(yīng)錯(cuò)誤類別、嚴(yán)重級(jí)別、相應(yīng)的改進(jìn)方案,整個(gè)測試過程結(jié)束。
3.2 業(yè)務(wù)流程組合缺陷模式檢測流程
如圖4右邊流程所示,當(dāng)服務(wù)描述文件的基本靜態(tài)缺陷檢測完成后,仍需針對(duì)BPEL文件的特殊語法,展開業(yè)務(wù)流程的正確性檢測,分為如下幾個(gè)步驟:
1)預(yù)處理:分析業(yè)務(wù)流程編排文檔,通過DOM樹讀入XML文件后,將在存儲(chǔ)器中建立一個(gè)文件結(jié)構(gòu)樹(Document Structural Tree),識(shí)別BPEL中的各種活動(dòng),及其活動(dòng)間的嵌套和跳轉(zhuǎn)關(guān)系;
2)核心建模:對(duì)BPEL解析獲得的元素進(jìn)行分析處理,首先,根據(jù)DOM樹產(chǎn)生的文件結(jié)構(gòu)樹從而產(chǎn)生標(biāo)簽關(guān)系圖,之后結(jié)合BPEL規(guī)范及標(biāo)簽關(guān)系圖中的消息產(chǎn)生控制流程圖,最后使用擴(kuò)展的有限狀態(tài)機(jī)模型構(gòu)建缺陷模式庫;
3)測試執(zhí)行:基于上一步驟構(gòu)建的模型,通過模式匹配加載相應(yīng)的缺陷模式描述文件,并依據(jù)有限狀態(tài)機(jī)模型創(chuàng)建狀態(tài)機(jī)實(shí)例,之后遍歷有限狀態(tài)機(jī)模型中的狀態(tài),調(diào)用Web服務(wù)中的響應(yīng)函數(shù)完成狀態(tài)的遷移,當(dāng)狀態(tài)機(jī)進(jìn)入故障狀態(tài)后,在故障模式庫中匹配該故障,并上報(bào)錯(cuò)誤,否則繼續(xù)執(zhí)行狀態(tài)機(jī)模型,直到系統(tǒng)狀態(tài)遍歷結(jié)束;
4)測試結(jié)果:當(dāng)缺陷檢測執(zhí)行完畢,上報(bào)服務(wù)描述文件存在錯(cuò)誤的行號(hào)、對(duì)應(yīng)錯(cuò)誤類別、嚴(yán)重級(jí)別、相應(yīng)的改進(jìn)方案,整個(gè)測試過程結(jié)束。
4.1 服務(wù)描述文件靜態(tài)缺陷檢測機(jī)制
服務(wù)描述文件靜態(tài)缺陷檢測包含結(jié)構(gòu)級(jí)檢測和海軍領(lǐng)域數(shù)據(jù)約束檢測兩方面。其中,結(jié)構(gòu)級(jí)檢測主要是檢驗(yàn)描述文件是否符合XML及WSDL/SOAP/UDDI/BPEL規(guī)范。本文提供如下3中缺陷檢測機(jī)制:
1)基于XML schema模式文件的通用檢測方法;
2) 擴(kuò)展wsdl4j包的WSDL文件針對(duì)性檢測方法;
3)基于org.eclipse.bpel.validator包的BPEL文件針對(duì)性檢驗(yàn),改進(jìn)BPEL designer。
同時(shí),本文提供基于海軍領(lǐng)域語義描述的領(lǐng)域知識(shí)檢測。海軍服務(wù)化描述語言描述的服務(wù)實(shí)體的輸入/輸出參數(shù)、環(huán)境變量以及系統(tǒng)狀態(tài)參數(shù)等數(shù)據(jù)中含有大量的海軍領(lǐng)域知識(shí)信息。例如在描述數(shù)據(jù)資源的秘密等級(jí)及相關(guān)內(nèi)容時(shí),“密級(jí)”的取值范圍為“非密、秘密、機(jī)密和絕密”。當(dāng)描述數(shù)據(jù)資源的物理特征時(shí),如存儲(chǔ)類型、存儲(chǔ)環(huán)境等,“資源存儲(chǔ)類型”的取值范圍為“0代表結(jié)構(gòu)化,1代表非結(jié)構(gòu)化”,它們必須是取自特定集合中的元素,而非簡單的字符串定義。正確使用這些數(shù)據(jù),不僅需要引用格式正確,更需要對(duì)數(shù)據(jù)庫予以正確的理解。因此,本文在缺陷庫中加入了海軍領(lǐng)域知識(shí)缺陷,滿足海軍領(lǐng)域數(shù)據(jù)約束檢測的需求。
檢測算法從服務(wù)描述文件形成的DOM樹的根節(jié)點(diǎn)開始,逐個(gè)遍歷各個(gè)子元素,并與缺陷庫進(jìn)行比較,如果發(fā)現(xiàn)錯(cuò)誤,則上報(bào)缺陷信息,如算法1所示。
算法1 靜態(tài)缺陷檢測算法
輸入:WSDL/SOAP/UDDI/BPEL標(biāo)準(zhǔn)協(xié)議文件,缺陷模式集合DefectData;
輸出:缺陷數(shù)據(jù)集DefectResult.
Begin
DefectResult=?;∥初始化DefectResult
DomTree(WSDL);∥以WSDL為例,生成DOMTree
For each node ‘m’ in DomTree∥遍歷Dom樹中每一個(gè)根節(jié)點(diǎn)
DefectData=Import(Defect-DB);∥導(dǎo)入缺陷模式數(shù)據(jù)庫
While(每一個(gè)缺陷模式i)
if(m. DefectStructureMatch(i)==TRUE)∥若根節(jié)點(diǎn)匹配庫中結(jié)構(gòu)缺陷
CallDefect(m,i);∥上報(bào)結(jié)構(gòu)缺陷,記錄m行數(shù)
DefectResult.ADD(m,i);∥將缺陷加入缺陷數(shù)據(jù)集
elseif(m.DefectDomainMatch(i)==TRUE)∥若根節(jié)點(diǎn)匹配庫中領(lǐng)域缺陷
CallDefect(m,i);∥上報(bào)領(lǐng)域缺陷,記錄m行數(shù)
DefectResult.ADD(m,i);∥將缺陷加入缺陷數(shù)據(jù)集
else
遍歷下一個(gè)缺陷模式
End while
End for
End
4.2 業(yè)務(wù)流程編排算法
與服務(wù)描述文件缺陷檢測不同,業(yè)務(wù)流程編排需要進(jìn)行服務(wù)狀態(tài)變遷的檢測,因此需要單獨(dú)建立缺陷模型。本文采用擴(kuò)展的有限狀態(tài)機(jī)描述BPEL存在的活動(dòng)關(guān)聯(lián),依據(jù)EFSM模型中的狀態(tài)轉(zhuǎn)換來描述BPEL文件中活動(dòng)間的交互行為,以輔助缺陷模式庫的生成。EFSM缺陷狀態(tài)模型定義如下:
定義1 (EFSM的缺陷狀態(tài)模型):它是一個(gè)三元祖(Q,T,C),其中:
?Q是一個(gè)有窮集合,叫作狀態(tài)集,Q={start,error,end}∪other,其中start、error和end分別代表開始、錯(cuò)誤和結(jié)束狀態(tài),other代表其它的可能狀態(tài);
? C是狀態(tài)的條件集,代表狀態(tài)間的偏移條件。
基于上述的EFSM模型,沿著狀態(tài)機(jī)的狀態(tài)變遷執(zhí)行BPEL程序的分析,依據(jù)文獻(xiàn)[19]提出的缺陷狀態(tài)機(jī)計(jì)算方法,進(jìn)行BPEL缺陷分析,缺陷檢測算法如下所示:
算法2 業(yè)務(wù)流程組合缺陷檢測算法
輸入:BPEL 控制流程圖BPEL-Graph;
輸出:缺陷數(shù)據(jù)集DefectResult.
Begin
For each node ‘n’ in BPEL-Graph∥遍歷控制流程圖中每一個(gè)節(jié)點(diǎn)
ExcutePreNode(n);∥執(zhí)行節(jié)點(diǎn)n的前序?qū)嵗?/p>
While(每一個(gè)n節(jié)點(diǎn)的狀態(tài)機(jī)實(shí)例i)
n.instance[i].Q=start;∥設(shè)置實(shí)例狀態(tài)為開始
ExcuteNode(n);∥執(zhí)行當(dāng)前節(jié)點(diǎn)實(shí)例
if(n. instance[i].Q==error)∥狀態(tài)遷移
錯(cuò)誤狀態(tài)
CallDefect(n.instance[i]);∥上報(bào)業(yè)務(wù)流程缺陷
elseif(n. instance[i].Q==end)∥狀態(tài)遷移到結(jié)束狀態(tài)
Destroy(n.instance[i]);∥銷毀實(shí)例信息
else
i=i+1;∥進(jìn)入下一個(gè)狀態(tài)實(shí)例
End While
ExcuteAfterNode(n);∥執(zhí)行節(jié)點(diǎn)n的后序?qū)嵗?/p>
End for
End
5.1 缺陷檢測原型系統(tǒng)
結(jié)合之前的Web服務(wù)測試用例集生成的相關(guān)工作,本文研制了面向服務(wù)測試用例自動(dòng)生成原型系統(tǒng)SOATest。本工具支持服務(wù)實(shí)體的功能測試和性能測試,具體功能包括測試用例的生成和管理、測試的執(zhí)行,以及測試結(jié)果的收集和報(bào)表生成。工具支持服務(wù)描述文件的靜態(tài)缺陷檢測,測試系統(tǒng)的體系結(jié)構(gòu)如圖5所示。
圖5 面向服務(wù)系統(tǒng)測試原型系統(tǒng)體系結(jié)構(gòu)
運(yùn)用工具SOATest的靜態(tài)缺陷檢測模塊可以進(jìn)行海軍服務(wù)化描述語言的靜態(tài)缺陷檢測,本系統(tǒng)可以根據(jù)服務(wù)實(shí)體描述文件標(biāo)準(zhǔn)協(xié)議展開結(jié)構(gòu)性檢測,并依據(jù)海軍領(lǐng)域規(guī)則進(jìn)行領(lǐng)域知識(shí)驗(yàn)證,基于缺陷模式完成業(yè)務(wù)流程編排的缺陷檢測,并以此定位缺陷代碼行數(shù)及缺陷類型,指導(dǎo)測試人員進(jìn)行相應(yīng)的修改,系統(tǒng)執(zhí)行界面如圖6-8所示。
圖6 靜態(tài)缺陷規(guī)則選擇界面
圖7 靜態(tài)缺陷檢測結(jié)果界面
圖8 領(lǐng)域約束編輯界面
5.2 應(yīng)用實(shí)例分析
本文選取某型號(hào)海軍綜合電子信息系統(tǒng)作為待測對(duì)象,采用人工注入故障的方式來驗(yàn)證靜態(tài)缺陷檢測技術(shù)及系統(tǒng)原型工具的有效性,根據(jù)支持的故障類型,分別為WSDL文檔注入16類故障,SOAP文檔注入4類故障、UDDI文檔注入6類故障,BPEL文檔注入25類故障,共120個(gè)。此外,為了驗(yàn)證BPEL業(yè)務(wù)流程組合部分缺陷模式,在實(shí)驗(yàn)過程中還用了故注入的方式注入如下故障:3個(gè)未初始化變量缺陷、1個(gè)數(shù)據(jù)競爭缺陷、1個(gè)link非法使用缺陷、1個(gè)分支活動(dòng)相同缺陷。之后根據(jù)獲取的靜態(tài)錯(cuò)誤結(jié)果進(jìn)行統(tǒng)計(jì)分析,獲取如下表2所示的靜態(tài)分析結(jié)果。
表2 靜態(tài)缺陷檢測結(jié)果
通過上述表格可以發(fā)現(xiàn),注入文檔中的靜態(tài)缺陷故障均被查出,證明了本文提出的靜態(tài)缺陷檢測方法及系統(tǒng)原型工具的有效性。
在海軍面向服務(wù)待測系統(tǒng)中,存在多類提供的海軍服務(wù)化描述語言(WSDL、SOAP、UDDI和BPEL),而作為服務(wù)對(duì)外提供的描述文件,服務(wù)化描述語言和服務(wù)都需要作為測試對(duì)象進(jìn)行測試和驗(yàn)證。本文提出了海軍服務(wù)化描述語言的靜態(tài)缺陷檢測框架,首先,檢查服務(wù)描述文檔中是否有不符合語法規(guī)范的錯(cuò)誤,是否存在標(biāo)簽信息缺失等靜態(tài)缺陷。之后對(duì)BPEL文檔在服務(wù)組合實(shí)際運(yùn)行前對(duì)流程進(jìn)行檢測,盡可能在流程設(shè)計(jì)階段發(fā)現(xiàn)流程中可能存在的缺陷,減少系統(tǒng)部署后的維護(hù)費(fèi)用,提供流程可靠性。
在后期的工作中,我們將針對(duì)服務(wù)的特點(diǎn),向靜態(tài)缺陷模式庫添加更多經(jīng)驗(yàn)缺陷及更復(fù)雜的業(yè)務(wù)流程缺陷,并進(jìn)一步提高缺陷檢測的精度。
[1] Hong Mei, Lu Zhang. A framework for Testing Web Services and its Supporting Tool[C]∥IEEE International Workshop on Service-Oriented System Engineering. Washington: IEEE Computer Society, 2005:199-206.
[2] R. Heckel, L. Mariani. Automatic Conformance Testing of Web Services [J].FASE2005, LNCS 3442, 2005: 34-48.
[3] 馬春燕,朱怡安,陸偉.Web服務(wù)自動(dòng)化測試技術(shù)[J].計(jì)算機(jī)科學(xué),2012,39(2):162-169.
[4] 許蕾,李言輝,陳林,等.一種面向用戶需求的Web服務(wù)測試方法[J].計(jì)算機(jī)學(xué)報(bào),2014,37(3):512-521.
[5] Elia I A, Laranjeiro N, Vieira M. A Practical Approach towards Automatic Testing of Web Services Interoperability[J]. International Journal of Web Services Research, 2015.
[6] He H. What is Service-Oriented Architecture?[EB] http:∥webservices.xml.com/pub/a/ws/2003/09/30/soa.html.Sep.2003.
[7] Canfora G, Di Penta M. Testing services and service-centric systems:challenges and opportunities [J].IT Professional,2006, 8(2):10-17.
[8] W3C,Web Services Description Language(WSDL) Version 2.0[EB]∥W3C Recom-mendation,26 June 2007,http:∥www.w3.org/TR/2007/REC-wsdl20-primer-20070626.
[9] Li Zhong Jie,Sun Wei,Jiang Zhong-Bo,Zhang Xin.BPEL4WS unit testing:framework and implementation[C]∥Proceedings of the 2005 IEEE International Conference on Web Services(ICWS’05).Orlando,USA,2005:103-110.
[10]白曉穎,趙沖沖,戴桂蘭.Web服務(wù)測試研究[J].計(jì)算機(jī)科學(xué),2006,33(2):252-255.
[11]W. T. Tsai, R. Paul, Y. Wang, C. Fan, D. Wang, Extending WSDL to Facilitate Web Services Testing[C]∥Proceeding of IEEE HASE, 2002: 171-172.
[12]Bai XY, Dong WL, Tsai WT, et al. WSDL-Based automatic test case generation for Web services testing[C]∥Proceedings of the 2005 IEEE International Workshop on Service-Oriented System Engineering(SOSE’05),Washington: IEEE Computer Society,2005:207-212.
[13]Ma CY, Du CL, Zhang T, et al, WSDL-Based automated test case generation for Web service[C]∥Proceeding of the Computer Science and Software Engineering. Washington: IEEE Computer Society,2008.731-737.
[14]姜瑛,辛國茂,單錦輝,等.一種Web服務(wù)的測試數(shù)據(jù)自動(dòng)生成方法[J].計(jì)算機(jī)學(xué)報(bào),2005,28(4):568-577.
[15]宮云戰(zhàn).一種面向故障的軟件測試新方法[J].裝甲兵工程學(xué)院學(xué)報(bào),2004,18(1):21-25.
[16]楊朝紅,宮云戰(zhàn),肖慶,等.基于模型的軟件測試[J].北京化工大學(xué)學(xué)報(bào)(自然科學(xué)版),2007,34(21):85-88.
[17]肖慶,楊朝紅,畢學(xué)軍.一種基于故障模式狀態(tài)機(jī)的測試方法[J].北京化工大學(xué)學(xué)報(bào)(自然科學(xué)版),2007,34(21):73-76.
[18]葉可可.BPEL-缺陷測試系統(tǒng)的設(shè)讓和實(shí)現(xiàn)[D].北京:北京郵電大學(xué),2011.
[19]楊學(xué)紅. BPEL流程的故障模式及其靜態(tài)分析技術(shù)的研究[D].北京:北京郵電大學(xué),2011.
Static Defect Detecting on Navy Service Description Language
LI Yuan, LI Yin, YAO Hai-Yang
(Jiangsu Automation Research Institute of CSIC, Lianyungang 222061, China)
In the naval service oriented system to be detected, there are multi types of Navy service description language (WSDL, SOAP, UDDI and BPEL). Provided as a foreign service description documents, service description language and service needed as the test object is tested and verified. In this paper, we present static defect detection framework for naval service description language. First of all, according to the measured system service description document structured and domain knowledge analysis and verification, check the design document whether there does not conform to the errors in grammar and domain constraints. Then the business process combination test based on the defect mode is realized in the process of the process design. The case shows that this method can effectively detect the error of the multiple types of artificial injection, and has the corresponding prototype tool support,eventually reach requirements to improve the quality of software.Key words:navy service description language; static defect detecting; domain constraint; business process composite defects
2010-08-10
“十二五”總裝預(yù)研課題(513150502)
李 源(1983-),男,遼寧本溪人,碩士,工程師,研究方向?yàn)橹富鹂叵到y(tǒng)。 李 吟(1988-),男,碩士,工程師。 姚海洋(1985-),男,工程師。
1673-3819(2017)01-0122-08
TP206+.34;E917
A
10.3969/j.issn.1673-3819.2017.01.026
修回日期: 2010-08-22