基于WF State Machine的UML Communication Diagram动态构建及测试
2018-01-03孔令东
摘 要:在基于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”分别存在两个和一个通信变迁。可以看出,在基于State 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-),男,博士,讲师.研究领域:软件工程,工作流技术.