劉宇欣
摘要:近年來(lái),Web服務(wù)測(cè)試得到了越來(lái)越多的關(guān)注。對(duì)Web服務(wù)及SOA(面向服務(wù)架構(gòu))進(jìn)行簡(jiǎn)單介紹,分別從基于WSDL的Web服務(wù)測(cè)試、語(yǔ)義Web服務(wù)測(cè)試和基于形式化方法的Web服務(wù)測(cè)試3個(gè)方面進(jìn)行闡述,并重點(diǎn)研究形式化規(guī)約的四大類方法:基于模型、基于有限狀態(tài)、進(jìn)程代數(shù)和代數(shù)規(guī)約在Web服務(wù)測(cè)試中的應(yīng)用。
關(guān)鍵詞:Web服務(wù)測(cè)試;形式化方法;Web服務(wù)
中圖分類號(hào):TP301
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):16727800(2017)004020804
0引言
近年來(lái),Web服務(wù)由于其自身的自治性、平臺(tái)獨(dú)立性以及服務(wù)技術(shù)的廣泛性,得到了迅速發(fā)展。然而Web服務(wù)并沒有獲得預(yù)期的廣泛市場(chǎng)應(yīng)用,其主要原因是服務(wù)消費(fèi)者和服務(wù)提供者之間存在著信任問題,尤其在服務(wù)動(dòng)態(tài)選擇和使用時(shí),服務(wù)提供者能否為服務(wù)消費(fèi)者提供可靠的Web服務(wù)是一個(gè)關(guān)鍵問題。針對(duì)此類問題,測(cè)試是一種有力的解決途徑,是保證Web服務(wù)功能正確的重要技術(shù)。 與傳統(tǒng)軟件測(cè)試相比,SOA特性使得Web服務(wù)測(cè)試更加困難,從而給測(cè)試帶來(lái)了一些新的挑戰(zhàn)。除了服務(wù)開發(fā)者,其他用戶只能訪問服務(wù)接口,測(cè)試人員無(wú)法獲得服務(wù)代碼等實(shí)現(xiàn)細(xì)節(jié),這使得測(cè)試人員只能根據(jù)服務(wù)提供者發(fā)布的服務(wù)描述文檔進(jìn)行基于規(guī)約的測(cè)試。服務(wù)運(yùn)行架構(gòu)的獨(dú)立性使得測(cè)試人員缺乏對(duì)服務(wù)運(yùn)行時(shí)的控制,組合服務(wù)執(zhí)行中Web服務(wù)的動(dòng)態(tài)性和自適應(yīng)性也使得測(cè)試人員很難離線確定被激活的服務(wù),這些動(dòng)態(tài)特性均要求測(cè)試
人員實(shí)施在線測(cè)試;對(duì)服務(wù)進(jìn)行的大規(guī)模使用和測(cè)試可能導(dǎo)致服務(wù)崩潰進(jìn)而帶來(lái)額外的測(cè)試開銷。另外,構(gòu)成軟件的Web服務(wù)會(huì)不斷更新變化,每次更新后的重新測(cè)試對(duì)于原本已經(jīng)極具挑戰(zhàn)的測(cè)試來(lái)說更是雪上加霜。因此,對(duì)Web服務(wù)測(cè)試技術(shù)進(jìn)行深入的系統(tǒng)性研究非常必要。
1Web服務(wù)和面向服務(wù)架構(gòu)
Web服務(wù)是一種可以通過網(wǎng)絡(luò)來(lái)支持機(jī)器與機(jī)器間互操作的交互軟件系統(tǒng)。Web服務(wù)平臺(tái)所提供的功能是使用預(yù)定義的Web標(biāo)準(zhǔn)為不同的應(yīng)用程序提供其所需的交互。為了確保集成后的模型能夠滿足異構(gòu)系統(tǒng)所需的靈活性,Web服務(wù)的集成模型是松耦合的。 目前主要有兩種類型的Web服務(wù):一種是基于SOAP,另一種是基于REST。二者都是基于SOA,區(qū)別是它們使用的接口不同?;赟OAP的Web服務(wù)使用SOAP接口傳遞消息,并且使用WSDL來(lái)描述Web服務(wù),而使用REST接口的Web服務(wù)則使用通用的HTTP方法(GET、DELETE、POST和PUT)來(lái)描述、發(fā)布和使用相關(guān)資源。 SOA是建立面向服務(wù)軟件的一種策略,其目的是為了提供可以被其它服務(wù)使用的服務(wù)。SOA思想的出現(xiàn)早于Web服務(wù),而Web服務(wù)的出現(xiàn)和使用使得SOA得到了快速發(fā)展。Web服務(wù)的自主性、平臺(tái)獨(dú)立性以及動(dòng)態(tài)發(fā)現(xiàn)和組合等特性為SOA提供了重要的技術(shù)支持。由于Web服務(wù)的使用,現(xiàn)有的系統(tǒng)可以在不知道任何關(guān)于其它計(jì)算機(jī)系統(tǒng)技術(shù)信息的情況下交換信息。面向服務(wù)架構(gòu)如圖1所示。
在SOA中,有3個(gè)主要參與者:服務(wù)提供者、服務(wù)消費(fèi)者和服務(wù)代理商。這3個(gè)參與者分別承擔(dān)了SOA的3種基本活動(dòng):發(fā)布、發(fā)現(xiàn)和綁定。服務(wù)提供者是服務(wù)的擁有者,負(fù)責(zé)解決服務(wù)中出現(xiàn)的問題及服務(wù)的維護(hù),同時(shí)也是服務(wù)演化的唯一控制者。服務(wù)提供者通過在服務(wù)代理商處登記注冊(cè)來(lái)發(fā)布服務(wù)。通常將服務(wù)代理商視作服務(wù)的查詢機(jī)制,通過它可以實(shí)現(xiàn)服務(wù)的發(fā)布和搜索功能。服務(wù)代理商允許用戶查找符合用戶需要的服務(wù),并提供如何獲得這些服務(wù)的信息。服務(wù)消費(fèi)者也是最重要的參與者之一,參與了兩項(xiàng)主要活動(dòng):發(fā)現(xiàn)與綁定。在找到滿足其需求的服務(wù)之后,服務(wù)消費(fèi)者通過使用從服務(wù)代理商處獲得的綁定信息來(lái)調(diào)用相關(guān)服務(wù)。綁定信息包括了服務(wù)的地址、怎樣調(diào)用服務(wù),以及服務(wù)提供哪些功能等。
2Web服務(wù)測(cè)試
Web服務(wù)測(cè)試包括Web服務(wù)的基本功能測(cè)試、服務(wù)交互測(cè)試、服務(wù)質(zhì)量測(cè)試等。Web服務(wù)測(cè)試發(fā)展的歷史分為3個(gè)階段[1]: 第一階段(2002-2003):將Web服務(wù)看作由單元組成,測(cè)試也表現(xiàn)為單元測(cè)試。 第二階段(2003-2005):提出SOA測(cè)試,同時(shí)探討SOA的特性。這一階段的測(cè)試包括發(fā)布、查找、Web服務(wù)綁定功能、異步Web服務(wù)消息傳遞功能和SOA的SOAP中介能力測(cè)試。另外,QoS的測(cè)試也在這一階段中出現(xiàn)。 第三階段(2004-至今):Web服務(wù)動(dòng)態(tài)運(yùn)行時(shí)的能力測(cè)試。Web服務(wù)組合測(cè)試與Web服務(wù)版本測(cè)試均在這一階段出現(xiàn)。 由上述階段可以看出,自2002年開始,面向Web服務(wù)軟件測(cè)試的研究領(lǐng)域發(fā)展迅速,從單個(gè)服務(wù)的靜態(tài)功能測(cè)試發(fā)展到服務(wù)組合的動(dòng)態(tài)運(yùn)行能力測(cè)試。在這一過程中,許多研究者們對(duì)SOA特性進(jìn)行了探討,從WSDL、BPEL、OWL-S的語(yǔ)法定義中以及有限狀態(tài)機(jī)、標(biāo)簽轉(zhuǎn)換系統(tǒng)、語(yǔ)法圖與一階邏輯等形式化模型中研究測(cè)試用例生成技術(shù)[27]。這些技術(shù)解決了Web服務(wù)的特定問題,例如處理無(wú)效輸入以及調(diào)用序列中的錯(cuò)誤、處理網(wǎng)絡(luò)連接中斷或依賴服務(wù)失效引起的錯(cuò)誤等。
2.1基于WSDL的Web服務(wù)測(cè)試
由于服務(wù)提供者僅發(fā)布Web服務(wù)的描述信息而沒有源碼,消費(fèi)者和代理商只可使用黑盒測(cè)試。基于規(guī)約的測(cè)試通過接口文檔來(lái)驗(yàn)證待測(cè)系統(tǒng),如用戶接口描述、設(shè)計(jì)任務(wù)書、需求列表、使用手冊(cè)等。通常,測(cè)試者獲得的關(guān)于Web服務(wù)的信息就是服務(wù)的規(guī)約,如WSDL、OWLS等。大多數(shù)Web服務(wù)發(fā)布都只包含了WSDL文檔,WSDL規(guī)約中包含了服務(wù)提供的操作和參數(shù)的抽象信息。目前已有大量的研究工作圍繞著基于WSDL的Web服務(wù)測(cè)試展開。如:Bai等[8]使用WSDL生成測(cè)試用例,然而該方法并不依賴于輸入消息參數(shù)的類型元素,并且沒有生成形式化模型;Li等[9]結(jié)合WSDL和用戶手冊(cè)提出了一個(gè)Web服務(wù)測(cè)試用例生成方法,介紹了一個(gè)支持這種方法的工具WSTDGen。這個(gè)工具允許用戶定制數(shù)據(jù)類型并為每一個(gè)數(shù)據(jù)類型選擇測(cè)試生成規(guī)則。Wu等[10]從WSDL文檔中生成基于錯(cuò)誤的XML架構(gòu)數(shù)據(jù)類型的測(cè)試數(shù)據(jù)。Ma等[11]提出基于WSDL的測(cè)試數(shù)據(jù)生成方法,為單操作Web服務(wù)產(chǎn)生測(cè)試數(shù)據(jù),并為Web服務(wù)的WSDL規(guī)約中的輸入元素建模。通過模型對(duì)Web服務(wù)的輸入數(shù)據(jù)進(jìn)行拆解,直到數(shù)據(jù)類型足夠簡(jiǎn)單,最后由模型底層的簡(jiǎn)單數(shù)據(jù)類型開始不斷向上層遞歸生成Web服務(wù)的測(cè)試數(shù)據(jù)。但是,該方法只能為單個(gè)操作產(chǎn)生測(cè)試數(shù)據(jù),不可以為多操作生成測(cè)試數(shù)據(jù)。