摘 要:在基于UML的業務流程分析與設計過程中,從靜態模型分析到動態模型構建,經過一系列抽象轉換和代碼實現,往往滿足不了業務需求,缺少一種所見即所得的業務過程實現。在探索UML Communication Diagram和WF State Machine業務流程映射關系的基礎上,選取UML用戶指南中典型案例,研究從Communication Diagram到State Machine編程模型之間的靜態映射和動態規則轉換,基于WF可視化地實現了動態構建與測試,解決了從分析、設計到構建的無縫轉換。
關鍵詞:UML;Communication Diagram;WF;State Machine
中圖分類號:TP311.51 文獻標識碼:A
1 引言(Introduction)
UML(Unified Modeling Language)作為標準建模語言,適用于面向對象的業務流程分析與設計,但在具體的開發構建中,經過層層迭代[1,2],存在語義上的不一致和不精確等缺點,不利于進行形式化的分析和驗證。在UML1.x協作圖基礎上改進而來的UML2.0通信圖,強調對象之間結構關系的通信交互,但缺乏對靜態語義和動態語義的可視化編程實現[3-5]。WF(Windows Workflow Foundation)是微軟推出的可視化的工作流編程引擎,基于業務流程邏輯關系和條件,可以無縫的實現UML模型到業務流程工作流轉換。WF提供的State Machine開發模型,由狀態機和狀態對象組成,在狀態變遷的驅動下,可以無縫地實現通信圖對象之間的通信協作[6-8]。因此,探索一種從UML Communication Diagram靜態建模到可視化的動態測試,實現流程建模語義上的一致性和無縫轉換具有實際意義。
本文在探索UML Communication Diagram和WF State Machine業務流程映射關系的基礎上,選取UML用戶指南中典型案例,研究從Communication Diagram到State Machine編程模型之間的靜態映射和動態規則轉換,基于WF可視化地實現了動態構建與測試。
2 映射關系及命名規則(Mapping relationship and naming rule )
2.1 從Communication Diagram到State Machine的映射關系
UML Communication Diagram和WF State Machine在可視化靜態建模上具有一一的映射關系,同時State Machine在可視化的動態規則構建上又具有無縫的編程實現,從組件元素圖形表示和含義上可以自然對應,從而實現無縫的模型轉換,如表1所示,Communication Diagram中的Object(對象)、Link & message(鏈和消息)、Self Communication(自身通信協作)分別同State Machine中的State(狀態)、Transition(變遷)、Self Transition(自身變遷轉換)相對應。Communication Diagram突出Object之間組織關系的通信和協作,在對象之間通過鏈表示兩個對象之間的存在協作關系,通過帶有順序標號的消息箭頭表示對象之間的通信協作轉換;State Machine中state之間通過Transition的有向箭頭,明確表示兩個狀態之間的變遷轉換關系。由此可以看出,兩種模型從符號表示到信息表達,都可以在映射基礎上,保證業務流程從分析到實現的可視化建模一致性,各取所長Communication Diagram側重于業務流程分析與設計,State Machine側重于可視化的動態實現,在隨后的模型構建中我們會詳細描述。
2.2 典型Communication Diagram示例
為深入說明基于State Machine的Communication Diagram動態構建及測試,我們選取了UML用戶指南中的Communication Diagram的典型示例[1],從模型元素的信息表示到規則轉換進行深入的探索。如圖1學校里登記一個新生通信圖示例所示,顯示了四個對象(r、s、sc、c)之間的通信協作關系,圖中典型地包括了Communication Diagram的對象、鏈和消息,以及自身協作的組件元素。通信協作從r登記代理對象創建一個s學生對象開始,把學生加入到sc學校中,然后告訴s去登記,s調用自身的課程計劃,獲取必須注冊的課程對象集合,然后s循環地將自家加入到c課程對象后,完成相關注冊登記后提交到sc對象,最后sc學校向s學生發出成功登記通知。
2.3 命名轉換規則
通信圖表示對象之間的協作關系,通過分析映射關系,狀態機之間可有多條狀態轉換路徑,從而解決對象之間協作的方向問題,通信圖中的對象元素都可以通過WF State Machine中的編程模型來無縫映射,基于此給出了命名轉換的規則。通信圖中的對象映射成State Machine中的狀態對象,對象之間的協作采用CT(CommunicationTransition)命名,如圖1所示的通信圖中“r:RegistrarAgent”等四個對象,對應命名為圖2所示的映射模型中“r:RegistrarAgent_State”等四個State對象,組成一個NewStudentRegister_CommunicationObject_StateMachine。通信圖中的鏈接關系命名為各個Sate之間的Transition,例如圖1中對象r和s之間的協作關系,命名為CT_1表示兩者之間的通信關系;通信對象之間的消息序列和變遷序列對應,在此基礎上每個State對象之間的變遷由變遷的名稱和動作組成,例如圖1中對象r和s之間的通信變遷命名為CT_1:create(),UML通信圖對象之間的協作往往缺失對象之間的交互響應信息,在圖2中對應命名給出,例如CT_1.1_Response(),表示對CT_1協作的第1次響應。這樣的命名規則不僅保證了圖形轉換構建過程中的一致性,也加強了動態的構建和測試,便于分析追溯和擴展。
3 轉換構建(Transition and construction)
3.1 靜態的頂層映射轉換
Communication Diagram描述對象之間的結構關系,依據前面的映射關系和命名規則,首先完成靜態的頂層映射轉換。如圖2所示,基于State Machine的學校登記一個新生頂層映射模型所示,Communication Diagram示例(如圖1)中的“r:RegistrarAgent”“sc:School”“s:Student”“c:Course”等對象被映射成對應的狀態對象“r:RegistrarAgent_State”“sc:School_State”“s:Student_State”“c:Course_State”。Communication Diagram對象之間的鏈和消息被轉換為State之間的轉換,分別以(CT_1、CT_1.1);(CT_2、CT_2.1);(CT_3、CT_3.1 、CT_3.2:、CT_3.2.1;CT_3.3);(CT_3.4、CT_3.4)相互之間的通信協作。狀態對象“r:RegistrarAgent”存在三個發出的通信消息,其中“CT_1:create()”“CT_3:regeister()”是r對象向s對象發出的通信信息,“CT_2:addStudent(s)”是r對象向sc對象發出的通信信息。同理“s:Student_State”狀態存在五個發出的通信信息,“sc:School_State”和“c:Course_State”分別存在兩個和一個通信變遷??梢钥闯觯诨赟tate Machine的學校登記一個新生頂層映射模型中,Communication Diagram的組織對象和消息鏈,無縫地轉換為State Machine可視化模型,實現了靜態模型信息的轉換。但是,通信如何觸發、協作如何交互,規則如何動態變遷,Communication Diagram中都沒有顯式的呈現。因此我們需要借助WF中可視化編程優勢,進一步的構建業務流程狀態變遷。
3.2 動態的規則構建
Communication Diagram中對象之間的通信協作,可以借助WF State Machine可視化的狀態變遷來動態實現。為便于動態規則轉換,如圖3所示,通信協作及控制變量所示,定義了三個變量,分別為ct、register、schedule,其中ct為StateMachine的全局通信轉換變量,并給出了初始值“starting”作用于整個NewStudentRegister_CommunicationObject_StateMachine范圍,同時定義了兩個局部變量,并給出初始值為“true”,作用于“s:Student”對象,用于控制該狀態對象的兩次動態自身轉換的循環控制。
如圖4所示,s:Student狀態對象動態轉換模型所示,“s:Student”對象的通信協作采用Switch多分支判斷模式,在分支判斷中以全局通信變量“ct”為控制條件,將對象之間的消息觸發條件,顯式地配置在各個對應的分支中,可以清晰地看出每一個通信轉換所對應的變遷和消息,這同通信圖中鏈和消息一致對應,觸發對應的分支流程。每個通信變遷中完成協作對象的觸發轉換,如圖5所示,在觸發器啟動的情況下,當通信協作信息“CT_1:create()”到來后,執行“create_Action”動作,創建一個student對象;經過CT_1通信協作轉換,顯式地表明源(Source)狀態對象“r:RegistrarAgent_State”和目標(Detination)狀態對象“s:Student_State”之間的通信協作關系。
4 動態測試(Dynamic testing)
經過基于WF的可視化編程轉換,實現Communication Diagram從靜態的映射到動態規則構建,進一步地完成了動態測試,如圖6所示,基于WF的學校里登記一個新生通信圖動態測試所示,圖中State Machine工作流活動對象“nsr”,進入WF工作流引擎,有序地完成狀態對象之間的通信協作。從測試結果可以清晰的看出組織對象間的交流協作過程,實現了業務流程分析到可視化實現的透明轉換。
5 結論(Conclusion)
在軟件系統分析與設計過程中,語義的一致性和準確性一直都是關注點。探索和研究一種從靜態模型到動態規則轉換的可視化實現方式,具有必要性。將WF State Machine的可視化編程及動態規則轉換優勢應用于Communication Diagram的對象之間的通信協作實現,顯式地將對象之間的交互關系和動態通信協作變遷規則結合,構建基于State Machine的可視化Communication Diagram測試模型,實現了從UML可視化建模到WF可視化映射和測試,解決了從分析、設計到構建的無縫轉換,具有實際意義。
參考文獻(References)
[1] Grady Booch,James Rumbaugh,Ivar Jacobson[美].UML用戶指南[M].北京:人民郵電出版社,2013,1:191-195.
[2] Object Management Group.Unified Modeling Language.Formal[S].OMG,2017.
[3] Alexander Knapp and Till Mossakowski.UML Interactions Meet State Machine—An Institutional Approach[C].7th Conference on Algebra and Coalgebra in Computer Science,2017(15):1-15.
[4] 張姝,戎玫,張廣泉.基于時序邏輯的UML2.0通信圖語義研究[J].計算機工程與設計,2008,29(21):5601-5604.
[5] 張峻,張廣泉,王輝,等.UM L 2.0 通信圖的一種測試用例生成方法[J].蘇 州 大 學 學 報(自然科學版),2007,23(2):36-42.
[6] Microsoft.the programming model,samples,and tools of the Windows Workflow Foundation(WF)[EB/OL].https://docs.microsoft.com/en-us/dotnet/framework/windows-workflow-foundation/index,2017-03-03.
[7] 錢維平,王堅.基于WF狀態機工作流的日常工作管理系統的設計與實現[J].機電產品開發與創新.2015,28(1):81-83.
[8] 馮倩,董麗麗.基WF狀態機工作流的研究與應用[J].電腦知識與技術,2008,4(8):2263-2265.
作者簡介:
孔令東(1973-),男,博士,講師.研究領域:軟件工程,工作流技術.