周子健 劉冬梅
(南京理工大學計算機學院 南京 210094)
Web服務是當今流行的面向服務架構的基礎,Web服務的廣泛應用使得分布式系統(tǒng)更為靈活。而隨著互聯(lián)網技術的急速發(fā)展,單一的Web服務早已不能滿足用戶的需求,Web服務組合技術能將已有的功能單一的服務聚合起來構建功能更強大的服務,因此得以迅速發(fā)展。WS-BPEL(Web Service Business Process Execution Language)[1]是一種為研究機構和企業(yè)所廣泛使用的Web服務組合標準。在組合Web服務的過程中,當開發(fā)者所組合的Web服務數量過多時,其組合過程的設計也會隨之變得復雜,在服務組合的設計中,語法的檢查能由編輯器自動完成,但是設計中存在的邏輯問題(比如死鎖、不可達等問題)編輯器卻無法發(fā)現,這些問題在設計階段不易檢查出來,在運行時可能會造成巨大的損失,因此需要對BPEL所組合Web服務的正確性進行驗證。
本文提出了一種基于Petri網自動化構建BPEL流程的SMV模型的方法,流程的整體步驟如圖1所示,其主要步驟包括兩個部分。
圖1 自動化構建SMV模型的整體流程
1)BPEL映射到Petri網:將從BPEL代碼中生成Petri網模型,此步驟需先解析BPEL文件,對BPEL的樹形結構進行深度遍歷,過濾其中的非活動節(jié)點(如
2)Petri網可達圖提取SMV模型:解析所得的Petri網模型,將Petri網的所有庫所的狀態(tài)當成一個整體狀態(tài),每次變遷發(fā)生Petri網進入下一個狀態(tài),依據此邏輯提取Petri網的可達圖,并依據狀態(tài)遷移的過程構建SMV模型。
為從BPEL中生成對應的Petri網結構,需要建立BPEL活動到Petri網結構的映射規(guī)則,使用庫所、變遷、有向弧及令牌來地描述BPEL中的活動。
2.2.1 統(tǒng)一映射結構
BPEL中的活動主要分為基本活動和結構化活動兩類,基本活動中包括調用伙伴服務的
BPEL活動的統(tǒng)一表示如圖2(a)所示,Act表示一個完整的活動,一個完整的活動包含P1、P2兩個庫所和一個變遷T,P1、P2分別表示一個活動的初始狀態(tài)和活動的結束狀態(tài),T表示一個活動的執(zhí)行。在執(zhí)行過程中,前一活動的結束狀態(tài)作為后一活動的執(zhí)行的初始狀態(tài)。基本活動與結構化活動的差異在于基本活動(
圖2 BPEL活動的統(tǒng)一Petri網結構
2.2.2 含執(zhí)行邏輯的活動的映射
在基本活動中,
圖3 帶執(zhí)行邏輯的活動的BPEL到Petri網的映射
2.2.3 Scope
在BPEL中,
為簡化說明,圖4中只列舉了一個
圖4
當一個
圖5 包含錯誤處理與事件處理的scope活動到Petri網的映射
至此,本文已將絕大多數BPEL的活動到Petri網結構之間建立了映射,由該映射規(guī)則建立的Petri網結構能有效表達其活動執(zhí)行的邏輯順序,并總能保證當給初始庫所傳入一個token時,執(zhí)行完成后整個活動對應的Petri網結構中只有結束庫所中有且僅有一個token。
SMV的有限狀態(tài)模型(FSM)包括定義一個模塊、聲明狀態(tài)變量、定義初始狀態(tài)和狀態(tài)遷移、定義不確定性規(guī)則等幾個部分。SMV形式化模型使用MODULE關鍵字定義模塊;使用關鍵字VAR聲明模型的狀態(tài)變量;使用關鍵字ASSIGN定義系統(tǒng)的初始狀態(tài)和狀態(tài)之間的遷移關系;用集合形式的表達式給出該變量的取值范圍,其變量的定義隨取值范圍存在一定的差別,具體將在3.2小節(jié)的算法中體現。表1中說明可達圖中元素到SMV的語法之間的映射。
表1 可達圖中的元素到SMV模型的映射規(guī)則
自動化構建BPEL流程的SMV模型主要包括兩個部分,將從BPEL中按上文的映射規(guī)則自動化生成Petri網結構和由Petri網的可達圖生成SMV模型。
生成Petri網結構的實現主要分為如下三步。
1)解析BPEL文件,返回特定的圖結構,圖中節(jié)點對應BPEL中的活動;
2)從圖結構的初始節(jié)點其深度優(yōu)先遍歷整個圖結構,對每個活動都按照映射規(guī)則生成Petri網結構,將各個Petri網結構相連接,返回所連接的Petri網結構;
3)根據所返回的Petri網結構生成Petri網。
實現的主要邏輯在∏Traνerse()中,算法的實現如Algorithm1所示。
在該算法中,通過深度優(yōu)先遍歷樹中的節(jié)點,根據節(jié)點名稱遞歸地對節(jié)點按照映射規(guī)則建立對應的Petri網結構,將所得Petri網結構與主體Petri網結構相連接,最終得到完整Petri網。
Petri網到SMV模型的轉化過程的實現首先要使用Petri網工具讀取生成的Petri網文件,并生成可達圖,再由本節(jié)中的算法PN2SMV從可達圖自動地生成SMV模型。
在該算法中,根據Petri網的可達圖文件獲取所有庫所的可能變遷以及所有狀態(tài)下的token數,對每一種狀態(tài)按照可達圖中元素到SMV的語法之間的映射規(guī)則寫入SMV文件即可得到最終的SMV模型,算法的實現如Algorithm 2所示。
本文使用BPEL組合天氣查詢Web服務和飛機航班信息查詢Web服務作為驗證實例。組合這兩個Web服務之后的服務的功能為用戶輸入欲查詢航班的出發(fā)城市、到達城市和出發(fā)日期,該服務將返回用戶到達城市在到達日期的天氣狀況,以提醒用戶更改出行計劃或做好應對相應天氣的準備。其BPEL活動的整體流程如圖6所示,首先接收用戶的輸入,分配用戶的輸入到對應的變量中,然后調用查詢航班信息的Web服務中的get-Domestic City操作,接收獲得所支持的城市列表,再判斷輸入的城市是否支持,不支持則將錯誤信息分配到指定變量用于返回給用戶,支持則并發(fā)調用兩個Web服務查詢相應的天氣和航班信息,同時這兩步操作中可能由于存在時間輸入錯誤(自定義的fault)而獲得特定返回信息,需要進行錯誤處理。此案例中包含
圖6 案例的整體流程
完成BPEL的編寫之后,使用本文實現的工具從BPEL文件中生成Petri網,其中包含28個庫所,40個變遷,經Tina檢查此petri網是有界的,任一遷移都是初始狀態(tài)潛在可引發(fā)的。使用Tina獲得該Petri網的可達圖,經由本文的工具生成SMV模型,該模型包含73種狀態(tài),使用NuSMV對該模型的性質進行檢查。屬性及對應的CTL表達式以及輸入NuSMV之后驗證的結果如圖7所示,所有屬性均通過驗證。以上實驗結果表明本文的工作能夠很好地從BPEL的活動流程自動化提取Petri網模型,并由Petri網的可達圖自動化生成SMV模型供用戶檢驗活動流程的屬性,通過該流程與工具能起到減輕人工操作的繁瑣、節(jié)省BPEL正確性驗證所需的時間與減少人工建模可能產生的差錯等作用。
圖7 案例的屬性驗證結果
目前學術界研究自動化建模與驗證BPEL主要從兩個方面著手,一是直接使用自動機描述BPEL的相關性質,并使用模型檢測工具加以驗證,如R.Nakashiro等[2]構建BPEL到Spin所對應的輸入語言Promela的映射,直接從BPEL自動化生成PROME?LA再 驗 證,Xiang Fu等[3]以 及Zhao Wei等[4]從BPEL中提取自動機再自動化轉為PROMELA使用Spin驗證,該部分研究大多只涉及了BPEL中的基本活動和結構化活動,未能將Scope中的幾個特殊活動(錯誤處理,異常處理等)加以驗證,且部分基于自動機驗證的方法將每個活動作為一個狀態(tài),難以表示活動的并發(fā)過程,未能完全覆蓋BPEL活動的整體流程;二是將BPEL映射到Petri網,基于Pe?tri網驗證BPEL的部分性質,Parimala N等[5~7]分別使用Petri網、層次Petri網和著色Petri網映射BPEL的規(guī)范,對BPEL進行特定屬性的檢查。基于Petri網的驗證方法僅驗證了部分屬性(如有界性、死鎖等),其驗證能力弱于支持LTL或者CTL表達式的模型檢測。
在保證BPEL設計過程的正確性方面的研究,多數使用模型檢測工具進行驗證,如Honghua Cao等[11]提出一種方法,他們先使用UML對BPEL進行可視化地建模,隨后提出了一個將UML活動圖的子集自動轉換為PROMELA的框架,使用模型檢測工具Spin對BPEL的正確性進行驗證,該方法中未能考慮到
對于W.M.P.van der Aalst等的工作[13],使用所實現的工具對文中附錄A.3的BPEL源碼(Execut?able BPEL,整理格式化后840行)進行了轉換,所得到的Petri網模型包含42個庫所和57個變遷,少于文中化簡前的97個庫所90個變遷,多于文中化簡后的26個庫所,27個變遷,但是文中給出的Petri網省略了scope中的庫所與變遷以及所有跳過活動與變遷,實際的Petri網遠比本文工具所得Petri網模型要復雜。
本文從BPEL所組合的服務中自動化地生成對應的Petri網模型,在Petri網中檢查死鎖等可能存在的問題,再由Petri網的可達圖自動化地生成SMV模型,使用模型檢測工具NuSMV檢查模型的安全性和行為屬性,并實現了一個可行的工具,通過案例說明該工具的有效性。
本文提出了一種基于Petri網自動化構建BPEL流程的SMV模型的方法,通過將BPEL活動自動化映射到Petri網,并由Petri網可達圖自動化生成SMV模型,實現了驗證過程的自動化,有效地解決了人工驗證的繁瑣與易出錯的情況,保證了驗證過程的準確性,提高了驗證的效率。本文對Scope中的補償處理尚未進行映射,未來將思考其映射方式。本文中Petri網的可達圖還需借助Tina獲得,自動化過程還需一定的手動操作,未來的工作是在所實現的工具中加入可達圖生成功能,使得整個流程更為連貫。本文也還未對生成的Petri網進一步的化簡以減少SMV模型中狀態(tài)的數量,未來將在一定程度上化簡Petri網,減輕狀態(tài)爆炸的問題。