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