• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

    杜 欣 趙 康 倪友聰 沈志鵬

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

    杜 欣 趙 康*倪友聰 沈志鵬

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

    目前Java模塊依賴圖MDG(Module Dependency Graph)的構(gòu)建工具還比較稀缺,從一定程度上限制了基于MDG圖的軟件模塊聚類算法的應(yīng)用。針對(duì)這一問題,提出一種基于邏輯的Java模塊依賴圖構(gòu)建工具TL4JMDG(the tool logic-based for Java MDG)。在開源框架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圖的聚類算法能更好地應(yīng)用于Java軟件模塊聚類。

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

    0 引 言

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

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

    1 背景知識(shí)

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

    1.1 MDG圖

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

    本文TL4JMDG工具是一種面向Java程序的MDG構(gòu)建工具。下面舉一小例子解釋Java程序與MDG圖之間的映射關(guān)系。下面的程序代碼和圖1分別是Java程序片斷及其所對(duì)應(yīng)的MDG圖。程序聲明了包demo,并定義了Person、Student和Teacher三個(gè)類及其之間的關(guān)系。程序中第9行和10行指示了Student類和Teacher類分別與Person類之間存在繼承關(guān)系;第11行和第13行定義了Teacher類與Student類之間存在關(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框架來構(gòu)建Java程序的MDG圖。

    1.2 JTransformer框架

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

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

    圖2 Java程序的語法樹

    Java語法樹結(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)的類型確定。這些項(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類型結(jié)點(diǎn)和extendsT類型引用關(guān)系的謂詞定義。對(duì)一個(gè)具體的Java程序,其語法樹中的每個(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í)庫。表1示意了圖2對(duì)應(yīng)的邏輯事實(shí)庫。

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

    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í)庫,但已有的SWIProlog編程框架不能很好支持與Java語言的多范型編程。因而,TL4JMDG工具使用tuProlog框架作為編程環(huán)境。將SWIProlog邏輯事實(shí)庫變換為tuProlog的邏輯事實(shí)庫。下面簡(jiǎn)單介紹tuProlog框架。

    1.3 tuProlog框架

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

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

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

    圖3示意了TL4JMDG工具的工作流程。其主要包括配置文件生成、tuProlog邏輯事實(shí)庫生成和MDG圖生成三個(gè)階段。在第一階段中,用戶指定Java程序文件和輸出MDG文件的位置,以及需要提取的模塊關(guān)系和權(quán)值等信息,并通過UI模塊將這些信息寫入到配置文件中。在第二階段中,借助JTransformer框架先將Java程序轉(zhuǎn)化為SWIProlog邏輯事實(shí)庫,再通過SWI2tu轉(zhuǎn)換器將該邏輯事實(shí)庫轉(zhuǎn)換為tuProlog邏輯事實(shí)庫。SWI2tu轉(zhuǎn)換器主要針對(duì)SWIProlog和tuProlog邏輯事實(shí)庫在字符編碼和指令格式上的差異,進(jìn)行相應(yīng)的字符編碼轉(zhuǎn)換和指令格式轉(zhuǎn)換。在第三階段中,MDG圖生成器MDGCreator先讀入配置文件,決定要抽取的模塊關(guān)系,再基于tuProlog邏輯事實(shí)庫抽取對(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í)庫上查詢一種特定的模塊關(guān)系,并根據(jù)查詢結(jié)果構(gòu)建出一個(gè)中間MDG圖;在第三階段中,MDGController控制器根據(jù)關(guān)系的權(quán)重值,通過合并各個(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ì)類圖。其包括extractorPkg、mdgPkg和prologPkg三個(gè)包。

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

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

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

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

    限于篇幅下面僅以繼承關(guān)系提取器ExtractorOfExt為例說明提取器類的實(shí)現(xiàn)方案。圖6的時(shí)序圖描述了當(dāng)MDGController控制器向ExtractorOfExt提取器發(fā)出生成繼承關(guān)系MDG圖的請(qǐng)求后,ExtractorOfExt提取器的工作流程。具體而言:ExtractorOfExt提取器根據(jù)Java程序邏輯事實(shí)庫的位置實(shí)例化Theory對(duì)象,然后創(chuàng)建Prolog對(duì)象,再請(qǐng)求該P(yáng)rolog對(duì)象加載實(shí)例化后的Theory對(duì)象;接著ExtractorOfExt提取器發(fā)送查詢模塊繼承關(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給出了查詢繼承關(guān)系的邏輯程序文本。在表2中,第1行到第3行用于查詢一個(gè)類的合格名。第4行表示查詢?cè)擃愐玫母割?。?行到第7行表示獲取父類的ID(由_clsID指示)后,再查詢?cè)摳割惖暮细耦惷1?的程序文本由Prolog引擎在Java程序邏輯事實(shí)上解析執(zhí)行后,可獲得Java程序中所有類的繼承關(guān)系,并能確定每個(gè)繼承關(guān)系中子類和父類的合格類名。

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

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

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

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

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

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

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

    (4) MDGController類定義了兩個(gè)屬性mdgParas和mdgs,以及mergeMDG和getMDG兩個(gè)方法。mdgParas和mdgs屬性分別用于保存MDGPara類對(duì)象列表和MDG類對(duì)象列表。mergeMDG方法合并mdgs中的各個(gè)中間MDG,返回最終的MDG。而getMDG方法則根據(jù)mdgParas中各對(duì)象,依次獲取提取器類名,動(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è)提取器類名,依次生成對(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ī)模的開源Java軟件為實(shí)驗(yàn)對(duì)象,并與Chava*工具(通過擴(kuò)展Chava而開發(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ī)模從小到大的開源Java軟件。三款開源軟件的基本情況如表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*訪問數(shù)據(jù)庫較TL4JMDG直接訪問內(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é) 語

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

    [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)室開放基金項(xiàng)目(SKLSE2012-09-28)。杜欣,副教授,主研領(lǐng)域:演化計(jì)算,基于搜索的軟件設(shè)計(jì)。趙康,碩士生。倪友聰,副教授。沈志鵬,本科生。

    TP311

    A

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

    猜你喜歡
    結(jié)點(diǎn)邏輯聚類
    刑事印證證明準(zhǔn)確達(dá)成的邏輯反思
    法律方法(2022年2期)2022-10-20 06:44:24
    邏輯
    創(chuàng)新的邏輯
    Ladyzhenskaya流體力學(xué)方程組的確定模與確定結(jié)點(diǎn)個(gè)數(shù)估計(jì)
    基于DBSACN聚類算法的XML文檔聚類
    女人買買買的神邏輯
    37°女人(2017年11期)2017-11-14 20:27:40
    基于改進(jìn)的遺傳算法的模糊聚類算法
    一種層次初始的聚類個(gè)數(shù)自適應(yīng)的聚類方法研究
    自適應(yīng)確定K-means算法的聚類數(shù):以遙感圖像聚類為例
    基于Raspberry PI為結(jié)點(diǎn)的天氣云測(cè)量網(wǎng)絡(luò)實(shí)現(xiàn)
    麻豆国产av国片精品| 亚洲av美国av| 欧美性感艳星| 老司机影院成人| 狂野欧美白嫩少妇大欣赏| 性欧美人与动物交配| 精品久久久久久久久久久久久| 欧美最黄视频在线播放免费| 一级黄色大片毛片| 久久精品人妻少妇| 婷婷色综合大香蕉| 又粗又爽又猛毛片免费看| 97超视频在线观看视频| www日本黄色视频网| 悠悠久久av| 亚洲最大成人中文| 久久久久国产精品人妻aⅴ院| 欧美高清成人免费视频www| 亚洲性久久影院| 欧美最黄视频在线播放免费| 婷婷亚洲欧美| 特级一级黄色大片| 午夜免费男女啪啪视频观看 | 精品午夜福利视频在线观看一区| 中文字幕精品亚洲无线码一区| 好男人在线观看高清免费视频| 麻豆av噜噜一区二区三区| 久久久久性生活片| 欧美色视频一区免费| 精品一区二区三区视频在线| 亚洲欧美日韩高清专用| 亚洲一区高清亚洲精品| 乱系列少妇在线播放| 99久国产av精品| 亚洲天堂国产精品一区在线| 久久久久久久久久久丰满| 久久久精品大字幕| 国产色婷婷99| 国产大屁股一区二区在线视频| 国产高清三级在线| 亚洲国产高清在线一区二区三| 日韩精品有码人妻一区| 欧美成人a在线观看| 女人被狂操c到高潮| 亚洲中文日韩欧美视频| 国产爱豆传媒在线观看| 国产黄a三级三级三级人| 免费观看的影片在线观看| 日本在线视频免费播放| 国产黄片美女视频| 3wmmmm亚洲av在线观看| 少妇猛男粗大的猛烈进出视频 | 国产精品不卡视频一区二区| 久久欧美精品欧美久久欧美| 日本免费a在线| 久久久久性生活片| 日韩,欧美,国产一区二区三区 | 久久久久久九九精品二区国产| 久久久久久久久久黄片| 国产片特级美女逼逼视频| av在线老鸭窝| 亚洲一区二区三区色噜噜| 色吧在线观看| 成人午夜高清在线视频| 欧美成人精品欧美一级黄| 91在线观看av| av天堂在线播放| 国产亚洲91精品色在线| 色噜噜av男人的天堂激情| 久久精品国产亚洲av香蕉五月| av视频在线观看入口| 久久久国产成人精品二区| 免费av观看视频| 欧美+亚洲+日韩+国产| 麻豆国产97在线/欧美| 精品人妻熟女av久视频| 国产精品99久久久久久久久| 亚洲欧美日韩无卡精品| 免费搜索国产男女视频| 午夜久久久久精精品| 国产高清不卡午夜福利| 国产成年人精品一区二区| 男插女下体视频免费在线播放| 精品久久久久久久久久久久久| 欧美区成人在线视频| 丰满的人妻完整版| 久久午夜福利片| 日本三级黄在线观看| 亚洲av二区三区四区| 色噜噜av男人的天堂激情| 少妇猛男粗大的猛烈进出视频 | 女同久久另类99精品国产91| 一进一出好大好爽视频| 最近手机中文字幕大全| 国产欧美日韩精品一区二区| 在线观看av片永久免费下载| 深爱激情五月婷婷| 精品久久久久久成人av| 全区人妻精品视频| 亚洲精品色激情综合| 亚洲最大成人手机在线| 日日摸夜夜添夜夜添小说| 国产午夜福利久久久久久| 亚洲av成人av| 1024手机看黄色片| 欧美潮喷喷水| 久久热精品热| 99九九线精品视频在线观看视频| 久久草成人影院| 日韩,欧美,国产一区二区三区 | 日韩一本色道免费dvd| 男女边吃奶边做爰视频| 久久精品国产99精品国产亚洲性色| 国产精品99久久久久久久久| 国产精品一及| 日韩亚洲欧美综合| 色5月婷婷丁香| 少妇人妻一区二区三区视频| videossex国产| 中文在线观看免费www的网站| 在线a可以看的网站| 久久99热这里只有精品18| 午夜福利在线观看吧| 一本精品99久久精品77| 精品一区二区三区视频在线观看免费| 国产精品爽爽va在线观看网站| 久久精品国产亚洲网站| 99久久九九国产精品国产免费| 亚洲欧美成人综合另类久久久 | 91在线精品国自产拍蜜月| 女的被弄到高潮叫床怎么办| 全区人妻精品视频| 床上黄色一级片| 免费观看的影片在线观看| 亚洲久久久久久中文字幕| 床上黄色一级片| 国产精品福利在线免费观看| 深夜a级毛片| av免费在线看不卡| 日本 av在线| 在线免费观看的www视频| 国产精品精品国产色婷婷| 亚洲av免费高清在线观看| 亚洲国产精品国产精品| 伊人久久精品亚洲午夜| 国产av在哪里看| 久久久成人免费电影| 一区福利在线观看| 成人漫画全彩无遮挡| 成人无遮挡网站| 高清毛片免费观看视频网站| av在线天堂中文字幕| 日韩欧美免费精品| 国产亚洲av嫩草精品影院| 夜夜夜夜夜久久久久| 精品久久久久久久久久免费视频| 欧美+日韩+精品| 国产一级毛片七仙女欲春2| 村上凉子中文字幕在线| 我的女老师完整版在线观看| 校园人妻丝袜中文字幕| 亚洲欧美中文字幕日韩二区| 精品99又大又爽又粗少妇毛片| 成人一区二区视频在线观看| 精品不卡国产一区二区三区| 久久99热这里只有精品18| 男人和女人高潮做爰伦理| a级一级毛片免费在线观看| 久久久午夜欧美精品| 日本爱情动作片www.在线观看 | 午夜影院日韩av| 欧美zozozo另类| 精品人妻一区二区三区麻豆 | 亚洲精品久久国产高清桃花| 亚洲中文日韩欧美视频| 久久精品夜夜夜夜夜久久蜜豆| 国产成人影院久久av| 亚洲av中文字字幕乱码综合| 男人舔女人下体高潮全视频| 一区二区三区免费毛片| 在线国产一区二区在线| 日韩欧美一区二区三区在线观看| 美女 人体艺术 gogo| 特级一级黄色大片| 十八禁网站免费在线| 麻豆精品久久久久久蜜桃| 国产毛片a区久久久久| 久久精品国产清高在天天线| 国产日本99.免费观看| 伦理电影大哥的女人| 色吧在线观看| 男人狂女人下面高潮的视频| 日本黄大片高清| 99久久无色码亚洲精品果冻| 亚洲国产精品成人综合色| 人妻少妇偷人精品九色| 国产三级在线视频| 香蕉av资源在线| 菩萨蛮人人尽说江南好唐韦庄 | 欧美成人精品欧美一级黄| 欧美人与善性xxx| 国产爱豆传媒在线观看| 久久人人爽人人爽人人片va| 国产片特级美女逼逼视频| 久久久欧美国产精品| 久久热精品热| 九九热线精品视视频播放| 色视频www国产| 日日摸夜夜添夜夜添av毛片| 日韩人妻高清精品专区| 我要搜黄色片| 久久久国产成人精品二区| 亚洲丝袜综合中文字幕| 亚洲精品一区av在线观看| 我要看日韩黄色一级片| 欧美xxxx性猛交bbbb| 国产精品野战在线观看| 全区人妻精品视频| 亚洲精品在线观看二区| 男女之事视频高清在线观看| 国产又黄又爽又无遮挡在线| 精品人妻偷拍中文字幕| 少妇裸体淫交视频免费看高清| 国产v大片淫在线免费观看| 亚洲三级黄色毛片| 午夜福利18| 99久久无色码亚洲精品果冻| 免费人成在线观看视频色| 午夜福利18| 欧美日韩乱码在线| 麻豆精品久久久久久蜜桃| 国产aⅴ精品一区二区三区波| 18+在线观看网站| 一进一出抽搐gif免费好疼| 国产精品免费一区二区三区在线| 亚洲婷婷狠狠爱综合网| 亚洲不卡免费看| 黄色一级大片看看| 少妇被粗大猛烈的视频| av视频在线观看入口| 精品午夜福利视频在线观看一区| 久久精品国产亚洲av涩爱 | 大香蕉久久网| 色噜噜av男人的天堂激情| 99国产精品一区二区蜜桃av| 久99久视频精品免费| 成人综合一区亚洲| 菩萨蛮人人尽说江南好唐韦庄 | 狂野欧美激情性xxxx在线观看| 中文字幕免费在线视频6| 12—13女人毛片做爰片一| 久久精品综合一区二区三区| 美女高潮的动态| 国产精品一区二区性色av| 亚洲av成人av| 51国产日韩欧美| 国产精品国产高清国产av| 床上黄色一级片| 内地一区二区视频在线| 亚洲精品一区av在线观看| 一本一本综合久久| 成人高潮视频无遮挡免费网站| 丰满的人妻完整版| 精品久久久久久成人av| 18禁黄网站禁片免费观看直播| 一级毛片我不卡| 国产免费男女视频| a级毛片a级免费在线| 久久久久精品国产欧美久久久| 亚洲真实伦在线观看| 欧美一区二区国产精品久久精品| 一卡2卡三卡四卡精品乱码亚洲| 九九在线视频观看精品| 少妇猛男粗大的猛烈进出视频 | 我的老师免费观看完整版| 五月玫瑰六月丁香| 级片在线观看| 日韩人妻高清精品专区| 国产真实乱freesex| 小说图片视频综合网站| 一级毛片电影观看 | 美女免费视频网站| 午夜激情福利司机影院| ponron亚洲| 99久久无色码亚洲精品果冻| 最近最新中文字幕大全电影3| 亚洲国产高清在线一区二区三| 两个人视频免费观看高清| 中文字幕av在线有码专区| 久久亚洲精品不卡| 欧美另类亚洲清纯唯美| av在线亚洲专区| 天堂动漫精品| 老女人水多毛片| 国产三级中文精品| 我要搜黄色片| 联通29元200g的流量卡| 大型黄色视频在线免费观看| 好男人在线观看高清免费视频| 欧美日本视频| 久久精品综合一区二区三区| 久久久久久久久久久丰满| 久久精品人妻少妇| 国产淫片久久久久久久久| 日日摸夜夜添夜夜添av毛片| 高清日韩中文字幕在线| 一卡2卡三卡四卡精品乱码亚洲| 人妻夜夜爽99麻豆av| av在线天堂中文字幕| 免费一级毛片在线播放高清视频| 最好的美女福利视频网| 久久久久九九精品影院| 黄色配什么色好看| 国产欧美日韩精品亚洲av| 热99re8久久精品国产| 国产极品精品免费视频能看的| 亚洲精品粉嫩美女一区| 中文字幕免费在线视频6| 身体一侧抽搐| 欧美激情在线99| 97超碰精品成人国产| 人人妻人人澡欧美一区二区| 国产黄a三级三级三级人| 日本一本二区三区精品| 日日啪夜夜撸| 禁无遮挡网站| 伦理电影大哥的女人| 99在线人妻在线中文字幕| 亚洲第一电影网av| 日韩人妻高清精品专区| 91久久精品国产一区二区成人| 欧美绝顶高潮抽搐喷水| 国产欧美日韩精品亚洲av| 国产久久久一区二区三区| 久久热精品热| 成人无遮挡网站| 婷婷亚洲欧美| 淫秽高清视频在线观看| 国产在视频线在精品| 色在线成人网| 国产欧美日韩精品亚洲av| 波多野结衣巨乳人妻| 久久久久久久亚洲中文字幕| 国产白丝娇喘喷水9色精品| 丰满人妻一区二区三区视频av| 中国美女看黄片| 免费人成在线观看视频色| 国产爱豆传媒在线观看| 成年女人永久免费观看视频| 亚洲国产精品成人久久小说 | 亚洲va在线va天堂va国产| 亚洲精品乱码久久久v下载方式| 老熟妇乱子伦视频在线观看| 精品国产三级普通话版| 男女视频在线观看网站免费| 最近最新中文字幕大全电影3| 色哟哟哟哟哟哟| 精品免费久久久久久久清纯| 女人被狂操c到高潮| 中国美白少妇内射xxxbb| 永久网站在线| 亚洲国产欧美人成| 国内久久婷婷六月综合欲色啪| 变态另类成人亚洲欧美熟女| 婷婷六月久久综合丁香| 欧美成人a在线观看| 又爽又黄a免费视频| 99久久久亚洲精品蜜臀av| 亚洲aⅴ乱码一区二区在线播放| 亚洲图色成人| 国产精品久久久久久久电影| 国产av不卡久久| 三级毛片av免费| 日本熟妇午夜| 国产一区二区亚洲精品在线观看| 欧美丝袜亚洲另类| 国产伦精品一区二区三区视频9| 嫩草影院精品99| 亚洲精品456在线播放app| av福利片在线观看| 波多野结衣高清作品| 色av中文字幕| 99久久久亚洲精品蜜臀av| 久久天躁狠狠躁夜夜2o2o| 国产高清三级在线| 久久99热这里只有精品18| 晚上一个人看的免费电影| 三级国产精品欧美在线观看| 欧美成人a在线观看| 少妇的逼水好多| 长腿黑丝高跟| 99热这里只有是精品在线观看| 悠悠久久av| 在线观看午夜福利视频| 免费一级毛片在线播放高清视频| 亚洲av美国av| 性欧美人与动物交配| 大型黄色视频在线免费观看| 亚洲欧美日韩卡通动漫| 国产免费男女视频| 黑人高潮一二区| 级片在线观看| 村上凉子中文字幕在线| 最近的中文字幕免费完整| 国产免费男女视频| 亚洲18禁久久av| 又爽又黄无遮挡网站| 在线观看免费视频日本深夜| 91久久精品国产一区二区成人| 大又大粗又爽又黄少妇毛片口| 亚州av有码| 女人被狂操c到高潮| 九九在线视频观看精品| 欧美性猛交╳xxx乱大交人| 赤兔流量卡办理| 久久精品国产亚洲av香蕉五月| 亚洲人与动物交配视频| 亚洲最大成人中文| 天美传媒精品一区二区| 99久国产av精品| 免费在线观看影片大全网站| 午夜亚洲福利在线播放| 尤物成人国产欧美一区二区三区| 成人国产麻豆网| 男插女下体视频免费在线播放| 国产精品人妻久久久久久| 日韩中字成人| 麻豆乱淫一区二区| 不卡视频在线观看欧美| 亚洲欧美成人综合另类久久久 | 国产精品永久免费网站| 高清午夜精品一区二区三区 | 尾随美女入室| 欧美bdsm另类| 久久韩国三级中文字幕| 中文字幕免费在线视频6| 欧美又色又爽又黄视频| 日本a在线网址| 久久久久久久久久久丰满| 久久精品人妻少妇| 久久久色成人| 免费av观看视频| eeuss影院久久| 91久久精品国产一区二区成人| 国产高清三级在线| 日韩一本色道免费dvd| 久久九九热精品免费| 99久久精品一区二区三区| 人人妻人人澡欧美一区二区| 男女之事视频高清在线观看| 又爽又黄a免费视频| 久久久午夜欧美精品| 乱人视频在线观看| 啦啦啦观看免费观看视频高清| 波多野结衣高清无吗| 日本a在线网址| 日本一本二区三区精品| 国产精品福利在线免费观看| 校园春色视频在线观看| 国产欧美日韩精品一区二区| 亚洲精品日韩在线中文字幕 | 亚洲熟妇熟女久久| 毛片女人毛片| 久久亚洲国产成人精品v| 国产一区二区三区av在线 | 不卡一级毛片| 夜夜爽天天搞| 联通29元200g的流量卡| 一进一出抽搐gif免费好疼| 舔av片在线| 国产单亲对白刺激| 少妇高潮的动态图| 一进一出好大好爽视频| 久久人人爽人人片av| 真实男女啪啪啪动态图| 成人亚洲欧美一区二区av| 亚洲av免费在线观看| 色播亚洲综合网| 日本三级黄在线观看| 欧美日韩在线观看h| 免费在线观看成人毛片| 婷婷精品国产亚洲av在线| 女人被狂操c到高潮| av天堂在线播放| 嫩草影院新地址| 亚洲成人av在线免费| 99久久无色码亚洲精品果冻| 久久精品国产亚洲av涩爱 | av卡一久久| 亚洲色图av天堂| 精品一区二区三区视频在线| 人妻夜夜爽99麻豆av| 1024手机看黄色片| 少妇人妻一区二区三区视频| 干丝袜人妻中文字幕| 91麻豆精品激情在线观看国产| 又爽又黄a免费视频| 国产不卡一卡二| 男女那种视频在线观看| 亚洲一级一片aⅴ在线观看| 亚洲国产精品国产精品| 九九热线精品视视频播放| 亚洲中文日韩欧美视频| 少妇猛男粗大的猛烈进出视频 | 国产高清激情床上av| 最近最新中文字幕大全电影3| 国产精品,欧美在线| 99精品在免费线老司机午夜| 国产私拍福利视频在线观看| 蜜桃亚洲精品一区二区三区| 五月玫瑰六月丁香| 99精品在免费线老司机午夜| 一个人免费在线观看电影| 国产伦精品一区二区三区四那| 免费电影在线观看免费观看| 国产午夜精品论理片| 舔av片在线| 欧美日韩综合久久久久久| 高清毛片免费观看视频网站| 午夜影院日韩av| 久久精品国产99精品国产亚洲性色| 99国产极品粉嫩在线观看| 亚洲久久久久久中文字幕| 久久这里只有精品中国| 一级毛片aaaaaa免费看小| 长腿黑丝高跟| 精品少妇黑人巨大在线播放 | 精品熟女少妇av免费看| 中文字幕精品亚洲无线码一区| 人妻夜夜爽99麻豆av| 久久精品国产99精品国产亚洲性色| 国产精品福利在线免费观看| 老司机午夜福利在线观看视频| 99热只有精品国产| av在线老鸭窝| 日本精品一区二区三区蜜桃| 欧美日本视频| 搡老妇女老女人老熟妇| 精品熟女少妇av免费看| 欧美在线一区亚洲| 成人永久免费在线观看视频| 22中文网久久字幕| 91午夜精品亚洲一区二区三区| 免费高清视频大片| 别揉我奶头~嗯~啊~动态视频| 久久久久国产网址| 国产亚洲91精品色在线| 亚洲欧美中文字幕日韩二区| 欧美最黄视频在线播放免费| 蜜臀久久99精品久久宅男| 91久久精品国产一区二区成人| 日本一本二区三区精品| 人人妻,人人澡人人爽秒播| 18禁在线无遮挡免费观看视频 | 99视频精品全部免费 在线| 国产成人福利小说| 久久久久精品国产欧美久久久| 精华霜和精华液先用哪个| 国产欧美日韩一区二区精品| 日韩,欧美,国产一区二区三区 | 欧美xxxx性猛交bbbb| 黄色一级大片看看| 色综合站精品国产| 男女那种视频在线观看| 日日撸夜夜添| 欧美成人免费av一区二区三区| 午夜a级毛片| 看片在线看免费视频| 97在线视频观看| 人妻丰满熟妇av一区二区三区| 免费看a级黄色片| 久久久a久久爽久久v久久| 国产成人福利小说| 看十八女毛片水多多多| 一区二区三区免费毛片| 日本黄色视频三级网站网址| 久久久国产成人精品二区| 3wmmmm亚洲av在线观看| 国产av麻豆久久久久久久| 俄罗斯特黄特色一大片| 成人高潮视频无遮挡免费网站| 国产真实乱freesex| 此物有八面人人有两片| 国产大屁股一区二区在线视频| 精品午夜福利在线看| 日韩一区二区视频免费看| 国模一区二区三区四区视频| 国产一级毛片七仙女欲春2| 国产v大片淫在线免费观看| 久久亚洲精品不卡| 老女人水多毛片| 校园人妻丝袜中文字幕| 日韩欧美在线乱码| 淫秽高清视频在线观看| 亚洲精品乱码久久久v下载方式| 日韩人妻高清精品专区| 久久久久国内视频| 日韩在线高清观看一区二区三区| АⅤ资源中文在线天堂| 亚洲无线观看免费| 日韩强制内射视频| 99热精品在线国产| 欧美日韩精品成人综合77777| 亚洲精品乱码久久久v下载方式| 亚洲美女黄片视频| 国产精品一区www在线观看| 国产成人精品久久久久久| 国产欧美日韩一区二区精品| 精品人妻熟女av久视频| 日本熟妇午夜| 成人无遮挡网站| 国产欧美日韩精品一区二区| 国产伦精品一区二区三区视频9| 极品教师在线视频| 国产成人精品久久久久久|