王雷 宋慧娜 王文發(fā)
摘? ?要:使用軟件工具自動識別UML(Unified Modeling Language)模型中包含的設(shè)計模式,可以幫助軟件開發(fā)人員理解、維護(hù)和重構(gòu)大型軟件項(xiàng)目. 現(xiàn)有設(shè)計模式識別方法大多是將所考慮的若干個特征分別進(jìn)行匹配,準(zhǔn)確率和時間性能不高. 為此,提出了一種基于相似度評分的設(shè)計模式識別方法. 首先,給出該方法的基本流程;然后,提出一種基于有向圖/矩陣的設(shè)計模式和系統(tǒng)的表示;接著,詳細(xì)討論了基于相似度評分的模式實(shí)例搜索算法;最后,實(shí)現(xiàn)了該方法的支撐工具,并使用該工具對一個開源項(xiàng)目進(jìn)行了設(shè)計模式的識別.該方法不是將所考慮的若干個特征分別進(jìn)行匹配,而是使用總特征矩陣進(jìn)行匹配. 實(shí)驗(yàn)結(jié)果表明,相對于將所考慮的若干個特征分別進(jìn)行匹配的方法,該方法的識別準(zhǔn)確率和時間性能更高.
關(guān)鍵詞:設(shè)計模式識別;準(zhǔn)確率;時間性能;有向圖;軟件逆向工程
中圖分類號:TP311.5 文獻(xiàn)標(biāo)志碼:A
A Design Pattern Detection Method Based on Similarity Scoring
WANG Lei1,2?,SONG Huina1,WANG Wenfa1
(1.College of Mathematics and Computer Science,Yan′an University,Yan′an 716000,China;
2.School of Mechanical Electronic and Information Engineering,China University of Mining
and Technology (Beijing),Beijing? 100083,China)
Abstract:Detecting design pattern instances in UML models by using software tools can help software developers to understand,maintain and reconstruct the large-scale software projects. Most of the existing methods for automatic design pattern detection let the several considered features match separately,so that the accuracy rate and time performance are not high enough. Therefore,a design pattern detection method based on similarity scoring was proposed. First,the basic process of this method was given; then,a representation of system and patterns based on directed graph/matrix was proposed; the pattern instance search algorithm based on similarity scoring was discussed in detail; finally,a supporting tool for this method was implemented,and design patterns in an open source project were detected by using this tool. This method does not let the several considered features match separately,but uses the integral feature matrixes to match. The experimental results show that,compared with the design pattern detection methods which let the several considered features match separately,the detection accuracy rate and time performance of this method are higher.
Key words:design pattern detection;accuracy;time performance;directed graph;software re-engineering
設(shè)計模式使人們可以更加簡單方便地利用成功的設(shè)計和體系結(jié)構(gòu),其在大型軟件項(xiàng)目的開發(fā)中得到了廣泛的應(yīng)用. 從源代碼或統(tǒng)一建模語言(UML,unified modeling language)模型中自動識別出相應(yīng)的設(shè)計模式,可以為面向設(shè)計模式的軟件理解、維護(hù)和重構(gòu)等活動提供自動化支持[1].因此,設(shè)計模式的自動識別成為目前逆向軟件工程領(lǐng)域的一個研究熱點(diǎn).
近年來,國內(nèi)外的相關(guān)文獻(xiàn)已經(jīng)提出很多設(shè)計模式自動識別的方法.許涵斌等[2]、Yu等[3]、Bernardi等[4-6]將系統(tǒng)和設(shè)計模式以有向圖的形式呈現(xiàn),通過圖同構(gòu)判定算法在系統(tǒng)圖中尋找模式子圖;Dong等[7-8]將泛化、關(guān)聯(lián)、抽象、不同的調(diào)用方式等8個設(shè)計特征編碼到有向圖/矩陣中,并將8個矩陣組合成一個矩陣,使用模板匹配算法計算系統(tǒng)和設(shè)計模式之間的互相關(guān)值來尋找系統(tǒng)中存在的模式實(shí)例;Tsantalis等[9]將源代碼和設(shè)計模式的關(guān)聯(lián)、泛化、抽象類、對象創(chuàng)建、抽象方法調(diào)用等信息均表示為一個單獨(dú)的有向圖/矩陣,使用相似度評分算法[10]計算各子系統(tǒng)與設(shè)計模式之間的相似度矩陣來尋找子系統(tǒng)中的模式實(shí)例;Costagliola等[11-12]和 Lucia等[13-14]將可縮放矢量圖形(SVG,scalable vector graphics)格式用于源代碼的中間表示,而設(shè)計模式用視覺語言表示,通過將每種模式的視覺語言語法與系統(tǒng)的SVG表示進(jìn)行映射來恢復(fù)模式;Balanyi等[15]使用一種基于XML的語言進(jìn)行設(shè)計模式描述,用Columbus框架分析C ++源代碼并從中構(gòu)建抽象語義圖(ASG,abstract semantic graph),通過將模式與ASG匹配來尋找模式實(shí)例;Bernardi等[16-18]將設(shè)計模式的行為屬性表示為選擇性μ演算公式,將文獻(xiàn)[4-6]得到的候選實(shí)例(Java文件或字節(jié)碼)轉(zhuǎn)換為時序規(guī)范語言(LOTOS,Language of Temporal Ordering Specification)模型,使用模型檢測工具CADP驗(yàn)證候選實(shí)例是否滿足μ演算公式來判斷候選實(shí)例是否為模式實(shí)例;與Bernardi等[16-18]方法類似,Lucia 等[19]使用工具SPIN驗(yàn)證文獻(xiàn)[11-14]得到的候選實(shí)例是否滿足設(shè)計模式的行為屬性轉(zhuǎn)換得到的線性時態(tài)邏輯(LTL,Linear Temporal Logic)公式,來判斷候選實(shí)例是否為模式實(shí)例;Wendehals等[20]將行為型模式的行為特征轉(zhuǎn)換為有限自動機(jī),并將候選實(shí)例的方法調(diào)用與有限自動機(jī)進(jìn)行匹配,以此來判斷候選實(shí)例是否為模式實(shí)例;Zhu等[21]使用LAMBDES系統(tǒng)將待識別系統(tǒng)的UML圖轉(zhuǎn)換為一組一階邏輯(FOL,first order logic)語句,借助定理證明器SPASS驗(yàn)證設(shè)計是否符合用FOL描述設(shè)計模式的結(jié)構(gòu)特征和行為特征[22-24];苗康等[25]借用關(guān)系演算語言UTP描述系統(tǒng)和設(shè)計模式,通過關(guān)系演算算法檢查系統(tǒng)是否滿足模式的屬性;Kim等[26]計算系統(tǒng)每個類的面向?qū)ο蠖攘俊⒔Y(jié)構(gòu)型度量和過程型度量3 種產(chǎn)品度量,并將這些度量與支撐工具中嵌入的模式簽名進(jìn)行比較,根據(jù)匹配程度判斷是否模式實(shí)例;Hayashi等[27]將從待識別系統(tǒng)中抽取到的信息表示為Prolog中的事實(shí),執(zhí)行定義為Prolog中的規(guī)則的檢測條件,來推斷滿足設(shè)計模式條件的類結(jié)構(gòu)的存在;類似工作,Luitel等[28]將待識別系統(tǒng)的類圖和序列圖表示為ASP中的事實(shí),使用ASP求解器輸出分別遵循描述結(jié)構(gòu)模式和行為模式的規(guī)則的結(jié)構(gòu)和行為元素.
綜上所述,國內(nèi)外的相關(guān)文獻(xiàn)已經(jīng)將圖論算
法[2-9]、視覺語言解析技術(shù)[11-14]、XML匹配[15]、形式化驗(yàn)證技術(shù)[16-21,25]、軟件度量的匹配[26]、邏輯推理[27-28]等多種匹配技術(shù)引入到設(shè)計模式的搜索中來. 這些方法大多是將所考慮的若干個特征分別進(jìn)行匹配. 單個特征的匹配并不能保證整體匹配,反之亦然. 此外,多次匹配需要耗費(fèi)大量的時間,因此識別準(zhǔn)確率和時間性能并不高.
本文提出一種基于相似度評分的設(shè)計模式識別方法,并實(shí)現(xiàn)了該方法的支撐工具. 該方法將所考慮的7個特征對應(yīng)的矩陣組合成一個總特征矩陣,并使用總特征矩陣進(jìn)行匹配,具有更高的識別準(zhǔn)確率和時間性能.
1? ?基本流程
本文將關(guān)聯(lián)、泛化、依賴、聚合、抽象類、對象創(chuàng)建、抽象方法調(diào)用等特征對應(yīng)的矩陣組合成一個總特征矩陣,通過計算子系統(tǒng)和設(shè)計模式的總特征矩陣之間的相似度矩陣來尋找子系統(tǒng)中的模式實(shí)例. 基本流程如圖1所示.
2? ?系統(tǒng)和設(shè)計模式的表示
本文使用相似度評分算法計算系統(tǒng)和設(shè)計模式之間的相似度矩陣來尋找系統(tǒng)中存在的模式實(shí)例,因此需要將系統(tǒng)和設(shè)計模式表示為有向圖/矩陣形式. 本文考慮關(guān)聯(lián)、泛化、依賴、聚合、抽象類、對象創(chuàng)建、抽象方法調(diào)用7個特征. 設(shè)系統(tǒng)和設(shè)計模式的類圖為G,類圖G中的類為 c1,c2,…,cn,下面給出系統(tǒng)和設(shè)計模式的矩陣表示的一種形式化定義.
定義1? 類圖G的關(guān)聯(lián)關(guān)系矩陣定義為:
c1? ?c2? ?…? ?cj? …? cn
MAss
G? ? =
rij? ? ? ? ? ? ? ? ? ? (1)
其中
rij = 1,類ci到cj之間存在關(guān)聯(lián)關(guān)系
0,類ci到cj之間不存在關(guān)聯(lián)關(guān)系
類似地可以定義類圖G的泛化關(guān)系矩陣MGen
G? ? 、依賴關(guān)系矩陣MGep
G? ? 、聚合關(guān)系矩陣MAgg
G? ? 和抽象方法調(diào)用矩陣MInv
G? ? .
定義2? ?類圖G的抽象類矩陣定義為:
c1? ?c2? ?…? ?cj? …? cn
MAbs
G? ? =
rij? ? ? ? ? ? ? ? ? ? ?(2)
其中
rij = 1,i = j且類ci為抽象類
0,其他
定義3? ?類圖G的對象創(chuàng)建矩陣定義為:
c1? ?c2? ?…? ?cj? …? cn
MCre
G? ?=
rij? ? ? ? ? ? ? ? ? ? ?(3)
其中
rij = 1,i = j且類ci為抽象類
0,其他
為提高識別的準(zhǔn)確率和時間性能,本文借鑒Dong等人[7-8]的方法,將所考慮的7個特征對應(yīng)的7個有向圖/矩陣組合成一個有向圖/矩陣. 我們給每個矩陣一個不同素數(shù)的根值,然后將每個矩陣的單元值(x)更改為新值,新值為其根(root)的舊單元值次冪(rootx). 總特征矩陣的每個單元的值為這7個新矩陣中相應(yīng)單元值的乘積. 這里,對于每種模式,我們根據(jù)模式中涉及到每種特征的類的個數(shù)將7個特征進(jìn)行排序,并按照順序?qū)?個特征的根值分別設(shè)為素數(shù)2、3、5、7、9、11和13. 例如,對于裝飾模式,有2個類涉及到關(guān)聯(lián)關(guān)系,有4個類涉及到泛化關(guān)系,有0個類涉及到依賴關(guān)系和聚合關(guān)系,有3個類涉及到抽象方法調(diào)用,有2個類涉及到抽象類,2個類涉及到對象創(chuàng)建,則將關(guān)聯(lián)、泛化、依賴、聚合、抽象方法調(diào)用、抽象類、對象創(chuàng)建的根值分別設(shè)為素數(shù)9、13、3、2、11、7和5. 由此可得類圖G關(guān)于模式p的總特征矩陣定義如下.
定義4? ?設(shè) 分別為關(guān)聯(lián)、泛化、依賴、聚合、抽象方法調(diào)用、抽象類、對象創(chuàng)建的關(guān)于p的根值,則類圖G的關(guān)于模式p的總特征矩陣定義為:
c1? ?c2? ?…? ?cj? …? cn
MInteg
G,p? ? =
rij? ? ? ? ? ? ? ? ? ? ?(4)
其中
rij = root1·root2·root3·root4·
root5·root6·root7
以裝飾模式和開源項(xiàng)目JHotDraw 5.2為例說明設(shè)計模式和系統(tǒng)的表示. 為了便于說明問題,僅考慮JHotDraw 5.2的一個子系統(tǒng)(見3.1節(jié)),記為s. 裝飾模式和子系統(tǒng)s的UML類圖描述分別如圖2和圖3所示.
Component、 ConcreteComponent、 Decorator和ConcreteDecorator分別為c1、c2、c3和c4,根據(jù)結(jié)構(gòu)特征矩陣的定義,可得:
c1? ?c2? ?c3? ?c4
MAss
decorator? = 0? ? 0? ? 0? ? 0
0? ? 0? ? 0? ? 0
1? ? 0? ? 0? ? 0
0? ? 0? ? 0? ? 0? ? ? (5)
c1? ?c2? ?c3? ?c4
MGen
decorator? ? = 0? ? 0? ? 0? ? 0
1? ? 0? ? 0? ? 0
1? ? 0? ? 0? ? 0
0? ? 0? ? 1? ? 0? ? ? (6)
MDep
decorator? ? = Aggdecorator = 0? ? ?(7)
c1? ?c2? ?c3? ?c4
MInv
decorator? ? = 0? ? 0? ? 0? ? 0
0? ? 0? ? 0? ? 0
1? ? 0? ? 0? ? 0
0? ? 0? ? 1? ? 1? ? ? (8)
c1? ?c2? ?c3? ?c4
MAbs
decorator? ? = 1? ? 0? ? 0? ? 0
0? ? 0? ? 0? ? 0
0? ? 0? ? 1? ? 0
0? ? 0? ? 0? ? 0? ? ? (9)
c1? ?c2? ?c3? ?c4
MCre
decorator? ? = 0? ? 0? ? 0? ? 0
0? ? 0? ? 0? ? 0
1? ? 0? ? 0? ? 0
0? ? 0? ? 0? ? 0? ? ? (10)
根據(jù)總特征矩陣的定義,可得:
類似地,記Storable、Figure、AbstractFigure、CompositeFigure、DecoratorFigure、GroupFigure和BorderDecorator分別為C1、C2、C3、C4、C5、C6和C7,可以得到子系統(tǒng)s的總特征矩陣為
(12)
3? ?設(shè)計模式的自動識別
3.1? ?子系統(tǒng)的劃分
為從系統(tǒng)中搜索模式實(shí)例,需要將待考查系統(tǒng)劃分為若干子系統(tǒng). 根據(jù)待識別的設(shè)計模式所含繼承層的個數(shù),劃分子系統(tǒng)有以下兩種方法.
1)如果設(shè)計模式不包含繼承層或只包含一個繼承層,則將待考查系統(tǒng)的每個繼承層劃分為一個獨(dú)立的子系統(tǒng). 此時,子系統(tǒng)的個數(shù)和系統(tǒng)的繼承層個數(shù)相等. 該類設(shè)計模式包括15種設(shè)計模式:生成器、原型、單例、組合、裝飾、享元、代理、職責(zé)鏈、命令、解釋器、備忘錄、狀態(tài)、策略、模板方法和訪問者.
2)如果設(shè)計模式包含兩個繼承層,則每次從所有的繼承層中選擇兩個劃分為一個子系統(tǒng). 此時,子系統(tǒng)的個數(shù)為,其中m為系統(tǒng)中繼承層的個數(shù). 該類設(shè)計模式包括8種設(shè)計模式:抽象工廠、工廠方法、適配器、橋接、外觀、迭代器、中介者和觀察者.
3.2? ?相似度矩陣的計算
對于每種設(shè)計模式,首先根據(jù)其所含繼承層的個數(shù),將待考查系統(tǒng)劃分為m或個子系統(tǒng)(m為系統(tǒng)中繼承層的個數(shù)). 然后依次計算各子系統(tǒng)的關(guān)于該模式的總特征矩陣和設(shè)計模式總特征矩陣之間的相似度矩陣.
以裝飾模式和子系統(tǒng)s為例來說明相似度評分的計算. 經(jīng)計算可得(函數(shù)Similarity()對應(yīng)文獻(xiàn)[7]第3.1節(jié)中的相似度評分算法),子系統(tǒng)s和裝飾模式之間的相似度矩陣為:
MSimilarity
s,decorator? ?= Similarity(MInteg
decorator,decorator,MInteg
s,decorator)=
c1? ? ? ? ? ? ? ?c2? ? ? ? ? ? ? c3? ? ? ? ? ? ? c4
0.000 0? ? ?0.000 0? ? ?0.000 0? ? ?0.000 0
0.996 6? ? ?0.000 2? ? ?0.001 2? ? ?0.000 2
0.000 3? ? ?0.000 0? ? ?0.000 3? ? ?0.000 0
0.000 0? ? ?0.002 0? ? ?0.000 0? ? ?0.000 0
0.001 2? ? ?0.000 0? ? ?0.998 4? ? ?0.000 2
0.000 0? ? ?0.000 0? ? ?0.000 0? ? ?0.000 0
0.000 0? ? ?0.000 0? ? ?0.000 0? ? ?0.000 1 (13)
3.3? ?基于相似度矩陣的設(shè)計模式識別
獲取子系統(tǒng)和某種設(shè)計模式之間的相似度矩陣 MSimilarity
s,p? ? ? ? ? 后,就可以根據(jù)相似度矩陣找出系統(tǒng)中包含的該種設(shè)計模式的實(shí)例.
通常情況下,對于每種設(shè)計模式,每個子系統(tǒng)只包含該設(shè)計模式的一個實(shí)例,此時每個模式角色關(guān)聯(lián)子系統(tǒng)中的一個類[29].提出的方法目前只考慮子系統(tǒng)包含待識別模式的一個實(shí)例的情況,多個實(shí)例的情況將在后續(xù)的研究中進(jìn)行討論.
相似度矩陣MSimilarity
s,p? ? ? ? ? 的元素表示兩個類之間的相似度得分. 所以,需要選擇一個值,當(dāng)相似度得分大于該值時,就認(rèn)為這兩個類匹配.將該值稱為匹配臨界值,記為v.
根據(jù)子系統(tǒng)和某種設(shè)計模式之間的相似度矩陣識別該種設(shè)計模式的算法如下:
步驟1? ?依次判斷MSimilarity
s,p? ? ? ? ? 的每列,若至少存在一列中的某個元素的值大于等于匹配臨界值v,則說明該子系統(tǒng)包含模式p;否則不包含.
步驟2? ?若包含模式p,則需要找到該模式的每個角色在子系統(tǒng)s中關(guān)聯(lián)的類. 依次考查MSimilarity
s,p? ? ? ? ? 的每列,從中找出值最大的元素,則該列對應(yīng)的設(shè)計模式角色關(guān)聯(lián)該元素所在行對應(yīng)的子系統(tǒng)類.
若臨界值v選取過大,則可能會遺漏掉某些包含的設(shè)計模式實(shí)例;而若v選取過小則可能會出現(xiàn)誤判的情況. 根據(jù)經(jīng)驗(yàn),這里取v = 0.9.
這里繼續(xù)以裝飾模式和子系統(tǒng)s為例來說明基于相似度矩陣的設(shè)計模式識別. 易見MSimilarity
s,p? ? ? ? ? 的第1列第2行元素的值大于等于匹配臨界值v = 0.9,則說明該子系統(tǒng)包含裝飾模式實(shí)例.
在c1對應(yīng)的列中,數(shù)值最大的元素對應(yīng)C1行,則說明子系統(tǒng)中的類C1關(guān)聯(lián)裝飾模式的角色類c2. 類似地,可以得到子系統(tǒng)中的類C4、C5、C7分別關(guān)聯(lián)裝飾模式的角色類c2、c3、c4. 在圖3中,灰色填充的類關(guān)聯(lián)裝飾模式的角色.
4? ?實(shí)驗(yàn)及結(jié)果分析
目前本文方法的支撐工具EasyDetector 1.0已經(jīng)實(shí)現(xiàn). 該工具采用MFC開發(fā),輸入UML類圖模型,輸出識別結(jié)果. 為說明本文方法的有效性,使用文獻(xiàn)[26]方法、文獻(xiàn)[9]方法和本文方法對開源項(xiàng)目JHotDraw 5.2、JRefactory 2.6.24和JUnit 3.7進(jìn)行了設(shè)計模式的識別.
表1~3和表4~6分別列出了文獻(xiàn)[26]方法、文獻(xiàn)[9]方法和本文方法的支撐工具對JHotDraw 5.2進(jìn)行設(shè)計模式識別的識別準(zhǔn)確率和CPU時間花費(fèi).
表1 ~ 表3中準(zhǔn)確率的評估是基于以下術(shù)語進(jìn)行的:
1)真陽性(TP,true positive); 2)假陽性(FP,false positive);3)假陰性(FN,false negative);4)精確率(precision);5)召回率(recall).
以上術(shù)語的定義詳見文獻(xiàn)[1].
現(xiàn)有方法大多是將所考慮的若干個特征分別進(jìn)行匹配,識別準(zhǔn)確率和時間性能不高.
由表1、表2和表3可知,文獻(xiàn)[26]方法和
文獻(xiàn)[9]方法的JHotDraw 5.2平均精確率和召回率分別為68.9%/71.3%、74.9%/96.2%,JRefactory 2.6.24平均精確率和召回率分別為54.3%/76.0%、79.4%/88.1%,JUnit 3.7平均精確率和召回率分別為52.8%/81.9%、60.0%/100.0%. 而本文方法使用總特征矩陣進(jìn)行匹配,使得平均精確率和召回率較之文獻(xiàn)[26]方法和文獻(xiàn)[9]方法更高,JHotDraw 5.2平均精確率和召回率達(dá)到83.1%97.9%,JRefactory 2.6.24達(dá)到85.0%/92.6%,JUnit 3.7達(dá)到75.8%/100.0%.
由表4、表5和表6可知,對于JHotDraw 5.2,文獻(xiàn)[26]方法和文獻(xiàn)[9]方法分別花費(fèi)8 884ms和7 658 ms,而本文方法僅用5 953 ms;對于JRefactory 2.6.24,文獻(xiàn)[26]方法和文獻(xiàn)[9]方法分別花費(fèi)35 534 ms和29 777 ms,而本文方法僅用24 407 ms;對于JUnit 3.7,文獻(xiàn)[26]方法和文獻(xiàn)[9]方法分別5 774 ms和4 799 ms,而本文方法僅用3 572 ms. 可以看出,計算總特征矩陣花費(fèi)了額外的時間,使得本文方法的預(yù)處理階段花費(fèi)了更多時間. 然而通過計算總特征矩陣,本文只需要進(jìn)行一次匹配,使得與文獻(xiàn)[26]方法和文獻(xiàn)[9]方法相比本文的設(shè)計模式識別階段節(jié)省大量時間.
根據(jù)以上分析可知,本文方法可以對設(shè)計模式進(jìn)行識別,且準(zhǔn)確率和時間性能更高.
5? ?結(jié)? ?論
現(xiàn)有設(shè)計模式識別方法大多是將所考慮的若干個特征分別進(jìn)行匹配,限制了其準(zhǔn)確率和時間性能. 本文方法將所考慮的7個特征對應(yīng)的矩陣組合成一個總特征矩陣,并使用總特征矩陣進(jìn)行匹配,改善了識別準(zhǔn)確率和時間性能.
目前該方法仍存在一些缺陷和不足.今后的主要工作如下:
1)目前所考慮的7個特征均是靜態(tài)特征,后期將研究如何結(jié)合靜態(tài)結(jié)構(gòu)與設(shè)計模式的動態(tài)特征綜合進(jìn)行識別.
2)提出的方法目前僅考慮子系統(tǒng)包含待識別模式的一個實(shí)例的情況,多個實(shí)例的情況將在后續(xù)的研究中進(jìn)行討論.
3)本文目前的識別規(guī)則均是從設(shè)計模式的理論描述中獲取的,后期將使用機(jī)器學(xué)習(xí)從實(shí)際軟件系統(tǒng)中獲取識別規(guī)則.
參考文獻(xiàn)
[1]? ? RASOOL G,STREITFDERT D. A survey on design pattern recovery techniques [J]. International Journal of Computer Science Issues,2011,8(6):251—260.
[2]? ? 許涵斌,張學(xué)林,鄭曉梅,等. 一種基于結(jié)構(gòu)查詢的UML設(shè)計模式識別方法[J]. 計算機(jī)科學(xué),2014,41(11):50—55.
XU H B,ZHANG X L,ZHENG X M,et al. UML design pattern recognition method based on structured query [J].Computer Science,2014,41(11):50—55. (In Chinese)
[3]? ? YU D,ZHANG Y,CHEN Z. A comprehensive approach to the recovery of design pattern instances based on sub-patterns and method signatures [J]. Journal of Systems & Software,2015,103:1—16.
[4]? ? BERNARDI M L,LUCCA G A D. Model-driven detection of design patterns [C]// IEEE International Conference on Software Maintenance. Timisoara:IEEE Computer Society,2010:1—5.
[5]? ? BeRNARDI M L,CIMITILE M,LUCCA G A D. A model-driven graph-matching approach for design pattern detection [C]// Working Conference on Reverse Engineering. Beverly:IEEE,2013:172—181.
[6]? ? BERNARDI M L,CIMITILE M,LUCCA G D. Design pattern detection using a DSL‐driven graph matching approach [J]. Journal of Software Evolution & Process,2014,26(12):1233—1266.
[7]? ? DONG J,SUN Y,ZHAO Y. Design pattern detection by template matching [C]// The 23rd Annual ACM Symposium on Applied Computing. Fortaleza:DBLP,2008:765—769.
[8]? ? DONG J,ZHAO Y,SUN Y. A matrix-based approach to recovering design patterns [J]. IEEE Transactions on Systems,Man,and Cybernetics - Part A:Systems and Humans,2009,39(6):1271—1282.
[9]? ? TSANTALIS N,CHATZIGEORGIOU A,STEPHANIDES G,et al. Design pattern detection using similarity scoring [J]. IEEE Transactions on Software Engineering,2006,32(11):896—909.
[10]? BLONDEL V D,GAJARDO A,HEYMANS M,et al. A measure of similarity between graph vertices:applications to synonym extraction and web searching [J]. SIAM Review,2004,46(4):647—666.
[11]? COSTAGLIOLA G,LUCIA A D,DEUFEMIA V,et al. Design pattern recovery by visual language parsing [C]// European Conference on Software Maintenance and Reengineering. Manchester:IEEE,2005:102—111.
[12]? COSTAGLIOLA G,LUCIA A D,DEUFEMIA V,et al. Case studies of visual language based design patterns recovery[C]// European Conference on Software Maintenance & Reengineering. Los Alamitos:IEEE,2006:1—10.
[13]? LUCIA A D,DEUFEMIA V,GRAVINO C,et al. Behavioral pattern identification through visual language parsing and code instrumentation[C]// European Conference on Software Maintenance & Reengineering. Kaiserslautern:IEEE,2009:99—108.
[14]? LUCIA A D,DEUFEMIA V,GRAVINO C,et al. Design pattern recovery through visual language parsing and source code analysis [J]. Journal of Systems & Software,2009,82(7):1177—1193.
[15]? BALANYI Z,F(xiàn)ERENC R. Mining design patterns from C++ source code [C]// Proc International Conference on Software Maintenance. Amsterdam:IEEE,2003:305—314.
[16]? BERNARDI M L,CIMITILE M,RUVO G D,et al. Improving design patterns finder precision using a model checking approach [C]// The 27th International Conference on Advanced Information Systems Engineering. Stockholm:Springer-Verlag,2015:1—8.
[17]? BERNARDI M L,CIMITILE M,RUVO G D,et al. Integrating model driven and model checking to mine design patterns [M]. Berlin:Springer International Publishing,2015:1—8.
[18]? BERNARDI M L,CIMITILE M,RUVO G D,et al. Model checking to improve precision of design pattern instances identification in OO systems[C]// International Joint Conference on Software Technologies. Lisbon:IEEE,2016:53—63.
[19]? LUCIA A D,DEUFEMIA V,GRAVINO C,et al. Improving behavioral design pattern detection through model checking [C]// European Conference on Software Maintenance and Reengineering. Oldenburg:IEEE,2011:176—185.
[20] WENDEHALS L,ORSO A. Recognizing behavioral patterns at runtime using finite automata [C]// Proceedings of the 2006 International Workshop on Dynamic Analysis. Shanghai:ACM,2006:33—40.
[21]? ZHU H,BAYLEY I,SHAN L,et al. Tool support for design pattern recognition at model level [C]// The 33rd Annual IEEE International Computer Software and Applications Conference. Seatle:IEEE,2009:228—233.
[22]? BAYLEY I,ZHU H. Formalising design patterns in predicate logic [C]// IEEE International Conference on Software Engineering and Formal Methods. IEEE,2007:25—36.
[23]? BAYLEY I,ZHU H. Specifying behavioural features of design patterns in first order logic [C]// The 32nd Annual IEEE International Computer Software and Applications Conference. Turku:IEEE Computer Society,2008:203—210.
[24]? BAYLEY I,ZHU H . Formal specification of the variants and behavioural features of design patterns [J]. Journal of Systems & Software,2010,83(2):209—221.
[25]? 苗康,余嘯,趙吉,等. 基于關(guān)系演算的Java模式識別[J]. 計算機(jī)應(yīng)用研究,2010,27(9):3425—3430.
MIAO K ,YU X ,ZHAO J ,et al. Java design pattern recognition based on relational calculus [J]. Application Research of Computers,2010,27(9):3425—3430. (In Chinese)
[26]? KIM H,BOLDYREFF C. A method to recover design patterns using software product metrics [C]// International Conference on Software Reuse:Advances in Software Reusability. Vienna:Springer-Verlag,2000:318—335.
[27]? HAYASHI S,KATADA J,SAKAMOTO R,et al. Design pattern detection by using meta patterns [J]. IEICE Transactions on Information & Systems,2008,E91-D (4):933—944.
[28]? LUITEL G,STEPHAN M,INCLEZAN D. Model level design pattern instance detection using answer set programming [C]// International Workshop on Modeling in Software Engineering. Austin:ACM,2016:13—19.
[29]? SCANNIELLO G,GRAVINO C,RISI M,et al. Documenting design-pattern instances:a family of experiments on source-code comprehensibility [J].ACM Transactions on Software Engineering and Methodology,2015,24(3):1—35.