文浩,蔣建民,張仕,洪中



摘? 要:在模型驅動開發過程中,為了減輕開發人員的負擔,通常采用自動工具生成代碼框架。本文提出了一種基于活動圖與順序圖自動生成代碼框架的方法,并且基于該方法開發了原型工具。首先,給出了活動圖和順序圖的形式化表達;其次,基于活動圖和順序圖模型提出了三個實現自動代碼生成的算法,該算法是通過活動圖來描述對象內部的活動次序,并且利用順序圖體現對象之間的交互;最后,給出了一個原型工具,實現了模型到代碼框架的自動轉換。該工作可以確保轉換的正確性,并且提高軟件開發效率。
關鍵詞:模型驅動開發;自動代碼生成;形式化方法
中圖分類號: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}。