文浩,蔣建民,張仕,洪中
摘? 要:在模型驅(qū)動開發(fā)過程中,為了減輕開發(fā)人員的負(fù)擔(dān),通常采用自動工具生成代碼框架。本文提出了一種基于活動圖與順序圖自動生成代碼框架的方法,并且基于該方法開發(fā)了原型工具。首先,給出了活動圖和順序圖的形式化表達(dá);其次,基于活動圖和順序圖模型提出了三個實現(xiàn)自動代碼生成的算法,該算法是通過活動圖來描述對象內(nèi)部的活動次序,并且利用順序圖體現(xiàn)對象之間的交互;最后,給出了一個原型工具,實現(xiàn)了模型到代碼框架的自動轉(zhuǎn)換。該工作可以確保轉(zhuǎn)換的正確性,并且提高軟件開發(fā)效率。
關(guān)鍵詞:模型驅(qū)動開發(fā);自動代碼生成;形式化方法
中圖分類號:TP311.5? ? ?文獻(xiàn)標(biāo)識碼: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)
在各種開發(fā)方法中,模型驅(qū)動設(shè)計(Model-Driven Design)因其合理與高效已被工業(yè)界廣泛運用[1-2]。在模型驅(qū)動設(shè)計框架下,先對系統(tǒng)進(jìn)行建模,隨后通過大量的分析與驗證對該模型進(jìn)行更新與修改,這就使得在設(shè)計的早期階段就可以對錯誤進(jìn)行檢測和糾正。統(tǒng)一建模語言(UML)就是該開發(fā)過程中最常用的一種可視化建模工具,它提供了很多不同類型的圖表,分別從不同的視點去建模系統(tǒng),比如數(shù)據(jù)、行為、交互、組件架構(gòu)等機(jī)制。
當(dāng)開發(fā)人員用UML完成對系統(tǒng)的建模后,需要進(jìn)一步將抽象模型轉(zhuǎn)換為更具體的模型,并最終轉(zhuǎn)換為可執(zhí)行代碼。但在過去的大部分轉(zhuǎn)換過程中,由于沒有完整的自動化方法,導(dǎo)致整個過程的成本較高,并且其中的手工部分因為缺乏形式化方法的支撐,也會造成整個過程容易出錯[3]。近些年來,由于自動生成代碼領(lǐng)域的火熱,關(guān)于從UML模型生成對應(yīng)代碼的研究變得越來越多[4-5]。但遺憾的是,目前大部分的研究都是將單一的UML模型與代碼之間進(jìn)行關(guān)聯(lián),這樣的策略在一定程度上會使得生成的代碼缺失一定的實施細(xì)節(jié)。為了解決上述問題,本文選擇了UML中的兩種模型,一種是活動圖(Activity Diagram),主要用于對業(yè)務(wù)流程進(jìn)行建模;另一種是順序圖(Sequence Diagram),主要用于描述軟件的對象或者進(jìn)程間的交互行為。基于這兩種不同圖的不同視點,本文提出了一個更加完善的自動代碼生成的方法。
我們依次給出了活動圖和順序圖模型的形式化定義,并基于兩個模型之間的關(guān)聯(lián),將模型元素與代碼語句進(jìn)行了對應(yīng),從而實現(xiàn)了代碼生成。本文給出的三個算法,則對應(yīng)到如何實現(xiàn)代碼生成的自動化或半自動化。
2? ?活動圖和順序圖(Activity diagram and sequence diagram)
活動圖被廣泛運用于建模工作流或模擬業(yè)務(wù)流程,它在本質(zhì)上是一種流程圖,著重表現(xiàn)從一個活動到另一個活動的控制流,而順序圖主要是用于顯示對象之間交互的圖。相比于使用單一UML模型,將活動圖與順序圖之間進(jìn)行關(guān)聯(lián)后,可以結(jié)合不同的視點以及兩種圖不同的特性,使生成的代碼框架更加完整,細(xì)節(jié)更多,并更實用。在本節(jié)中,首先給出了活動圖和順序圖的形式化定義,隨后提出了一個關(guān)聯(lián)函數(shù),用于描述活動圖與順序圖之間的關(guān)系。
活動圖是一種運用節(jié)點和邊的組合,可視化描述活動執(zhí)行過程的UML圖,其中的節(jié)點可以分為活動節(jié)點、對象節(jié)點和控制節(jié)點。活動節(jié)點是活動圖中最主要的元素之一,它用來表示一個活動;對象節(jié)點是用來幫助定義活動中對象流的抽象活動節(jié)點;而控制節(jié)點則是一種可以協(xié)調(diào)其他節(jié)點之間流的特殊的活動節(jié)點。下面給出了一個活動圖抽象語法的定義。
定義1:一個活動圖是一個九元組AD= Fn,Jn,R,Ia,F(xiàn)a>,其中: (1)A=AODnMnFnJnIaFa; (2)AO,活動節(jié)點和對象節(jié)點的集合; (3)Dn,選擇節(jié)點的集合; (4)Mn,合并節(jié)點的集合; (5)Fn,分叉節(jié)點的集合; (6)Jn,匯合節(jié)點的集合; (7)RA×A,活動和節(jié)點間關(guān)系的集合; (8)Ia,初始節(jié)點的集合; (9)Fa,終止節(jié)點的集合。 對活動圖的形式化定義來自我們目前的工作[6-8]。為了簡化處理,在本文中不區(qū)分對象節(jié)點和活動節(jié)點,即將所有對象節(jié)點都視作活動節(jié)點。同樣為了方便描述,我們給出了前置集和后置集的定義,即對于任意節(jié)點xA,它的前置集和后置集可以分別表示為。x={yA|(y,x)R}和x。={yA|(x,y)R}。