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