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

?

一種基于邏輯的Java模塊依賴(lài)圖構(gòu)建工具

2016-05-09 07:07倪友聰沈志鵬
關(guān)鍵詞:結(jié)點(diǎn)邏輯聚類(lèi)

杜 欣 趙 康 倪友聰 沈志鵬

一種基于邏輯的Java模塊依賴(lài)圖構(gòu)建工具

杜 欣 趙 康*倪友聰 沈志鵬

(福建師范大學(xué)軟件學(xué)院 福建 福州 350108)

目前Java模塊依賴(lài)圖MDG(Module Dependency Graph)的構(gòu)建工具還比較稀缺,從一定程度上限制了基于MDG圖的軟件模塊聚類(lèi)算法的應(yīng)用。針對(duì)這一問(wèn)題,提出一種基于邏輯的Java模塊依賴(lài)圖構(gòu)建工具TL4JMDG(the tool logic-based for Java MDG)。在開(kāi)源框架JTransformer和tuProlog的支持下,TL4JMDG工具以邏輯方式實(shí)現(xiàn)了Java模塊關(guān)系的抽取和MDG圖的生成。闡述TL4JMDG工具的設(shè)計(jì)與實(shí)現(xiàn),并給出TL4JMDG工具和基于Chava工具構(gòu)建MDG的耗時(shí)比較。TL4JMDG工具具有較好的可配置性、可擴(kuò)展性和性能,使得目前已有的基于MDG圖的聚類(lèi)算法能更好地應(yīng)用于Java軟件模塊聚類(lèi)。

軟件模塊聚類(lèi) 模塊關(guān)系 模塊依賴(lài)圖 JTransformer

0 引 言

軟件模塊化可以提高系統(tǒng)的可理解性、降低系統(tǒng)的維護(hù)費(fèi)用。軟件模塊聚類(lèi)是軟件模塊化的一種重要手段。目前已涌現(xiàn)出一批基于模塊依賴(lài)圖MDG的軟件模塊聚類(lèi)算法。Mitchell[1, 2]等人使用了爬山算法、遺傳算法等啟發(fā)式算法進(jìn)行軟件模塊聚類(lèi)研究。為了進(jìn)一步增大搜索空間,提高解質(zhì)量,一些多目標(biāo)軟件模塊聚類(lèi)算法[3-9]被紛紛提出。Praditwong[7]等人首次將軟件模塊聚類(lèi)作為一個(gè)多目標(biāo)優(yōu)化問(wèn)題進(jìn)行研究,提出了兩種多目標(biāo)軟件模塊聚類(lèi)算法ECA和MCA。De Barros[3]提出一種基于多目標(biāo)遺傳算法的軟件模塊聚類(lèi)方法。Gupta[5]等人提出一種軟件模塊多目標(biāo)聚類(lèi)算法MHypGA。上述這些軟件聚類(lèi)算法都直接或間接地利用MDG圖來(lái)計(jì)算各個(gè)目標(biāo)的值。上述這些算法大多集中在對(duì)C或C++程序模塊進(jìn)行聚類(lèi)。它們常常借助已有的Cia[10]和Acacia[11]等工具構(gòu)建相應(yīng)的MDG圖,而針對(duì)Java程序模塊的MDG圖構(gòu)建工具還比較稀缺,這從一定程度上限制了基于MDG圖的軟件模塊聚類(lèi)算法的應(yīng)用。雖可基于Doxygen[13]和Chava[12]等Java源代碼分析工具開(kāi)發(fā)Java程序模塊的MDG圖構(gòu)建工具,但仍需要解析Doxygen輸出的各種不同格式的結(jié)果文件或處理Chava結(jié)果數(shù)據(jù)庫(kù)中各種不同結(jié)構(gòu)的表。這不僅面臨一定的復(fù)雜性,而且影響到Java程序模塊的MDG圖構(gòu)建工具的可配置性、可擴(kuò)展性和性能。

針對(duì)上述問(wèn)題, 本文提出一種基于邏輯的Java模塊依賴(lài)圖構(gòu)建工具TL4JMDG。TL4JMDG工具借助開(kāi)源JTransformer框架將Java程序轉(zhuǎn)換為SWIProlog語(yǔ)言的邏輯事實(shí)庫(kù),再將該事實(shí)庫(kù)轉(zhuǎn)換為tuProlog語(yǔ)言的事實(shí)庫(kù),進(jìn)一步在tuProlog多范型編程框架下以可擴(kuò)展和可配置的方式實(shí)現(xiàn)Java模塊關(guān)系的抽取和MDG圖的生成。

1 背景知識(shí)

下面簡(jiǎn)單介紹本文涉及的MDG圖、JTransformer和tuProlog框架等背景知識(shí)。

1.1 MDG圖

MDG圖是一種表示程序中模塊之間依賴(lài)關(guān)系的無(wú)向圖。它由頂點(diǎn)和帶權(quán)值的邊構(gòu)成。其中:頂點(diǎn)表示模塊,邊表示模塊之間的關(guān)系,每種模塊關(guān)系可以賦予不同權(quán)重,邊上的權(quán)值是模塊間存在多種關(guān)系的權(quán)值和。面向?qū)ο缶幊陶Z(yǔ)言多以類(lèi)和接口作為模塊,模塊之間關(guān)系往往定義為類(lèi)間的繼承、關(guān)聯(lián)、方法調(diào)用以及接口與實(shí)現(xiàn)等關(guān)系。模塊之間關(guān)系存在著強(qiáng)弱之分,在軟件模塊聚類(lèi)研究中常常需要對(duì)不同關(guān)系賦予不同權(quán)重,體現(xiàn)它們對(duì)聚類(lèi)結(jié)果的影響[14]。

本文TL4JMDG工具是一種面向Java程序的MDG構(gòu)建工具。下面舉一小例子解釋Java程序與MDG圖之間的映射關(guān)系。下面的程序代碼和圖1分別是Java程序片斷及其所對(duì)應(yīng)的MDG圖。程序聲明了包demo,并定義了Person、Student和Teacher三個(gè)類(lèi)及其之間的關(guān)系。程序中第9行和10行指示了Student類(lèi)和Teacher類(lèi)分別與Person類(lèi)之間存在繼承關(guān)系;第11行和第13行定義了Teacher類(lèi)與Student類(lèi)之間存在關(guān)聯(lián)和方法調(diào)用關(guān)系。例中假定繼承、關(guān)聯(lián)和方法調(diào)用三種模塊關(guān)系的權(quán)重被分別設(shè)為4、2和1,則程序片斷對(duì)應(yīng)的MDG如圖1所示。圖1表示的MDG圖包括名為demo.Person、demo.Student和demo.Teacher三個(gè)結(jié)點(diǎn)和三條邊。

1 package demo;

2 public class Person {

3 String name;

4 public String getName() {

5 return name;

6 }

7 ……

8 }

9 public class Student extends Person { …}

10 public class Teacher extends Person {

11 Student student;

12 public String askStudentName() {

13 String name = student.getName();

14 return name;

15 }

16 }

圖1 程序?qū)?yīng)的MDG圖

本文TL4JMDG工具借助JTranformer框架來(lái)構(gòu)建Java程序的MDG圖。

1.2 JTransformer框架

JTransformer[14,15]是一種基于邏輯的Java程序分析和重構(gòu)框架。它的核心功能是將Java程序變換成SWIProlog語(yǔ)言[14]的邏輯事實(shí)庫(kù)。JTransformer框架中定義了一組用于表示Java語(yǔ)言語(yǔ)法樹(shù)結(jié)點(diǎn)及其之間關(guān)系的SWIProlog謂詞。通過(guò)這些謂詞可將Java程序變換成等價(jià)的SWIProlog邏輯事實(shí)庫(kù)。

在上例的基礎(chǔ)上,給出這種等價(jià)變換的簡(jiǎn)單說(shuō)明。圖2示意了程序片斷對(duì)應(yīng)的一棵語(yǔ)法樹(shù)。圖2中的橢圓表示樹(shù)的結(jié)點(diǎn),旁邊的數(shù)字表示結(jié)點(diǎn)的ID號(hào);矩形框表示結(jié)點(diǎn)的屬性值;實(shí)有向弧邊表示結(jié)點(diǎn)之間的父子關(guān)系;無(wú)向邊表示結(jié)點(diǎn)與屬性的關(guān)系;虛有向弧表示結(jié)點(diǎn)間的引用關(guān)系,弧上的標(biāo)識(shí)符定義了引用關(guān)系的類(lèi)型名。下面以圖2中旁邊加實(shí)心三角形的結(jié)點(diǎn)為例進(jìn)行說(shuō)明。該結(jié)點(diǎn)的ID號(hào)、父結(jié)點(diǎn)ID號(hào)和名稱(chēng)分別為28969、28978和Student。該結(jié)點(diǎn)引用ID號(hào)為28976的結(jié)點(diǎn),且引用關(guān)系的類(lèi)型為extendsT。

圖2 Java程序的語(yǔ)法樹(shù)

Java語(yǔ)法樹(shù)結(jié)點(diǎn)以及結(jié)點(diǎn)之間的引用關(guān)系可用JTransformer定義的一階謂詞進(jìn)行表示。根結(jié)點(diǎn)packageT的謂詞表示中第一個(gè)變?cè)硎窘Y(jié)點(diǎn)ID號(hào),第二個(gè)變?cè)硎景?。除根結(jié)點(diǎn)外,其余結(jié)點(diǎn)謂詞的第一個(gè)變?cè)硎窘Y(jié)點(diǎn)的ID號(hào),第二個(gè)變?cè)硎靖腹?jié)點(diǎn)的ID號(hào),其他項(xiàng)由結(jié)點(diǎn)的類(lèi)型確定。這些項(xiàng)用于表示結(jié)點(diǎn)的屬性、結(jié)點(diǎn)與其他結(jié)點(diǎn)之間的引用關(guān)系等。引用關(guān)系謂詞的第一和第二個(gè)變?cè)謩e表示引用關(guān)系的ID號(hào)和被引用結(jié)點(diǎn)的ID號(hào)。在結(jié)點(diǎn)謂詞和引用關(guān)系謂詞定義中的變?cè)y(tǒng)一用‘_’作為前綴,并約定名為‘_’的變?cè)悄涿冊(cè)?。?1)和式(2)分別給出classT類(lèi)型結(jié)點(diǎn)和extendsT類(lèi)型引用關(guān)系的謂詞定義。對(duì)一個(gè)具體的Java程序,其語(yǔ)法樹(shù)中的每個(gè)結(jié)點(diǎn)及其之間的引用關(guān)系都可用不含變?cè)闹^詞公式表示,形成一條邏輯事實(shí)。例如圖2中旁邊加實(shí)心三角形的結(jié)點(diǎn)可表示成式(3)對(duì)應(yīng)的一條邏輯事實(shí),該結(jié)點(diǎn)對(duì)應(yīng)的一個(gè)引用關(guān)系可用式(4)定義的一條邏輯事實(shí)進(jìn)行表示。因而,一個(gè)Java程序可等價(jià)表示成一個(gè)邏輯事實(shí)庫(kù)。表1示意了圖2對(duì)應(yīng)的邏輯事實(shí)庫(kù)。

表1 程序?qū)?yīng)的邏輯事實(shí)庫(kù)

classT(_clsid,_pkgid,_name,[_ref1,…,_refn])

(1)

extendT(_id,_clsId)

(2)

classT(28969,28978,′Student′,[28980])

(3)

extendT(28969,28985)

(4)

借助JTransformer雖可將Java程序轉(zhuǎn)換為SWIProlog邏輯事實(shí)庫(kù),但已有的SWIProlog編程框架不能很好支持與Java語(yǔ)言的多范型編程。因而,TL4JMDG工具使用tuProlog框架作為編程環(huán)境。將SWIProlog邏輯事實(shí)庫(kù)變換為tuProlog的邏輯事實(shí)庫(kù)。下面簡(jiǎn)單介紹tuProlog框架。

1.3 tuProlog框架

tuProlog是一種具有多范型編程和并行多線程推理能力的Prolog框架。本文TL4JMDG工具借助tuProlog框架中的Theory、Prolog和SolveInfo三類(lèi),可在Java環(huán)境運(yùn)用多線程訪問(wèn)Prolog資源和功能。Theory類(lèi)用于實(shí)例化Java程序事實(shí)庫(kù),而Prolog類(lèi)提供解析執(zhí)行邏輯程序和命令的功能,并將返回結(jié)果封裝在SolveInfo類(lèi)對(duì)象中,利用SolveInfo類(lèi)提供的方法可遍歷解析結(jié)果。

簡(jiǎn)要介紹TL4JMDG工具開(kāi)發(fā)的背景知識(shí)后,下面給出它的具體設(shè)計(jì)與實(shí)現(xiàn)。

2 TL4JMDG工具總體設(shè)計(jì)

圖3示意了TL4JMDG工具的工作流程。其主要包括配置文件生成、tuProlog邏輯事實(shí)庫(kù)生成和MDG圖生成三個(gè)階段。在第一階段中,用戶指定Java程序文件和輸出MDG文件的位置,以及需要提取的模塊關(guān)系和權(quán)值等信息,并通過(guò)UI模塊將這些信息寫(xiě)入到配置文件中。在第二階段中,借助JTransformer框架先將Java程序轉(zhuǎn)化為SWIProlog邏輯事實(shí)庫(kù),再通過(guò)SWI2tu轉(zhuǎn)換器將該邏輯事實(shí)庫(kù)轉(zhuǎn)換為tuProlog邏輯事實(shí)庫(kù)。SWI2tu轉(zhuǎn)換器主要針對(duì)SWIProlog和tuProlog邏輯事實(shí)庫(kù)在字符編碼和指令格式上的差異,進(jìn)行相應(yīng)的字符編碼轉(zhuǎn)換和指令格式轉(zhuǎn)換。在第三階段中,MDG圖生成器MDGCreator先讀入配置文件,決定要抽取的模塊關(guān)系,再基于tuProlog邏輯事實(shí)庫(kù)抽取對(duì)應(yīng)的模塊關(guān)系,最后根據(jù)配置文件中各種模塊關(guān)系的權(quán)重,生成Java程序?qū)?yīng)的MDG圖。

圖3 MDG圖構(gòu)建工作流程圖

在TL4JMDG工具中,MDG圖生成器MDGCreator是最為關(guān)鍵和核心的模塊。下面詳細(xì)闡述它的設(shè)計(jì)與實(shí)現(xiàn)。

3 MDGCreator生成器的設(shè)計(jì)與實(shí)現(xiàn)

MDGCreator生成器主要由MDGController控制器和一組模塊關(guān)系提取器MDGExtractor構(gòu)成。圖4示意了它的工作流程。其主要包含啟動(dòng)MDGExtractor提取器,生成中間MDG圖和生成最終MDG圖三個(gè)階段。在第一階段中,MDGController控制器讀取配置文件獲取用戶需要提取的模塊關(guān)系,并行啟動(dòng)相應(yīng)的MDGExtractor提取器。在第二階段中,每種MDGExtractor提取器在邏輯事實(shí)庫(kù)上查詢(xún)一種特定的模塊關(guān)系,并根據(jù)查詢(xún)結(jié)果構(gòu)建出一個(gè)中間MDG圖;在第三階段中,MDGController控制器根據(jù)關(guān)系的權(quán)重值,通過(guò)合并各個(gè)中間MDG圖,構(gòu)建出最終MDG圖。下面給出MDGExtracor提取器和MDGController控制器的設(shè)計(jì)與實(shí)現(xiàn)。

圖4 MDGCreator工作流程示意圖

3.1 MDGExtracor提取器設(shè)計(jì)與實(shí)現(xiàn)

圖5給出了MDGExtracor提取器的設(shè)計(jì)類(lèi)圖。其包括extractorPkg、mdgPkg和prologPkg三個(gè)包。

圖5 MDGExtracor提取器設(shè)計(jì)類(lèi)圖

(1) extractorPkg包包含了IExtractor接口和一組具體的提取器類(lèi)。IExtractor接口中的方法generateMDG定義了各種提取器類(lèi)向外部提供的公共行為,即抽取一種特定的模塊關(guān)系,生成中間MDG。目前TL4JMDG工具實(shí)現(xiàn)了繼承、實(shí)現(xiàn)、關(guān)聯(lián)和方法調(diào)用四種模塊關(guān)系的提取器,分別由ExtractorOfExt、ExtractorOfImp、ExtractorOfAsso和ExtractorOfCal四個(gè)類(lèi)具體實(shí)現(xiàn)。用戶可擴(kuò)展定義自己的提取器類(lèi),以抽取其他模塊關(guān)系。

(2) mdgPkg包包含MDG、Edge和Node三個(gè)類(lèi),它們分別用于定義MDG圖及其邊和結(jié)點(diǎn)。Node類(lèi)中的id和name屬性分別表示結(jié)點(diǎn)id和名稱(chēng)。Edge類(lèi)中head、tail和weight三個(gè)屬性分別表示邊關(guān)聯(lián)的兩個(gè)結(jié)點(diǎn)以及權(quán)值。為了今后擴(kuò)展成有向圖,head、tail可定義為弧尾和弧點(diǎn)結(jié)點(diǎn)。MDG類(lèi)中nodes和edges分別用于表示MDG圖的結(jié)點(diǎn)集和邊集。

(3) prologPkg包包含了tuprolog支持庫(kù)中Theory、Prolog和SolveInfo三個(gè)類(lèi)。Theory類(lèi)的構(gòu)造函數(shù)以Java程序邏輯事實(shí)庫(kù)文件作為輸入流,生成tuProlog引擎可加載的理論。Prolog類(lèi)中setTheory、solve和solveNext三個(gè)方法分別表示加載理論、解析執(zhí)行邏輯程序返回解和獲取下一個(gè)解。solve和solveNext方法都是返回SolveInfo對(duì)象,可請(qǐng)求SolveInfo類(lèi)方法isSuccess判斷Prolog對(duì)象執(zhí)行結(jié)果是否成功,如成功可繼續(xù)獲取下一個(gè)解。

限于篇幅下面僅以繼承關(guān)系提取器ExtractorOfExt為例說(shuō)明提取器類(lèi)的實(shí)現(xiàn)方案。圖6的時(shí)序圖描述了當(dāng)MDGController控制器向ExtractorOfExt提取器發(fā)出生成繼承關(guān)系MDG圖的請(qǐng)求后,ExtractorOfExt提取器的工作流程。具體而言:ExtractorOfExt提取器根據(jù)Java程序邏輯事實(shí)庫(kù)的位置實(shí)例化Theory對(duì)象,然后創(chuàng)建Prolog對(duì)象,再請(qǐng)求該P(yáng)rolog對(duì)象加載實(shí)例化后的Theory對(duì)象;接著ExtractorOfExt提取器發(fā)送查詢(xún)模塊繼承關(guān)系的邏輯程序文本,并請(qǐng)求Prolog對(duì)象解析執(zhí)行,Prolog對(duì)象執(zhí)行后返回SolveInfo結(jié)果對(duì)象; ExtractorOfExt提取器根據(jù)返回的SolveInfo對(duì)象判斷執(zhí)行是否成功,如成功則多次請(qǐng)求Prolog對(duì)象獲取每一個(gè)解;最后ExtractorOfExt提取器根據(jù)所獲得的解生成繼承關(guān)系MDG圖。

圖6 MDGExtractor提取器的工作流程

表2給出了查詢(xún)繼承關(guān)系的邏輯程序文本。在表2中,第1行到第3行用于查詢(xún)一個(gè)類(lèi)的合格名。第4行表示查詢(xún)?cè)擃?lèi)引用的父類(lèi)。第5行到第7行表示獲取父類(lèi)的ID(由_clsID指示)后,再查詢(xún)?cè)摳割?lèi)的合格類(lèi)名。表2的程序文本由Prolog引擎在Java程序邏輯事實(shí)上解析執(zhí)行后,可獲得Java程序中所有類(lèi)的繼承關(guān)系,并能確定每個(gè)繼承關(guān)系中子類(lèi)和父類(lèi)的合格類(lèi)名。

表2 繼承關(guān)系提取器查詢(xún)謂詞

3.2 MDGController控制器設(shè)計(jì)與實(shí)現(xiàn)

圖7給出了MDGController控制器的設(shè)計(jì)類(lèi)圖。mdgCtlPkg包給出了控制器的設(shè)計(jì),其主要包含MDGController、ThreadOfExtor、MDGPara 和MDGCfgInfo四個(gè)類(lèi)。

圖7 MDGController控制器設(shè)計(jì)類(lèi)圖

(1) MDGPara類(lèi)定義了與MDG圖構(gòu)建相關(guān)的參數(shù)。它的relName、weight和implClsName分別表示模塊關(guān)系名稱(chēng)、權(quán)重和對(duì)應(yīng)抽取器類(lèi)的類(lèi)名。

(2) 從配置文件中獲取用戶需要提取模塊關(guān)系、每個(gè)關(guān)系的權(quán)重及對(duì)應(yīng)的提取器類(lèi)名等,并裝配成MDGPara類(lèi)對(duì)象的列表返回,采用的方法是MDGCfgInfo類(lèi)中的方法getMDGPara。

(3) ThreadOfExtor類(lèi)可使每個(gè)提取器以獨(dú)立的線程進(jìn)行運(yùn)行。它實(shí)現(xiàn)了Java類(lèi)庫(kù)中Runnable接口的run方法。ExtorOfThread類(lèi)的構(gòu)造函數(shù)包含extor、mdgs和idx三個(gè)輸入?yún)?shù)。extor參數(shù)表示實(shí)現(xiàn)了IExtrator接口的提取類(lèi)對(duì)象。mdgs參數(shù)表示一個(gè)MDG圖列表對(duì)象,而idx表示extor對(duì)象生成的中間MDG存放在mdgs中的下標(biāo)位置。

(4) MDGController類(lèi)定義了兩個(gè)屬性mdgParas和mdgs,以及mergeMDG和getMDG兩個(gè)方法。mdgParas和mdgs屬性分別用于保存MDGPara類(lèi)對(duì)象列表和MDG類(lèi)對(duì)象列表。mergeMDG方法合并mdgs中的各個(gè)中間MDG,返回最終的MDG。而getMDG方法則根據(jù)mdgParas中各對(duì)象,依次獲取提取器類(lèi)名,動(dòng)態(tài)構(gòu)建對(duì)應(yīng)的提取器對(duì)象extor,傳入extor、mdgs和下標(biāo)以實(shí)例化ExtorOfThread對(duì)象,并啟動(dòng)它的run方法。每個(gè)ExtorOfThread對(duì)象生成完中間MDG圖后,調(diào)用mergeMDG返回最終的MDG。

圖8的時(shí)序圖描述了當(dāng)用戶接口UI向MDGController控制器發(fā)出構(gòu)建MDG圖請(qǐng)求后,MDGController控制器的工作流程。具體而言:MDGController控制器首先向MDGCfgInfo對(duì)象請(qǐng)求獲取構(gòu)建MDG圖所需的配置參數(shù),然后再根據(jù)MDGCfgInfo對(duì)象返回配置參數(shù)列表中的各個(gè)提取器類(lèi)名,依次生成對(duì)應(yīng)的提取器線程ThreadOfExtor對(duì)象,啟動(dòng)它們并發(fā)出生成中間MDG圖請(qǐng)求;當(dāng)每個(gè)ThreadOfExtor提取器線程對(duì)象都生成完中間MDG圖后,MDGController控制器合并這些中間MDG圖,生成最終MDG圖返回給用戶接口UI。

圖8 MDGController控制器的工作流程

4 TL4JMDG工具的性能評(píng)估

為了評(píng)估TL4JMDG工具的性能,下面以三款不同規(guī)模的開(kāi)源Java軟件為實(shí)驗(yàn)對(duì)象,并與Chava*工具(通過(guò)擴(kuò)展Chava而開(kāi)發(fā)出的MDG圖構(gòu)建工具)進(jìn)行實(shí)驗(yàn)對(duì)比。

4.1 實(shí)驗(yàn)環(huán)境

實(shí)驗(yàn)硬件環(huán)境:Intel(R) Core(TM) 2.60 GHz的Lenovo i5-3240MCPU,RAM 4 GB。

實(shí)驗(yàn)軟件環(huán)境:JDK7及JHotDraw6、JfreeChart和jEdit三款規(guī)模從小到大的開(kāi)源Java軟件。三款開(kāi)源軟件的基本情況如表3表示。

表3 實(shí)驗(yàn)軟件信息

4.2 性能分析

圖9-圖12分別給出了運(yùn)用TL4JMDG和Chava*工具在構(gòu)建三款實(shí)驗(yàn)軟件的繼承、實(shí)現(xiàn)、關(guān)聯(lián)和方法調(diào)用MDG圖的耗時(shí)情況。從圖9-圖12可以看出:在構(gòu)建繼承、實(shí)現(xiàn)、關(guān)聯(lián)和方法調(diào)用MDG圖時(shí)TL4JMDG較Chava*耗時(shí)更短,其主要是由于Chava*訪問(wèn)數(shù)據(jù)庫(kù)較TL4JMDG直接訪問(wèn)內(nèi)存耗時(shí)更多,而且實(shí)驗(yàn)軟件規(guī)模越大對(duì)比越明顯。此外,與構(gòu)建其他三種關(guān)系的MDG圖相比,構(gòu)建方法調(diào)用MDG圖的耗時(shí)更長(zhǎng)。其原因主要有兩個(gè):一是方法調(diào)用是Java模塊之間最主要的消息通信方式,方法調(diào)用關(guān)系普遍存在于Java模塊之間;二是在TL4JMDG和Chava*在分析方法調(diào)用關(guān)系時(shí),需要遍歷更多程序元素,耗時(shí)也相對(duì)較多。

圖9 構(gòu)建繼承關(guān)系MDG圖的耗時(shí)情況

圖10 構(gòu)建實(shí)現(xiàn)關(guān)系MDG 圖的耗時(shí)情況

圖11 構(gòu)建關(guān)聯(lián)關(guān)系MDG 圖的耗時(shí)情況

圖12 構(gòu)建方法調(diào)用關(guān)系 MDG圖的耗時(shí)情況

圖13給出了運(yùn)用TL4JMDG和Chava*工具在構(gòu)建三款實(shí)驗(yàn)軟件的包含繼承、實(shí)現(xiàn)、關(guān)聯(lián)和方法調(diào)用四種關(guān)系的MDG圖。從圖13可以看出生成包含這四種關(guān)系的MDG圖時(shí)TL4JMDG較Chava*耗時(shí)更短。此外,從圖13與圖9-圖12對(duì)比中可以看出:Chava*生成繼承、實(shí)現(xiàn)、關(guān)聯(lián)和方法調(diào)用四種MDG圖的總耗時(shí)與生成包含這四種關(guān)系的MDG圖的耗時(shí)相差較小,而TL4JMDG則相差較多。其原因是TL4JMDG工具在生成包含多種關(guān)系的MDG圖時(shí),啟動(dòng)獨(dú)立的線程去生成單一關(guān)系的MDG,提高了生成MDG圖步驟的并行性,進(jìn)而降低了構(gòu)建包含多種關(guān)系MDG圖的耗時(shí)。

圖13 構(gòu)建包含繼承、實(shí)現(xiàn)、關(guān)聯(lián)和方法調(diào)用四種關(guān)系的MDG圖耗時(shí)情況

5 結(jié) 語(yǔ)

本文基于開(kāi)源框架JTransformer和tuProlog,提出了一種基于邏輯的Java模塊依賴(lài)圖構(gòu)建工具TL4JMDG,給出了該工具的設(shè)計(jì)與實(shí)現(xiàn),并評(píng)估了其性能。TL4JMDG工具具有良好的可配置性、可擴(kuò)展性,可較好地用于基于MDG圖的Java模塊聚類(lèi)分析。未來(lái)我們將基于TL4JMDG工具開(kāi)展Java模塊多目標(biāo)聚類(lèi)算法的研究工作。

[1] Mitchell B S, Mancoridis S. On the automatic modularization of software systems using the bunch tool[J].Software Engineering, IEEE Transactions on,2006,32(3):193-208.

[2] Mitchell B S, Mancoridis S. On the evaluation of the Bunch search-based software modularization algorithm[J].Soft Computing,2008,12(1):77-93.

[3] de Barros M O. An analysis of the effects of composite objectives in multiobjective software module clustering[C]//Proceedings of the fourteenth international conference on Genetic and evolutionary computation conference.ACM,2012:1205-1212.

[4] Jeet K, Dhir R. Software re-engineering using imperialist competitive algorithm[J].ACM SIGSOFT Software Engineering Notes,2013,38(6):1-5.

[5] Kumari A C, Srinivas K, Gupta M P. Software module clustering using a hyper-heuristic based multi-objective genetic algorithm[C]//Advance Computing Conference (IACC), 2013 IEEE 3rd International.IEEE,2013:813-818.

[6] Praditwong K. Solving software module clustering problem by evolutionary algorithms[C]//Computer Science and Software Engineering (JCSSE), 2011 Eighth International Joint Conference on.IEEE,2011:154-159.

[7] Praditwong K, Harman M, Yao X. Software module clustering as a multi-objective search problem[J].Software Engineering, IEEE Transactions on,2011,37(2):264-282.

[8] K?hler V, Fampa M, Araújo O. Mixed-Integer Linear Programming Formulations for the Software Clustering Problem[J].Computational Optimization and Applications,2013,55(1):113-135.

[9] Hall M, Walkinshaw N, Mcminn P. Supervised software modularisation[C]//Software Maintenance (ICSM), 2012 28th IEEE International Conference on.IEEE,2012:472-481.

[10] Chen Y. Reverse engineering[C]//Practical reusable UNIX software.John Wiley & Sons, Inc.,1995:177-208.

[11] Chen Y, Gansner E R, Koutsofios E. A C++ data model supporting reachability analysis and dead code detection[J].Software Engineering, IEEE Transactions on,1998,24(9):682-694.

[12] Korn J, Chen Y, Koutsofios E. Chava: Reverse engineering and tracking of java applets[C]//Reverse Engineering, 1999. Proceedings. Sixth Working Conference on.IEEE,1999:314-325.

[13] Laramee R S. Bob’s Concise Introduction to Doxygen[R].Technical Technical report, The Visual and Interactive Computing Group, Computer Science Department, Swansea University, Wales, UK, 2007.(available online), 2011.

[14] Muhammad S, Maqbool O, Abbasi A Q. Evaluating relationship categories for clustering object-oriented software systems[J].IET software,2012,6(3):260-274.

[15] Wielemaker J, Schrijvers T, Triska M, et al. Swi-prolog[J].Theory and Practice of Logic Programming,2012,12(1-2):67-96.

[16] Alves T L, Hage J, Rademaker P. A comparative study of code query technologies[C]//Source Code Analysis and Manipulation (SCAM), 2011 11th IEEE International Working Conference on.IEEE,2011:145-154.

A LOGIC-BASED CONSTRUCTION TOOL FOR JAVA MODULE DEPENDENCY GRAPH

Du Xin Zhao Kang*Ni Youcong Shen Zhipeng

(FacultyofSoftware,FujianNormalUniversity,Fuzhou350108,Fujian,China)

The application of the software module clustering algorithms based on Java module dependency graph (MDG) is limited to certain degree due to the shortage in construction tools for Java MDG at present. Aiming at this issue, we proposed a logic-based Java module dependency graph construction tool named TL4JMDG. Supported by open source frameworks JTransformer and tuProlog, TL4JMDG tool achieves the extraction of Java modules relationship and the generation of MDGs in logical way. In this paper we illustrate the design and implementation of TL4JMDG tool and give the comparison of time consuming in regard to MDG construction by TL4JMDG tool and the Chava-based tool. The TL4JMDG tool has good configurability, extensibility and performance, and this makes the current existing MDG-based clustering algorithms be better applied in Java software module clustering.

Software module clustering Module relationship Module dependency graph JTransformer

2014-08-09。國(guó)家自然科學(xué)基金項(xiàng)目(61305079);武漢大學(xué)軟件工程國(guó)家重點(diǎn)實(shí)驗(yàn)室開(kāi)放基金項(xiàng)目(SKLSE2012-09-28)。杜欣,副教授,主研領(lǐng)域:演化計(jì)算,基于搜索的軟件設(shè)計(jì)。趙康,碩士生。倪友聰,副教授。沈志鵬,本科生。

TP311

A

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

猜你喜歡
結(jié)點(diǎn)邏輯聚類(lèi)
刑事印證證明準(zhǔn)確達(dá)成的邏輯反思
邏輯
基于八數(shù)碼問(wèn)題的搜索算法的研究
創(chuàng)新的邏輯
基于K-means聚類(lèi)的車(chē)-地?zé)o線通信場(chǎng)強(qiáng)研究
女人買(mǎi)買(mǎi)買(mǎi)的神邏輯
基于高斯混合聚類(lèi)的陣列干涉SAR三維成像
基于Spark平臺(tái)的K-means聚類(lèi)算法改進(jìn)及并行化實(shí)現(xiàn)
一種層次初始的聚類(lèi)個(gè)數(shù)自適應(yīng)的聚類(lèi)方法研究
基于Raspberry PI為結(jié)點(diǎn)的天氣云測(cè)量網(wǎng)絡(luò)實(shí)現(xiàn)
洪雅县| 乐亭县| 桃源县| 历史| 弋阳县| 凤山县| 望江县| 札达县| 徐汇区| 大英县| 新巴尔虎右旗| 扎鲁特旗| 新建县| 永宁县| 乌拉特前旗| 会东县| 遵义市| 平塘县| 宁明县| 文山县| 小金县| 绥宁县| 岱山县| 汤阴县| 台安县| 塘沽区| 平泉县| 留坝县| 安溪县| 新绛县| 昭苏县| 瓮安县| 赣榆县| 汉源县| 文安县| 齐河县| 丽江市| 五常市| 新余市| 临颍县| 蒙自县|