国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于UML模型的多態(tài)性與Java接口代碼信息一致性檢測的方法

2017-02-27 10:58余雙雙劉慧君楊燕寧
計算機應(yīng)用與軟件 2017年2期
關(guān)鍵詞:調(diào)用時序代碼

余雙雙 曾 一,2 劉慧君,2 楊燕寧

1(重慶大學(xué)計算機學(xué)院 重慶 400030)2(軟件理論與技術(shù)重慶市重點實驗室 重慶 400030)

基于UML模型的多態(tài)性與Java接口代碼信息一致性檢測的方法

余雙雙1曾 一1,2劉慧君1,2楊燕寧1

1(重慶大學(xué)計算機學(xué)院 重慶 400030)2(軟件理論與技術(shù)重慶市重點實驗室 重慶 400030)

UML模型是面向?qū)ο笙到y(tǒng)開發(fā)常用的建模語言,在由模型生成代碼的過程中常常出現(xiàn)不一致問題,從而造成系統(tǒng)后期測試成本以及維護成本的增加。而UML模型中的多態(tài)性因執(zhí)行路徑的不確定性會對模型與代碼的一致性產(chǎn)生重要影響,因此針對此問題提出以UML模型為基準,針對多態(tài)特性,對UML模型類圖、時序圖以及Java接口代碼信息進行解析預(yù)處理從而獲取時序調(diào)用圖以及代碼調(diào)用圖,并對其進行多態(tài)性擴展。根據(jù)模型的信息來對代碼的信息進行檢測,如果出現(xiàn)不一致問題時根據(jù)模型信息對代碼信息進行修改。通過以上提出的方法能夠更加完善模型與代碼的一致性檢測,使檢測更為有效、精準。

UML模型 多態(tài)性 多態(tài)性擴展 一致性檢測

0 引 言

目前國內(nèi)外針對模型一致性檢測與源代碼分析工具的研究較多,如Jackson等[1]提到的源代碼分析工具的發(fā)展,文獻[2]中的模型之間一致性檢測方法等,但這些研究都沒有將模型與代碼之間進行檢測,文獻[3]中雖然針對代碼與模型進行了一致性檢測,但并未考慮面向?qū)ο蠹夹g(shù)中的多態(tài)特性[4-5],而多態(tài)性會增加軟件可執(zhí)行路徑[6]的數(shù)量從而帶來很多不確定性,繼而增加一致性檢測的復(fù)雜性,因此考慮模型與代碼一致性檢測中的多態(tài)特性是十分重要和必要的。本文選取UML模型的類圖和時序圖及Java代碼接口信息作為研究對象,針對多態(tài)特性的重載和重寫兩種實現(xiàn)方式,通過類中方法參數(shù)列表的匹配以及多態(tài)性擴展規(guī)則的運用來完成模型的多態(tài)特性與相應(yīng)代碼的一致性檢測。

1 模型與代碼一致性檢測流程

多態(tài)是表示對于同一個消息,它在被不同的對象接收時可能會產(chǎn)生不同的行為。一致性檢測過程中,針對多態(tài)性不同的表現(xiàn)形式,需要采取不同的策略。對于重載可以通過直接匹配方法中參數(shù)的個數(shù)和類型的進行相應(yīng)的匹配,而重寫需要在運行時才能夠確定綁定的類型,則采取在動態(tài)檢測過程中,對調(diào)用圖實現(xiàn)多態(tài)性擴展的方式來完成對重寫機制的一致性檢測。在這里假設(shè)綁定是合理的,即對象引用只綁定到聲明類型及其綁定類型。

模型與代碼的一致性檢測首先需要對UML模型的類圖以及Java接口代碼信息進行解析獲取類方法,并按上述策略對重載的方法進行一致性檢測。接著根據(jù)解析獲取的類間關(guān)系對時序調(diào)用圖以及代碼調(diào)用圖進行多態(tài)性擴展,然后將擴展的圖按照層序遍歷的方式進行遍歷并進行節(jié)點信息以及邊的一致性檢測。具體流程如圖1所示。

圖1 模型和Java接口代碼信息一致性檢測的流程

2 類方法重載的一致性檢測

重載是指一個類中多態(tài)性的表現(xiàn)形式,即在一個類中定義多個同名的方法,它們彼此之間參數(shù)列表不一致。因此對于重載的一致性檢測只需匹配方法的參數(shù)列表即可。UML類圖很好地描述了類信息,通過對類圖以及代碼的解析獲取類信息,如方法、屬性和類間關(guān)系等。之后對存在的重載多態(tài)特性進行檢測,若存在不一致情況,則輸出不一致性檢測報告。因UML模型是一種半形式化的模型,為了更好地描述和存儲模型信息,需要對其進行重新的形式化定義,對類圖的形式化定義通常使用類元組CT(Class Tuple)[7]的形式來進行表示,重載的一致性檢測具體過程如下:

2.1 類圖解析

UML類圖包含了一致性檢測過程中所需的類信息,對類圖解析[8,9]后可以獲得方法、屬性和類間關(guān)系等信息,為一致性檢測提供基礎(chǔ)。其中對于類名和屬性都是提取關(guān)鍵信息后直接進行存儲。而對于類間關(guān)系,則是先確定是何種類型的關(guān)系。如果是關(guān)聯(lián)關(guān)系則將其轉(zhuǎn)化成關(guān)系屬性,如果是繼承關(guān)系則需標注子類與父類之間的關(guān)系,如果是實現(xiàn)關(guān)系則標注接口與實現(xiàn)類的關(guān)系;然后在關(guān)系信息列表中添加對應(yīng)存在的關(guān)系信息。而對于類中的方法信息,則是首先根據(jù)上一步確定類間關(guān)系,如果存在繼承關(guān)系,則需要確定每一操作在子類中是否對父類中的方法進行重寫。然后提取類方法的可見性、名稱、參數(shù)列表、返回值類型等基本信息,并將類名一并存儲到方法的結(jié)構(gòu)中。UML類圖解析的流程如圖2所示。

圖2 UML類圖解析流程

2.2 代碼類信息提取

代碼解析輸入為Java接口代碼信息源文件,對其直接進行詞法分析和語法分析[10-11],獲取一致性檢測所需的關(guān)鍵信息,即方法、屬性及類間關(guān)系。具體算法如下:

輸入:Java源代碼(包含類的定義信息)

輸出:代碼靜態(tài)信息

打開Java接口代碼信息文件

currentCode=代碼文件的第一行內(nèi)容

while (currentCode!=null){

if (currentCode包含類定義關(guān)鍵字“class”)

提取className、visibility等屬性,存入JavaClass當中;

檢測該類是否有直接定義的類間關(guān)系,如extends,implements等,存入ClassRelation.

根據(jù)類定義后的符號“{”來獲取類中屬性和方法信息。

if (currentCode包含屬性attribute的定義)

提取attrName、visibility、defaultValue、attrType等屬性,存入JavaAttribute當中。

if(currentCode包含方法method的定義)

提取methName、visibility、className、returnType等屬性,存入JavaMethod當中。

檢測方法的參數(shù)列表,即符號“()”中包含的參數(shù);

if(參數(shù)列表s !=null)

根據(jù)符號“,”來分割多個參數(shù)

提取各個參數(shù)的paraName、paraType、defaultValue,position為參數(shù)位置,逐次增加,存入Parameter當中。

currentCode=下一行代碼;}

return JavaClass集合;

通過上述算法得到所有源代碼中包含的類的靜態(tài)信息的集合,從而完成對Java源代碼解析。其中JavaClass、ClassRelation、JavaAttribute、JavaMethod和Parameter為代碼類信息存儲結(jié)構(gòu)。然后需要繼續(xù)執(zhí)行對classRelation的補充。因為上述算法中只提取了可以直接識別的類間關(guān)系,如繼承和實現(xiàn),但是無法全部獲取類間的關(guān)聯(lián)關(guān)系。所以需要重新檢測上述得到的類的屬性信息。例如類A中包含類B的關(guān)系屬性或者關(guān)系集合,則說明類A和類B存在關(guān)聯(lián)關(guān)系,則在classRelation當中添加一條信息(A,B,Association)。

2.3 重載一致性檢測算法

重載特性中的一致性檢測就是將模型與代碼解析后獲取的類信息中的方法進行檢測,實質(zhì)上是檢測當方法名一致時,方法的參數(shù)列表是否也是一致的。若不一致,則將不一致信息輸出。具體算法如下:

(1) 將UML類圖解析獲取的類中方法以及代碼信息提取獲取的類方法按照名稱排序,逐次比較方法名,若存在方法名稱不一致問題則輸出方法名不一致信息。

(2) 若方法名一致,則檢測相對應(yīng)方法的參數(shù)列表中參數(shù)個數(shù)是否一致,若不一致則輸出參數(shù)個數(shù)不一致信息。

(3) 若參數(shù)個數(shù)一致,則檢測參數(shù)類型的順序是否一致,若不一致則輸出參數(shù)類型不一致信息。

上述算法是用于重載的一致性檢測算法,是在類一致性的基礎(chǔ)上針對類中方法進行的檢測,對于方法的重載不僅要方法名一致參數(shù)列表也必須一致,若不一致要輸出相應(yīng)的不一致信息報告。

3 類方法重寫的一致性檢測

重寫是父類與子類之間多態(tài)性的表現(xiàn)形式,指子類中對父類中的方法進行重新定義,且具有相同的名稱和參數(shù)列表。因為UML半形式化的特點,將時序圖解析后提取的信息無法與Java代碼進行直接的一致性匹配,所以需要對UML的時序圖以及Java代碼進行預(yù)處理。采用時序調(diào)用圖及代碼調(diào)用圖來表示相應(yīng)的預(yù)處理結(jié)果,之后對調(diào)用圖進行多態(tài)性擴展,最后完成時序調(diào)用圖與代碼調(diào)用圖的一致性檢測。調(diào)用圖表示的是樹形結(jié)構(gòu)的調(diào)用關(guān)系,具體定義如下:

3.1 時序調(diào)用圖定義

時序調(diào)用圖(Sequence Diagram -Call Graph,SD-CG)

SD-CG=

S為開始結(jié)點。

M=是消息的集合,表示調(diào)用消息。

cmsgi :=},returnType,className>

className表示該消息接收對象的類的名稱。

E:=Mc×Mc表示消息節(jié)點間的調(diào)用邊。

3.2 代碼調(diào)用圖定義

代碼調(diào)用圖(Code Call Graph,CCG)

Gc :=

N:={m1,m2,…,mn}節(jié)點的集合,表示程序當中的類包含的方法或者過程這樣的單元。

mi=},returnType,className>

E?N×N是調(diào)用圖中的邊,反映方法之間的調(diào)用關(guān)系。

3.3 多態(tài)性擴展規(guī)則

對于重寫來說,需要在運行時才能夠確定綁定的類型,即運行時才能確定引用的是父類方法還是子類方法。在消息或方法的調(diào)用過程當中,若存在多態(tài)性,那么在這種情況下無法確定執(zhí)行的是基類中的方法還是子類中重寫的方法。為了保證一致性檢測的充分性,要對調(diào)用圖進行多態(tài)性擴展,同時考慮基類方法和派生類方法。這樣才能確保父類引用子類實例以及父類引用自身實例所產(chǎn)生的多態(tài)性得到充分的一致性檢測。多態(tài)性的擴展分為節(jié)點的擴展和邊的擴展:

(1) 節(jié)點的擴展

在前面將時序調(diào)用圖的消息節(jié)點定義為:

cmsgi::=},returnType,className>,則在考慮多態(tài)性存在時,該消息所對應(yīng)的類元組可能不是同一個類元組。那么需要通過className屬性去查找相應(yīng)的類元組CT(c)。在類元組定義時,有對重寫(override)的方法進行相應(yīng)的標記。如果有重寫則找到與之對應(yīng)的類元組CT(c1)或者CT(c2),其中CT(c1)是表示基類元組并且CT(c2)表示派生元組。例如在時序圖中存在消息m,它所屬的類元組CT(c)存在父類CT(c1)以及派生類CT(c2),那么在將其轉(zhuǎn)換成時序調(diào)用圖時,對應(yīng)的消息節(jié)點m將擴展為m1和m2。

(2) 邊的擴展

對于多態(tài)節(jié)點m,如果本來存在其上一個節(jié)點ma和下一個節(jié)點mb,那么在擴展多態(tài)節(jié)點m的同時,對ma指向m的邊ea以及m指向mb的邊eb也要進行相應(yīng)的擴展。例:如圖3所示,設(shè)消息節(jié)點m存在多態(tài)性,且擴展節(jié)點為m1和m2,擴展的邊集合E={ea1,ea2,eb1,eb2}。

圖3 多態(tài)擴展

3.4 時序調(diào)用圖的構(gòu)建及多態(tài)性擴展

(1) 同類圖解析方法類似,解析獲得時序圖的動態(tài)交互信息,如類對象集合、消息集合、事件集合以及消息順序集合等。

(2) 構(gòu)造時序調(diào)用圖中的開始節(jié)點S:S=

(3) 將時序圖中的消息msgi逐個轉(zhuǎn)為消息調(diào)用節(jié)點cmsgi,并以此添加到時序調(diào)用圖SD-CG中。在轉(zhuǎn)換過程中,對于每個消息都需要考慮到它的發(fā)送對象和接受對象,對于時序調(diào)用圖中的調(diào)用消息節(jié)點中需要添加關(guān)聯(lián)的對象信息。

(4) 根據(jù)時序圖中的消息順序信息建立時序調(diào)用圖中節(jié)點之間調(diào)用邊的關(guān)系。其中如果某一消息m1發(fā)送對象為o1,接受對象為o2,而下個消息m2的發(fā)送對象通用為o1,對對應(yīng)節(jié)點建立并行的調(diào)用邊。如果m2的發(fā)送對象為o2,則對對應(yīng)節(jié)點建立串行的調(diào)用邊。

(5) 對時序調(diào)用圖進行二次遍歷,查找出消息節(jié)點中存在的多態(tài)性問題,并根據(jù)多態(tài)性擴展規(guī)則對其進行多態(tài)性擴展。示例如圖4所示。

圖4 時序圖到時序調(diào)用圖的轉(zhuǎn)換以及多態(tài)擴展

根據(jù)上述轉(zhuǎn)換規(guī)則,成功完成將時序圖到時序調(diào)用圖的轉(zhuǎn)換過程,以及相應(yīng)的多態(tài)性擴展。對象obj3對于消息m2存在多態(tài)性,即對于消息m2有不同的實現(xiàn)方式。則在構(gòu)建時序調(diào)用圖時,擴展節(jié)點M2′。M2與M2′為并行的關(guān)系,在后面的一致性檢測中將分別對兩個節(jié)點進行檢測。

3.5 代碼調(diào)用圖的構(gòu)建及多態(tài)性擴展

(1) 代碼調(diào)用圖構(gòu)建算法

輸入:Java源代碼(包含方法調(diào)用動態(tài)信息)

輸出:代碼動態(tài)信息(即CCG)

創(chuàng)建CCG的首節(jié)點startNode。

定義當前執(zhí)行節(jié)點cNode=startNode;

currentCode=代碼文件的第一行內(nèi)容

while (currentCode!=null){

If(currentCode中存在對方法JavaMethod的定義 ){

創(chuàng)建JavaCallNode--node1,其中nodeName、visibility、returnType、paraterList對應(yīng)該方法相應(yīng)屬性,className為方法所屬類。

首節(jié)點s的nextNode=node1,cNode=node1。

If(檢測該方法中調(diào)用其他方法){

再創(chuàng)建新JavaCallNode--node2。

node1.nextNode=node2,cNode=node2.}}

currentCode=Java代碼的下一行內(nèi)容;}

return callGrap;

根據(jù)上述算法完成了對代碼動態(tài)信息的解析和調(diào)用圖的構(gòu)建,這是一個遞歸的過程,通過遞歸檢測類中相互的調(diào)用關(guān)系來創(chuàng)建一個樹形的Java調(diào)用圖CodeCallGraph。例如方法A中調(diào)用了方法B,則在CCG存在A和B兩個節(jié)點,并有A指向B的邊存在。圖5給出了一個代碼與代碼調(diào)用圖間的映射關(guān)系示例。

圖5 代碼與代碼調(diào)用圖間的映射關(guān)系示例

(2) 代碼調(diào)用圖多態(tài)性擴展

① 創(chuàng)建一個待擴展節(jié)點列表,并將代碼調(diào)用圖CCG中的首節(jié)點加入列表當中。

② 檢測待擴展節(jié)點列表是否為空,如果不為空則取出列表中第一個節(jié)點,然后將該節(jié)點所有子節(jié)點加入到列表當中。如果為空則結(jié)束多態(tài)性擴展。

③ 根據(jù)②中取出節(jié)點的屬性className查找該節(jié)點所屬類,然后根據(jù)代碼靜態(tài)信息中類間關(guān)系,檢測該類中此方法是否存在多態(tài)性,如果存在則進入④,否則回到②。

④ 假設(shè)某節(jié)點mNode存在多態(tài)性,則根據(jù)其不同的實現(xiàn)方式擴展對應(yīng)節(jié)點:mNode1,mNode2....mNoden。同時擴展相對應(yīng)的邊,分別由mNode的父節(jié)點指向擴展節(jié)點,以及擴展節(jié)點指向mNode的子節(jié)點。然后回到②。

上述策略是按照層序遍歷的方式對代碼調(diào)用圖這樣一個樹形的結(jié)構(gòu)進行遍歷,并在遍歷過程中,對于每一個訪問的節(jié)點檢測其多態(tài)性對存在多態(tài)性的節(jié)點進行擴展。

3.6 重寫一致性檢測算法

對時序調(diào)用圖及代碼調(diào)用圖進行多態(tài)性擴展后,需要對其進行動態(tài)信息的一致性檢測,主要分為調(diào)用關(guān)系集合一致性匹配及消息節(jié)點一致性匹配兩部分。

(1) 調(diào)用關(guān)系的一致性檢測

對于調(diào)用關(guān)系集合的匹配,因為本文對SD-CG和CCG的定義都是以一個樹形的結(jié)構(gòu)來進行存儲,所以調(diào)用關(guān)系即為樹所對應(yīng)的邊。下面給出具體的實現(xiàn)策略:

分別對輸入的SD-CG和CCG進行層序遍歷,得到邊的有序集合Ea和Eb。定義消息集合Message來存儲檢測到的不一致信息。

① 檢測Ea和Eb是否為空,若都不為空,則取出各自第一條邊ea和eb,進入③;若一個為空另一個不為空,則視為不為空的邊集合剩下的所有邊都為缺失的邊,將缺失信息存入Message當中;若二者都為空,則檢測結(jié)束。

② 對比取出的邊ea和eb的信息,若不一致則進入④,否則返回②。

③ 若ea和eb不一致,則首先對比其父親節(jié)點,如果父節(jié)點不一致,則查找上一條邊的父節(jié)點,父節(jié)點不一致的認為存在邊的缺失。

④ 根據(jù)③中規(guī)則確定所缺失的邊,則在Message中存儲對應(yīng)的缺失信息,并將缺失邊的集合中剩余的邊的序列數(shù)全部加一,返回②。

根據(jù)上述的策略,完成調(diào)用邊集合的一致性匹配,并得到不一致信息集合Message。然后根據(jù)Message中的信息對節(jié)點信息進行標注,從而減少節(jié)點匹配過程的匹配數(shù)量及因此容易導(dǎo)致的一些錯誤。圖6給出了一個調(diào)用邊匹配的簡單示例:

圖6 調(diào)用邊一致性檢測示例

如圖6所示,在檢測邊1、2、3的時候并沒有出現(xiàn)問題。但是當檢測邊4時,左圖為B→E,右圖為C→F,因為二者上一條邊均為B→D,則認為右圖對比左圖,右圖對比左圖缺失了邊B→E。則將此缺失信息加入Message當中,并將右圖中余下的邊加一,即C→F編號加一得5。此外在進行節(jié)點匹配時,根據(jù)邊缺失信息,對缺失邊上的節(jié)點只進行表示,而不用解析檢測。即對節(jié)點E,僅視為右圖中缺失了該節(jié)點,而不用將該節(jié)點與左圖中的任何節(jié)點來進行匹配。

(2) 消息結(jié)點與方法結(jié)點的一致性檢測

因為之前已經(jīng)完成了調(diào)用邊的一致性檢測,并根據(jù)邊的不一致信息對節(jié)點信息進行標注,所以待檢測SD-CG和CCG中的節(jié)點是按序且相互對應(yīng),只需依次提取進行匹配即可。具體算法如下:

輸入:SD-CG中節(jié)點集合NU和CCG中節(jié)點集合NJ

輸出:動態(tài)信息不一致問題

c1=NU中第一個元素,c2=NJ中第一個元素

while ( c1 != null && c2 !=null ){

if (c1的className屬性值與c2的不一致)

message+=“節(jié)點”+c1+”與節(jié)點”+c2+”對應(yīng)的類不一致”;

if (c1的visibility屬性值與c2的不一致)

message+=“節(jié)點”+c1+”與節(jié)點”+c2+”可見性不一致”;

if (c1的returnType屬性值與c2的不一致)

message+=“節(jié)點”+c1+”與節(jié)點”+c2+”返回值類型不一致”;

if (c1的paraList屬性值與c2的不一致)

message+=“節(jié)點”+c1+”與節(jié)點”+c2+”參數(shù)列表不一致”;

c1=NU中下一個元素;

c2=NJ中下一個元素;}

return message;

4 實驗驗證

汽車租賃系統(tǒng)類圖中一共包含了以下幾個類:Person、customer、employee、commonworker、manager、skillworker、car、customerrecord、requestorder等類。其中,employee和customer類是繼承于person類,commonworker,manager,skillworker又繼承于employee類。圖7-圖9給出整個汽車租賃系統(tǒng)的類圖和取車時序圖以及一致性檢測報告。

圖7 汽車租賃系統(tǒng)類圖詳細信息

圖8 客戶取車時序圖

圖9 汽車租賃系統(tǒng)一致性檢測報告

5 結(jié) 語

本文是在UML模型與Java代碼之間的一致性檢測方法一文的研究基礎(chǔ)上,結(jié)合UML模型和Java接口代碼信息的特點,并針對面向?qū)ο蠖鄳B(tài)性的機制進行多態(tài)性擴展,然后完成了二者之間的一致性檢測方法的設(shè)計與實現(xiàn)。雖然本文結(jié)合多態(tài)性的機制對一致性檢測的方法進行有效的改進和完善,但是在此仍然存在一些問題和需要進一步完善的地方,如本文在對接口代碼信息進行解析時,只是針對于代碼中的概要內(nèi)容,即僅僅針對于接口來實現(xiàn),而沒有對方法內(nèi)部的實現(xiàn)細節(jié)進行考慮。在進行動態(tài)性檢測的過程中,是通過創(chuàng)建調(diào)用圖的方法,即一個靜態(tài)過程來模擬動態(tài)行為的形式進行檢測。后續(xù)工作可以對代碼進行更加詳盡的解析以及采用真正的動態(tài)形式來對代碼中方法的調(diào)用關(guān)系進行檢測。

[1] Jackson D,Rinard M.Software analysis:a roadmap[C]//Proceedings of the Conference on The Future of Software Engineering,2000:133-145.

[2] 朱晨.UML模型一致性檢測的研究與設(shè)計[D].上海:上海交通大學(xué),2007.

[3] 曾一,李函逾,劉慧君,等.UML模型和Java代碼之間的一致性檢測方法[J].計算機科學(xué),2015,42(4):151-155.

[4] 周建儒,余美璘.面向?qū)ο筇卣髦鄳B(tài)性的分析[J].科技信息,2009(35):52,77.

[5] 藍雯飛,周俊,陳淑清.Java語言的多態(tài)性及其應(yīng)用研究[J].計算機系統(tǒng)應(yīng)用,2005,14(4):80-83.

[6] 覃釗璇.面向?qū)ο蠖鄳B(tài)路徑及測試數(shù)據(jù)生成方法的研究[D].重慶:重慶大學(xué),2010.

[7] Dong W,Wang J,Qi X,et al.Model checking UML statecharts[C]//Proceedings of the 8th Asia-Pacific Software Engineering Conference.IEEE,2001:363-370.

[8]ObjectManagementGroup.UML2.0SuperstructureSpecification[Z].2005.

[9] 丁娜.帶OCL約束的活動圖多態(tài)測試方法的研究[D].重慶:重慶大學(xué),2012.

[10]BergmairR.Syntaxdrivenanalysisofcontext-freelanguageswithrespecttofuzzyrelationalsemantics:UCAM-CL-TR-663[R/OL].http://www.cl.cam.ac.uk/TechReports/UCAMCLTR663.pdf.

[11]BarveA,JoshiBK.Aparallellexicalanalyzerformulti-coremachines[C]//Proceedingsofthe2012CSI6thInternationalConferneceonSoftwareEngineering,2012:1-3.

THE CONSISTENCY DETECTION METHOD OF POLYMORPHISM AND JAVA INTERFACE CODE INFORMATION BASED ON UML MODEL

Yu Shuangshuang1Zeng Yi1,2Liu Huijun1,2Yang Yanning1

1(CollegeofComputerScience,ChongqingUniversity,Chongqing400030,China)2(KeyLaboratoryofSoftwareTheoryandTechnologyinChongqing,Chongqing400030,China)

UML is a common modeling language for object-oriented system development. When the code is generated from the model, the inconsistent problem always exist and it will increase the later test cost and the maintenance cost. Since uncertainty of execution paths of polymorphism in UML model which makes important impact on consistency detection of the model and the code, using the UML model as the benchmark and the polymorphism (Overloading and Overriding) as the key elements, the Sequence Diagram-Call Graph(SD-CG) and Code Call Graph(CCG) is able to be obtained by analyzing and preprocessing the class diagram, sequence diagram and the Java interface code information, which should be treated with polymorphic extension. The code information is detected according to the information of the model, if there are inconsistent problems, the code information will be modified according to the model information. The proposed method can improve the consistency detection of the model and the code, getting more effective and accurate detection.

UML model Polymorphism Polymorphic extension Consistency detection

2015-12-21。國家自然科學(xué)基金項目(61272194)。余雙雙,碩士生,主研領(lǐng)域:軟件測試。曾一,教授。劉慧君,副教授。楊燕寧,碩士生。

TP3

A

10.3969/j.issn.1000-386x.2017.02.002

猜你喜歡
調(diào)用時序代碼
顧及多種弛豫模型的GNSS坐標時序分析軟件GTSA
清明
基于不同建設(shè)時序的地鐵互聯(lián)互通方案分析
核電項目物項調(diào)用管理的應(yīng)用研究
系統(tǒng)虛擬化環(huán)境下客戶機系統(tǒng)調(diào)用信息捕獲與分析①
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
基于FPGA 的時序信號光纖傳輸系統(tǒng)
龙井市| 安陆市| 天镇县| 仪征市| 北安市| 青河县| 原阳县| 迁西县| 阿合奇县| 邓州市| 手机| 桐乡市| 鹤庆县| 北京市| 成武县| 永兴县| 昭苏县| 铜山县| 马鞍山市| 金门县| 武陟县| 铜陵市| 长乐市| 东丰县| 绥中县| 河曲县| 玉门市| 蛟河市| 沈阳市| 金秀| 金川县| 郑州市| 迁安市| 南充市| 镶黄旗| 连平县| 太原市| 延吉市| 井冈山市| 宁阳县| 华坪县|