亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于活動(dòng)圖與順序圖的自動(dòng)代碼生成

        2021-09-06 01:48:31文浩,蔣建民,張仕,洪中
        軟件工程 2021年8期

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

        摘? 要:在模型驅(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}。

        例1:圖1(a)是一個(gè)活動(dòng)圖,可以表示為AD=

        Mn,F(xiàn)n,Jn,R,Ia,F(xiàn)a>,其中A={i,a,b,p,c,d,e,g,h,j,k,

        dn1,dn2,mn1,mn2,fn,jn,f},AO={a,b,p,c,d,e,g,h,j,k},Dn={dn1,dn2},Mn={mn1,mn2},F(xiàn)n={fn},Jn={jn},R={(i,a),(a,mn1),(mn1,b),(b,dn1),(dn1,p),(p,mn1),(dn1,c),(c,dn2),(dn2,d),(d,mn2),(dn2,e),(e,fn),(fn,g),(fn,h),(g,jn),(h,jn),(jn,j),(j,mn2),(mn2,k),(k,f)},Ia={i},F(xiàn)a={f}。并且可以很明顯得知,對(duì)于A中任意一個(gè)元素,比如b,可以得到。b={mn1}和b。={dn1}。

        順序圖可視化地描述了對(duì)象之間按照時(shí)間順序進(jìn)行信息交互的過(guò)程,它將交互展示為一個(gè)二維圖表,垂直維度上是一條被稱(chēng)為生命線的虛線,該虛線繪制在每個(gè)對(duì)象的下面,用于體現(xiàn)時(shí)間與順序;而水平維度上主要體現(xiàn)在對(duì)象之間的信息交互,即消息的傳遞。下面給出了一個(gè)順序圖抽象語(yǔ)法的定義。

        定義2:一個(gè)順序圖是一個(gè)三元組SD=,其中:

        (1)S,信號(hào)的集合;

        (2)O,對(duì)象的集合;

        (3)MS×O×O,消息的集合。

        在本文中,因?yàn)橹魂P(guān)注對(duì)象之間的交互內(nèi)容,所以在給出順序圖的形式化定義時(shí),選擇了一種比較簡(jiǎn)易的表達(dá)方式,該方式能更清晰地描述消息的傳遞過(guò)程。

        例2:圖1(b)是一個(gè)順序圖,可以表示為SD1=

        其中S1={c1,c2,c3,c4,c5},O1={AD,x,y},M1={(c1,AD,x),(c2,x,y),(c3,y,x),(c4,x,AD),(c5,AD,y)}。

        為了在上述活動(dòng)圖與順序圖之間建立聯(lián)系,本文利用一個(gè)關(guān)聯(lián)函數(shù),將每個(gè)順序圖視為活動(dòng)圖中的某一個(gè)活動(dòng)節(jié)點(diǎn)的精化,即活動(dòng)圖中的每一個(gè)活動(dòng)都可以通過(guò)順序圖展開(kāi),精化后的活動(dòng)圖相比于原來(lái)的活動(dòng)圖具有更多的細(xì)節(jié)。

        設(shè)為活動(dòng)節(jié)點(diǎn)的集合,為所有順序圖的集合;稱(chēng)函數(shù)map:為“關(guān)聯(lián)函數(shù)”。也就是說(shuō),對(duì)于所有的xAO,都可以通過(guò)關(guān)聯(lián)函數(shù)map得到與之對(duì)應(yīng)的順序圖map(x)=,即通過(guò)一次關(guān)聯(lián)函數(shù),得到的順序圖map(x)是對(duì)活動(dòng)節(jié)點(diǎn)x所屬的活動(dòng)圖AD的一次細(xì)節(jié)填充。

        例3:圖1(a)表示的是一個(gè)活動(dòng)圖AD=

        Jn,R,Ia,F(xiàn)a>,圖1(b)、圖1(c)分別表示的是兩個(gè)順序圖SD1和SD2。當(dāng)c,pAO,分別存在map(c)=SD1,map(p)=SD2,即可以將SD1和SD2視作活動(dòng)節(jié)點(diǎn)c和p所屬的活動(dòng)圖AD的細(xì)節(jié)填充,其余的活動(dòng)節(jié)點(diǎn)保持不變。

        3? ?代碼生成規(guī)則(The rules for code generation)

        前面介紹了關(guān)聯(lián)函數(shù),建立了活動(dòng)圖與順序圖之間的聯(lián)系,基于這種聯(lián)系,此部分提出了具體的代碼生成規(guī)則。首先,給出了一種代碼生成函數(shù),使活動(dòng)圖和順序圖中的節(jié)點(diǎn)與程序語(yǔ)句間形成對(duì)應(yīng)關(guān)系;接著設(shè)計(jì)了三個(gè)算法,用于實(shí)現(xiàn)基于活動(dòng)圖和順序圖的代碼自動(dòng)生成。

        3.1? ?代碼生成函數(shù)

        把UML圖轉(zhuǎn)換成代碼框架的核心問(wèn)題,就是如何使得圖形中的核心元素——節(jié)點(diǎn),與代碼語(yǔ)句一一對(duì)應(yīng)。為了在活動(dòng)圖和順序圖的節(jié)點(diǎn)與Java語(yǔ)句之間建立聯(lián)系,下面給出了一個(gè)代碼生成函數(shù)的定義。

        設(shè)是活動(dòng)節(jié)點(diǎn)和消息的集合,是構(gòu)成Java語(yǔ)言的語(yǔ)句集合;稱(chēng)函數(shù)g:為“代碼生成函數(shù)”。

        當(dāng)代碼生成函數(shù)的輸入分別為活動(dòng)節(jié)點(diǎn)和消息時(shí),可以得到:

        (1) xAO,x。Dn:g(x)=boolean x();

        (2) xAO,x。A\Dn:g(x)=void x();

        (3) xM,x=(s,o1,o2):g(x)=o2.s()。

        表1給出了從活動(dòng)節(jié)點(diǎn)和消息到Java代碼的詳細(xì)對(duì)應(yīng)關(guān)系。當(dāng)代碼生成函數(shù)的輸入是活動(dòng)圖的活動(dòng)節(jié)點(diǎn)時(shí),可以根據(jù)該活動(dòng)節(jié)點(diǎn)的后件進(jìn)行分類(lèi):一種是當(dāng)活動(dòng)節(jié)點(diǎn)的后件為選擇節(jié)點(diǎn)時(shí),因?yàn)檫x擇節(jié)點(diǎn)需要一個(gè)布爾值的輸入,所以將該活動(dòng)節(jié)點(diǎn)對(duì)應(yīng)的方法的返回值設(shè)置成布爾型。另一種是當(dāng)活動(dòng)節(jié)點(diǎn)的后件為非選擇節(jié)點(diǎn)時(shí),因?yàn)槌诉x擇節(jié)點(diǎn),其他的節(jié)點(diǎn)并不需要其前件的輸出作為該節(jié)點(diǎn)的輸入,所以將該活動(dòng)節(jié)點(diǎn)對(duì)應(yīng)的方法的返回值設(shè)置為空。當(dāng)代碼生成函數(shù)的輸入是順序圖的消息時(shí),可以通過(guò)識(shí)別該消息的發(fā)送對(duì)象與接收對(duì)象生成對(duì)應(yīng)的方法,即該消息的接收對(duì)象執(zhí)行該消息的對(duì)應(yīng)方法。

        3.2? ?算法設(shè)計(jì)

        本文的自動(dòng)代碼生成策略是,通過(guò)依次訪問(wèn)活動(dòng)圖中的活動(dòng)節(jié)點(diǎn)以及各類(lèi)節(jié)點(diǎn)之間的執(zhí)行順序來(lái)生成代碼框架中的類(lèi)定義與主函數(shù)內(nèi)部的執(zhí)行邏輯,再通過(guò)識(shí)別順序圖對(duì)象之間的通信來(lái)完善方法的調(diào)用?;陉P(guān)聯(lián)函數(shù)map和代碼生成函數(shù)g,本節(jié)提出了算法1Gcd(AD,set1)、算法2Sc(AD)和算法3Gel(AD,set2,lp,AD_code),用于實(shí)現(xiàn)從活動(dòng)圖自動(dòng)生成代碼。

        算法1Gcd(AD,set1)用于生成代碼框架中的類(lèi)定義,如圖2所示。該算法以活動(dòng)圖AD和順序圖的集合為輸入,輸出該活動(dòng)圖AD對(duì)應(yīng)生成的代碼AD_code。下面給出算法的具體解釋。

        第1 行是根據(jù)輸入的活動(dòng)圖的名字創(chuàng)建相應(yīng)的Java包。第2—13 行則是遍歷該活動(dòng)圖中的所有活動(dòng)節(jié)點(diǎn)。其中,第3—6 行是識(shí)別當(dāng)前活動(dòng)節(jié)點(diǎn)的對(duì)象,如果在當(dāng)前的代碼框架中沒(méi)有與該對(duì)象名相同的類(lèi),則添加對(duì)應(yīng)的類(lèi)定義;第7 行是向類(lèi)中添加該活動(dòng)節(jié)點(diǎn)對(duì)應(yīng)的方法;第8—12 行是通過(guò)映射函數(shù)map尋找到set1中用于精化活動(dòng)圖節(jié)點(diǎn)的對(duì)應(yīng)順序圖,并且識(shí)別對(duì)應(yīng)順序圖中所有的消息,生成對(duì)應(yīng)的方法調(diào)用。第14—15 行是向代碼框架中添加Main類(lèi),并且向其中添加main()方法,最后是輸出生成的Java代碼框架。

        算法1執(zhí)行完成之后,活動(dòng)圖對(duì)應(yīng)的代碼框架中已經(jīng)有了類(lèi)定義的部分,但一個(gè)完整的代碼框架除了類(lèi)定義及方法聲明,其主函數(shù)中還應(yīng)該有具體的執(zhí)行邏輯。為了準(zhǔn)確描述活動(dòng)圖中順序、選擇、循環(huán)、并發(fā)這四種不同的情況,下面分別給出了算法2Sc(AD)和算法3Gel(AD,set2,lp,AD_code),用于生成main()方法內(nèi)具體的程序執(zhí)行邏輯。

        算法2Sc(AD)是為了找出活動(dòng)圖中的環(huán),識(shí)別可能會(huì)循環(huán)執(zhí)行的活動(dòng)節(jié)點(diǎn),如圖3所示。該算法以活動(dòng)圖AD為輸入,輸出AD所有環(huán)中的活動(dòng)節(jié)點(diǎn)的集合lp。以圖1(a)中的活動(dòng)圖AD為例,算法2的輸出為lp=Sc(AD)={b,q}。下面給出該算法的具體解釋。

        第1—2 行分別定義一個(gè)集合lp和s,并且令lp和s為空。第3—18 行給出了一個(gè)深度優(yōu)先的遞歸算法,判斷DFS函數(shù)中第一個(gè)輸入的后置節(jié)點(diǎn)是否與該輸入的前置節(jié)點(diǎn),即第二個(gè)輸入之間存在連通關(guān)系,如果存在,則將存放路徑上的所有節(jié)點(diǎn)的集合s賦值給集合lp。第19—22 行是遍歷活動(dòng)圖中的所有選擇節(jié)點(diǎn),尋找活動(dòng)圖中的所有環(huán),并且依次將環(huán)中的節(jié)點(diǎn)存放到集合lp中。第23—24 行是取集合lp中的所有活動(dòng)節(jié)點(diǎn),最后輸出生成的集合lp。

        基于算法1和算法2,算法3Gel(AD,set2,lp,AD_code)可以生成一個(gè)完整的代碼框架,如圖4所示。該算法以活動(dòng)圖AD保存初始節(jié)點(diǎn)后件的集合set2,算法2輸出的集合lp和算法1生成的代碼框架為輸入,而輸出則是對(duì)應(yīng)的更新后的代碼框架。下面給出該算法的具體解釋。

        第1 行是定義一個(gè)集合al,用于存放已經(jīng)存放的選擇節(jié)點(diǎn)。第2—48 行是使用深度優(yōu)先的策略,從初始節(jié)點(diǎn)的后置節(jié)點(diǎn)開(kāi)始,依次訪問(wèn)活動(dòng)圖中的每一個(gè)節(jié)點(diǎn)。其中,在第3—9 行里,當(dāng)前節(jié)點(diǎn)為活動(dòng)節(jié)點(diǎn)時(shí),判斷當(dāng)前執(zhí)行的是否為主線程,如果是主線程,則在main()方法內(nèi)調(diào)用該節(jié)點(diǎn)對(duì)應(yīng)的方法,否則在run()方法內(nèi)進(jìn)行相同的方法調(diào)用(run()方法屬于線程類(lèi));在第10—17 行中,當(dāng)前節(jié)點(diǎn)為選擇節(jié)點(diǎn)并且該節(jié)點(diǎn)的后置節(jié)點(diǎn)屬于集合lp時(shí),生成對(duì)應(yīng)的while語(yǔ)句,并且將該選擇節(jié)點(diǎn)存放到集合al中;在第18—19 行中,當(dāng)前節(jié)點(diǎn)為選擇節(jié)點(diǎn)并且該節(jié)點(diǎn)屬于集合al時(shí),跳轉(zhuǎn)至該選擇節(jié)點(diǎn)的后置節(jié)點(diǎn);在第20—26 行中,當(dāng)前節(jié)點(diǎn)為選擇節(jié)點(diǎn)并且該節(jié)點(diǎn)的后置節(jié)點(diǎn)不屬于集合lp時(shí),生成對(duì)應(yīng)的if語(yǔ)句;在第27—28 行里,當(dāng)前節(jié)點(diǎn)為合并節(jié)點(diǎn)時(shí),跳轉(zhuǎn)至該合并節(jié)點(diǎn)的后置節(jié)點(diǎn);在第29—35 行中,當(dāng)前節(jié)點(diǎn)為分叉節(jié)點(diǎn)時(shí),根據(jù)當(dāng)前節(jié)點(diǎn)的后置節(jié)點(diǎn)數(shù)減一的數(shù)量創(chuàng)建子線程,并且將子線程和主線程亂序地放入棧中;在第36—44 行里,當(dāng)前節(jié)點(diǎn)為匯合節(jié)點(diǎn)時(shí),令棧內(nèi)位于頂部的線程出棧,如果此時(shí)的執(zhí)行線程不為主線程,則在main()方法內(nèi)調(diào)用對(duì)應(yīng)線程的join()方法(主線程等待該線程執(zhí)行完成后,再繼續(xù)執(zhí)行),然后再繼續(xù)讓棧內(nèi)的下一個(gè)線程出棧,執(zhí)行上述操作,直至棧內(nèi)為空;在第45—48 行里,當(dāng)前節(jié)點(diǎn)為終止節(jié)點(diǎn)時(shí),跳出所有循環(huán)。第49 行是輸出最后更新完的代碼框架。

        綜上,算法1主要是根據(jù)AO和set1中的元素,生成相應(yīng)的代碼語(yǔ)句,其時(shí)間復(fù)雜度為O(a×n),其中a表示AO中的節(jié)點(diǎn)個(gè)數(shù),n表示set1中與活動(dòng)節(jié)點(diǎn)對(duì)應(yīng)的順序圖的個(gè)數(shù)。算法2是判斷活動(dòng)圖中是否有環(huán),并且將環(huán)中的活動(dòng)節(jié)點(diǎn)取出,其時(shí)間復(fù)雜度為O(d×r),其中d表示Dn中的節(jié)點(diǎn)個(gè)數(shù),r表示活動(dòng)圖中邊的數(shù)量,即R中的元素個(gè)數(shù)。算法3是通過(guò)遍歷活動(dòng)圖中的所有節(jié)點(diǎn),根據(jù)不同的情況生成對(duì)應(yīng)的執(zhí)行邏輯,其時(shí)間復(fù)雜度為O(a×r),其中a表示AO中的節(jié)點(diǎn)個(gè)數(shù),r表示R中的元素個(gè)數(shù)。在軟件開(kāi)發(fā)的設(shè)計(jì)階段,因?yàn)閁ML圖是根據(jù)需求進(jìn)行繪制的,所以節(jié)點(diǎn)數(shù)量及圖的數(shù)量都是有限的,開(kāi)發(fā)人員有充分的時(shí)間通過(guò)這三個(gè)算法生成對(duì)應(yīng)的代碼框架。

        例4:圖5中的代碼框架就是通過(guò)算法1、算法2和算法3生成的,即AD_code=Gel(AD,set2,lp,Gcd(AD,set1)),其中AD為

        圖1(a)中的活動(dòng)圖,set1={map(c),map(p)},即分別對(duì)應(yīng)圖1(b)、圖1(c)中的順序圖SD1和SD2,set2={a}則是對(duì)應(yīng)活動(dòng)圖AD中初始節(jié)點(diǎn)的后置集合,lp=Sc(AD)={b,q}表示AD中可能會(huì)循環(huán)發(fā)生的活動(dòng)節(jié)點(diǎn)的集合。

        4? ?原型工具(Prototype tool)

        基于開(kāi)源庫(kù)GoJS(https://gojs.net/latest/index.html),我們開(kāi)發(fā)了原型工具codeGeneration(下載鏈接:https://pan.baidu.com/s/1Z1PzWioR2hRcdmFuwxZPMQ,提取碼:wgoc)用于實(shí)現(xiàn)UML模型到Java代碼框架的自動(dòng)轉(zhuǎn)換。圖6是一個(gè)從活動(dòng)圖轉(zhuǎn)換成對(duì)應(yīng)代碼框架的實(shí)例。

        5? ?結(jié)論(Conclusion)

        基于模型的自動(dòng)代碼生成與一致性驗(yàn)證是實(shí)現(xiàn)自動(dòng)化,以及提高軟件可靠性過(guò)程中必不可少的一個(gè)環(huán)節(jié)。本文基于UML模型中的活動(dòng)圖和順序圖,給出了一套完整的Java代碼自動(dòng)生

        成的方法。相比于傳統(tǒng)的單模型轉(zhuǎn)換方法,我們的方法通過(guò)兩種模型間的關(guān)聯(lián),可以讓生產(chǎn)的代碼框架具有更多的細(xì)節(jié)。

        我們未來(lái)的工作主要包括兩個(gè)方面:一是基于這套自動(dòng)代碼生成理論,對(duì)開(kāi)發(fā)過(guò)程進(jìn)行一致性驗(yàn)證;二是提出一套系統(tǒng)理論,實(shí)現(xiàn)從代碼到模型的直接轉(zhuǎn)換,并且對(duì)代碼編碼過(guò)程進(jìn)行分析,希望在轉(zhuǎn)換過(guò)程中不丟失任何細(xì)節(jié),進(jìn)一步研究涉及的一致性問(wèn)題。

        參考文獻(xiàn)(References)

        [1] THOMAS A H, JOSEPH S. The embedded systems design challenge[C]//Formal Methods Europe. International Symposium on Formal Methods. Berlin: Springer, 2006:1-15.

        [2] LEE E A. What's ahead for embedded software?[J]. Computer, 2000, 33(9):18-26.

        [3] BALZER R. A 15 year perspective on automatic programming[J]. IEEE Transactions on Software Engineering, 1985(11):1257-1268.

        [4] WANG Y, TALPIN J P, BENVENISTE A, et al. A semantics of UML state-machines using synchronous pre-order transition systems[C]//IEEE ISORC. Proceedings Third IEEE International Symposium on Object-Oriented Real-Time Distributed Computing. New York: IEEE, 2000:96-103.

        [5] VAN C P, ANSGAR R, G?IRARD S ?, et al. Complete code generation from UML state machine[C]//MODELSWARD. Proceedings of the 5th International Conference on Model-Driven Engineering and Software Development. New Jersey: Wiley, 2017:208-219.

        [6] 林添榮,蔣建民.UML活動(dòng)圖的一種邏輯語(yǔ)義[J].福建師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2010,26(03):26-30,39.

        [7] 陳慧峰,余曉菲,蔣建民.UML活動(dòng)圖的正確性檢測(cè)[J].軟件工程,2018,21(03):5-9,4.

        [8] CHEN H, JIANG J, HONG Z, et al. Decomposition of UML activity diagrams[J]. Software: Practice and Experience, 2017, 48(1):105-122.

        作者簡(jiǎn)介:

        文? ?浩(1996-),男,碩士生.研究領(lǐng)域:形式化方法.

        蔣建民(1972-),男,博士,教授.研究領(lǐng)域:形式化方法.

        張? ?仕(1977-),男,博士,副教授.研究領(lǐng)域:軟件工程.

        洪? ?中(1979-),男,博士,副教授.研究領(lǐng)域:軟件工程.

        国产精品国产三级在线专区| 69sex久久精品国产麻豆| 精产国品一二三产品蜜桃| 国产91福利在线精品剧情尤物| 亚洲日韩AV无码美腿丝袜| 国产另类av一区二区三区| 嗯啊好爽高潮了在线观看| 国产午夜精品一区二区 | 亚洲av无码之日韩精品| 亚洲a人片在线观看网址| 日本中文字幕人妻精品| 日韩亚洲一区二区三区四区| 久久婷婷五月综合97色一本一本 | 国产精品一区二区三区在线观看| 狠狠色噜噜狠狠狠8888米奇| 日本高清视频www| 无码国产精品一区二区免费网曝| 中文字幕亚洲乱码熟女在线| 亚洲中文字幕人成乱码在线| 成人免费无码大片a毛片抽搐色欲| 久久丫精品国产亚洲av不卡 | 久久久久久无中无码| 精品少妇一区二区三区四区| 久久精品人搡人妻人少妇| 欧美牲交a欧美牲交aⅴ免费真| 亚洲 欧美 国产 日韩 精品| 黄色网页在线观看一区二区三区| 在线观看在线观看一区二区三区| 亚洲av高清在线观看一区二区| 亚洲欧美另类激情综合区| 欧美破处在线观看| 久久综合伊人有码一区中文字幕| 人人超碰人人爱超碰国产| 久久精品娱乐亚洲领先| 韩日无码不卡| 女主播啪啪大秀免费观看| 成人国产一区二区三区| 人妻少妇看a偷人无码精品| 国产精品欧美亚洲韩国日本| av在线一区二区精品| 欧美黑人又大又粗xxxxx|