文浩,蒋建民,张仕,洪中
摘 要:在模型驱动开发过程中,为了减轻开发人员的负担,通常采用自动工具生成代码框架。本文提出了一种基于活动图与顺序图自动生成代码框架的方法,并且基于该方法开发了原型工具。首先,给出了活动图和顺序图的形式化表达;其次,基于活动图和顺序图模型提出了三个实现自动代码生成的算法,该算法是通过活动图来描述对象内部的活动次序,并且利用顺序图体现对象之间的交互;最后,给出了一个原型工具,实现了模型到代码框架的自动转换。该工作可以确保转换的正确性,并且提高软件开发效率。
关键词:模型驱动开发;自动代码生成;形式化方法
中图分类号:TP311.5 文献标识码:A
Automatic Code Generation based on Activity and Sequence Diagrams
WEN Hao1,2, JIANG Jianmin3, ZHANG Shi1, HONG Zhong1
(1.College of Computer and Cyber Security, Fujian Normal University, Fuzhou 350117, China;
2.Chengdu Institute of Computer Applications, Chinese Academy of Sciences, Chengdu 610041, China;
3.College of Software Engineering, Chengdu University of Information Technology, Chengdu 610225, China)
caswh96@foxmail.com; jjm@cuit.edu.cn; shi@fjnu.edu.cn; fjfzhz@fjnu.edu.cn
Abstract: In the process of model-driven development, automatic tools are usually used to generate code frameworks in order to reduce the burden on developers. This paper proposes a method to automatically generate code framework based on activity diagram and sequence diagram, and a prototype tool is developed based on this method. First, this paper gives a formal expression of activity diagrams and sequence diagrams; secondly, three algorithms for realizing automatic code generation are proposed based on the activity diagram and sequence diagram. The algorithm uses activity diagrams to describe the internal activity sequence of the object and uses the sequence diagram to reflect the interaction between the objects; finally, a prototype tool is given to realize the automatic conversion from the model to the code framework. This work can ensure the correctness of the conversion and improve the efficiency of software development.
Keywords: model-driven development; automatic code generation; formal methods
1 引言(Introduction)
在各種开发方法中,模型驱动设计(Model-Driven Design)因其合理与高效已被工业界广泛运用[1-2]。在模型驱动设计框架下,先对系统进行建模,随后通过大量的分析与验证对该模型进行更新与修改,这就使得在设计的早期阶段就可以对错误进行检测和纠正。统一建模语言(UML)就是该开发过程中最常用的一种可视化建模工具,它提供了很多不同类型的图表,分别从不同的视点去建模系统,比如数据、行为、交互、组件架构等机制。
当开发人员用UML完成对系统的建模后,需要进一步将抽象模型转换为更具体的模型,并最终转换为可执行代码。但在过去的大部分转换过程中,由于没有完整的自动化方法,导致整个过程的成本较高,并且其中的手工部分因为缺乏形式化方法的支撑,也会造成整个过程容易出错[3]。近些年来,由于自动生成代码领域的火热,关于从UML模型生成对应代码的研究变得越来越多[4-5]。但遗憾的是,目前大部分的研究都是将单一的UML模型与代码之间进行关联,这样的策略在一定程度上会使得生成的代码缺失一定的实施细节。为了解决上述问题,本文选择了UML中的两种模型,一种是活动图(Activity Diagram),主要用于对业务流程进行建模;另一种是顺序图(Sequence Diagram),主要用于描述软件的对象或者进程间的交互行为。基于这两种不同图的不同视点,本文提出了一个更加完善的自动代码生成的方法。
我们依次给出了活动图和顺序图模型的形式化定义,并基于两个模型之间的关联,将模型元素与代码语句进行了对应,从而实现了代码生成。本文给出的三个算法,则对应到如何实现代码生成的自动化或半自动化。
2 活动图和顺序图(Activity diagram and sequence diagram)
活动图被广泛运用于建模工作流或模拟业务流程,它在本质上是一种流程图,着重表现从一个活动到另一个活动的控制流,而顺序图主要是用于显示对象之间交互的图。相比于使用单一UML模型,将活动图与顺序图之间进行关联后,可以结合不同的视点以及两种图不同的特性,使生成的代码框架更加完整,细节更多,并更实用。在本节中,首先给出了活动图和顺序图的形式化定义,随后提出了一个关联函数,用于描述活动图与顺序图之间的关系。
活动图是一种运用节点和边的组合,可视化描述活动执行过程的UML图,其中的节点可以分为活动节点、对象节点和控制节点。活动节点是活动图中最主要的元素之一,它用来表示一个活动;对象节点是用来帮助定义活动中对象流的抽象活动节点;而控制节点则是一种可以协调其他节点之间流的特殊的活动节点。下面给出了一个活动图抽象语法的定义。
定义1:一个活动图是一个九元组AD= Fn,Jn,R,Ia,Fa>,其中: (1)A=AODnMnFnJnIaFa; (2)AO,活动节点和对象节点的集合; (3)Dn,选择节点的集合; (4)Mn,合并节点的集合; (5)Fn,分叉节点的集合; (6)Jn,汇合节点的集合; (7)RA×A,活动和节点间关系的集合; (8)Ia,初始节点的集合; (9)Fa,终止节点的集合。 对活动图的形式化定义来自我们目前的工作[6-8]。为了简化处理,在本文中不区分對象节点和活动节点,即将所有对象节点都视作活动节点。同样为了方便描述,我们给出了前置集和后置集的定义,即对于任意节点xA,它的前置集和后置集可以分别表示为。x={yA|(y,x)R}和x。={yA|(x,y)R}。