肖卓宇,何 锫,黎 妍
(1.中南林業(yè)科技大學(xué) 涉外學(xué)院,湖南 長沙410042;2.廣州大學(xué) 計(jì)算機(jī)科學(xué)與教育軟件學(xué)院,廣東 廣州510006;3.湖南高速公路管理局,湖南 長沙410209)
目前存在多種檢測(cè)設(shè)計(jì)模式[1]的技術(shù)與方法,周曉宇等提出了一套以準(zhǔn)確和通用的設(shè)計(jì)模式識(shí)別技術(shù)為目標(biāo),以層次化特征及靜態(tài)分析為基礎(chǔ)的語義特征識(shí)別技術(shù),并形成了一個(gè)兼顧語義特征及排除性約束的軟件框架[2];文獻(xiàn)[3]提出一種對(duì)設(shè)計(jì)模式檢測(cè)結(jié)果的精度進(jìn)行評(píng)估的方法;文獻(xiàn) [4]使用了抽象的建筑思維語言來記錄設(shè)計(jì)模式的選擇,但其主體的描述和代碼分離,以至于很難被自動(dòng)檢測(cè)。
文獻(xiàn) [5,6]提出對(duì)設(shè)計(jì)模式中主要角色的特征進(jìn)行注釋,該方法側(cè)重了類結(jié)構(gòu),但對(duì)類關(guān)系的檢測(cè)缺乏約束機(jī)制;文獻(xiàn) [7]中允許開發(fā)者依據(jù)源碼,通過面向方面的Java注釋來對(duì)所開發(fā)軟件進(jìn)行不同設(shè)計(jì)模式的選擇,提出了切點(diǎn)的概念,對(duì)類所承擔(dān)不同職責(zé)的角色進(jìn)行了細(xì)化,但缺乏對(duì)角色間變異關(guān)系的識(shí)別。
文獻(xiàn) [8]基于Gamma的GOF模式分類,提出一種自動(dòng)檢測(cè)設(shè)計(jì)模式的方法,但該方法存在局限性,結(jié)構(gòu)型模式檢測(cè)效果較好,但很多創(chuàng)建型模式難以識(shí)別;文獻(xiàn) [9]中指出的多種方法能夠?qū)ξ墨I(xiàn) [8]的不足之處進(jìn)行改進(jìn),但缺乏對(duì)設(shè)計(jì)模式關(guān)系變異的考慮;作者先前的工作實(shí)現(xiàn)了對(duì)23種基于GOF 設(shè)計(jì)模式中不同角色間附加關(guān)系的研究,并對(duì)JhotDraw 系統(tǒng)中設(shè)計(jì)模式關(guān)系變異規(guī)則進(jìn)行了檢測(cè)與分析[10]。
文獻(xiàn) [11]利用UML 類圖對(duì)設(shè)計(jì)模式的抽取結(jié)構(gòu)進(jìn)行了表示,并評(píng)估其效果;Dong Jing等給出了基于模板的匹配方法,通過評(píng)估不同圖形之間子圖的相似性取代頂點(diǎn)相似性,但是在檢測(cè)設(shè)計(jì)模式的變異方面效果較弱,僅適合標(biāo)準(zhǔn)化的設(shè)計(jì)模式[12]。
綜上所述,這些設(shè)計(jì)模式檢測(cè)方法或多或少存在如下問題:①缺乏對(duì)設(shè)計(jì)模式中變異關(guān)系的檢測(cè);②進(jìn)行設(shè)計(jì)模式檢測(cè)時(shí),對(duì)于匹配算法的復(fù)雜度缺乏考慮;③檢測(cè)中沒有分情況對(duì)二者匹配的程度進(jìn)行分析。為此,提出了一個(gè)基于DPS (design pattern string)表達(dá)式的設(shè)計(jì)模式檢測(cè)方法。主要思路是將設(shè)計(jì)模式中的UML 類圖模型轉(zhuǎn)換為DPS表達(dá)式的字符串形式,同時(shí)引入子圖同構(gòu)匹配算法的思想來判斷設(shè)計(jì)模式是否存在于原型設(shè)計(jì)系統(tǒng)中。
如果將設(shè)計(jì)模式中的UML類圖轉(zhuǎn)換為一種圖形,那么在其轉(zhuǎn)換前需要對(duì)UML類圖進(jìn)行相關(guān)的處理,這是因?yàn)檐浖到y(tǒng)中的設(shè)計(jì)模式不會(huì)完全合乎GOF的23種典型模式,大多數(shù)情況下,甚至?xí)霈F(xiàn)設(shè)計(jì)模式中關(guān)系的變異,這將導(dǎo)致系統(tǒng)實(shí)現(xiàn)與功能目標(biāo)的不一致[10]。這些關(guān)系的變異主要表現(xiàn)為類之間附加的關(guān)系(如:關(guān)聯(lián)、泛化、聚合等)。
本文給出了2組圖,一組是所研究系統(tǒng)的部分設(shè)計(jì)圖,如圖1所示,另外一組是其對(duì)應(yīng)的設(shè)計(jì)模式關(guān)系圖。這樣做的優(yōu)點(diǎn)在于減少了二者匹配的時(shí)間復(fù)雜度,并能在一定程度上檢測(cè)出其它文獻(xiàn)中所介紹方法不能識(shí)別的設(shè)計(jì)模式實(shí)例。所采用的軟件系統(tǒng)用UML類圖來設(shè)計(jì),側(cè)重關(guān)注3種關(guān)系 (即:關(guān)聯(lián)、泛化、聚合),圖1中相應(yīng)的3種關(guān)系如圖2~圖4所示。
圖1 軟件系統(tǒng)UML類 (部分)
圖2 系統(tǒng)中類的關(guān)聯(lián)表示
圖3 系統(tǒng)中類的泛化表示
圖4 系統(tǒng)中類的聚合表示
其中圖2~圖4分別對(duì)應(yīng)的鄰接矩陣如下所示。
在進(jìn)行系統(tǒng)設(shè)計(jì)的時(shí)候,設(shè)計(jì)模式的關(guān)系圖可以用類似的方法被抽取出來,第3節(jié)中Singleton模式、Facade模式及Mediator模式有典型的應(yīng)用。所有的關(guān)系圖可以轉(zhuǎn)換為DPS表達(dá)式字符串的形式,其定義如下
其中,R 表示類圖之間的關(guān)系,a表示圖中終節(jié)點(diǎn),Ai表示非終結(jié)點(diǎn) (即:存在迭代的節(jié)點(diǎn)),R 主要表示節(jié)點(diǎn)之間的關(guān)系 (association、generalization、aggregation)。轉(zhuǎn)換算法見表1。
通過將表1算法應(yīng)用到關(guān)系鄰接矩陣,可以得出DPS表達(dá)式,其鄰接矩陣系統(tǒng)設(shè)計(jì)關(guān)系圖(如圖2~圖4所示),這3者DPS形式將對(duì)應(yīng)關(guān)聯(lián)、泛化、聚合關(guān)系,如式 (1)~式(3)所示
表1 Graph_to_DPS轉(zhuǎn)換算法思想
設(shè)計(jì)模式的關(guān)系圖可以用類似的方法提取,Singleton模式、Mediator模式、Facade 模式的關(guān)系圖在第3 節(jié)中描述。
子圖同構(gòu)是一種常用的設(shè)計(jì)模式抽取匹配方法,它能夠發(fā)現(xiàn)所給定圖形的問題原型,稱之為模式,另一個(gè)需要匹配的圖形,謂之目標(biāo)。在此,模式與目標(biāo)分別對(duì)應(yīng)設(shè)計(jì)模式的UML關(guān)系圖與系統(tǒng)設(shè)計(jì)圖。
如滿足條件式 (4)與式 (5),關(guān)系R(R∈V1×V)表示G1=G=(V1,E1)是G=(V,E)的一個(gè)子圖。寫作R:G1→G
條件式 (4)保證R 是V1 到V 的內(nèi)射函數(shù),條件式(5)確保R 中存在G1 的結(jié)構(gòu)。在滿足 (u1,v1)∈E1,(R(u1),R(v1))∈E,所有的u1,v1∈V1 的條件下,可以理解為內(nèi)射函數(shù)R:V1→V 表示為G1→G 的子圖同構(gòu)。
所有圖G1=(V1,E1)到圖G=(V,E)的子圖同構(gòu)集可以表示為N 元關(guān)系S Vn其中|V1|=n。所有子圖同構(gòu)的關(guān)系S定義如下: (v1,…vn)∈S,可推導(dǎo)出子圖同構(gòu)關(guān)系R:G1→G。R()=v1,R()=v2…R()=vn,其中∈G1,vn∈G,i=1,2…n。
給出了兩個(gè)圖G1=(V1,E1)和G=(V,E)與|V1|=n,Eij=Vn表示基于V 的n元關(guān)系,即基于V 的互不相交的頂點(diǎn),其中,這些頂點(diǎn)被加入一些G 中的弧
子圖同構(gòu)的關(guān)系S能夠由式 (6)得出
上述將對(duì)子圖同構(gòu)的每種關(guān)系 (關(guān)聯(lián),泛化,聚合)各自單獨(dú)進(jìn)行檢測(cè),因此,需要了解對(duì)各種關(guān)系是否完全或者是部分存在于系統(tǒng)設(shè)計(jì)中,為此,引入一種匹配算法。算法中S1,S2,S3分貝對(duì)應(yīng)泛化,關(guān)聯(lián),聚合3 種關(guān)系,文中主要關(guān)注這3種關(guān)系,其它關(guān)系也可通過類似方法進(jìn)行編號(hào)。
design_pattern_detection算法思想見表2。
表2 design_pattern_detection算法思想
上述算法考慮到了3種關(guān)系的子圖同構(gòu)的檢測(cè),并給出設(shè)計(jì)模式到系統(tǒng)設(shè)計(jì)圖的各種關(guān)系的映射值Fi,i的取值分別為1、2、3,其中F1對(duì)應(yīng)泛化關(guān)系,F(xiàn)2對(duì)應(yīng)關(guān)聯(lián)關(guān)系,F(xiàn)3對(duì)應(yīng)聚合關(guān)系,若Fi覆蓋圖中所有節(jié)點(diǎn),可以理解為設(shè)計(jì)模式完全存在于系統(tǒng)中,即完全匹配;若Fi覆蓋圖中部分圖中節(jié)點(diǎn),理解為部分存在與系統(tǒng),即局部匹配;否則,為不匹配。
GOF四人幫提出了23種經(jīng)典設(shè)計(jì)模式,每種設(shè)計(jì)模式之間的關(guān)系能夠通過UML 圖表示出來,在檢測(cè)了設(shè)計(jì)模式關(guān)系模型圖的子圖同構(gòu)之后,可得出3種主要的情形:
(1)設(shè)計(jì)模式的關(guān)系圖不是子圖同構(gòu)的模式圖,這屬于設(shè)計(jì)模式不存在的情形。
(2)設(shè)計(jì)模式的關(guān)系圖到模型圖是子圖同構(gòu)。這是設(shè)計(jì)模式存在下的情形。
(3)設(shè)計(jì)模式的關(guān)系圖到模型圖是部分子圖同構(gòu)。這是存在設(shè)計(jì)模式關(guān)系變異下的情形。
設(shè)計(jì)模式常用于軟件的復(fù)用,第1節(jié)中介紹了設(shè)計(jì)模式轉(zhuǎn)換為關(guān)系圖的規(guī)則,進(jìn)而形成了DPS 表達(dá)式形式。DPS表達(dá)式將被其相應(yīng)的軟件系統(tǒng)設(shè)計(jì)中對(duì)應(yīng)的字符串搜索到。子字符串實(shí)質(zhì)是一種子圖同構(gòu)的檢測(cè),其中要搜索的字符串對(duì)應(yīng)于子圖或更大的字符串,在此,搜索整個(gè)圖形中較小的一個(gè)。圖形匹配技術(shù)是非常重要且常用的一種模式匹配方法,所討論的算法可以發(fā)現(xiàn)設(shè)計(jì)模式或存在變異關(guān)系的設(shè)計(jì)模式。
在上述情形 (2)中,設(shè)計(jì)模式的關(guān)系圖部分存在于相應(yīng)的系統(tǒng)設(shè)計(jì)關(guān)系圖,更進(jìn)一步說,關(guān)系圖可以存在多個(gè)映射,這使得在系統(tǒng)設(shè)計(jì)中除了可以多次出現(xiàn)一個(gè)完整的設(shè)計(jì)模式之外,也可能出現(xiàn)設(shè)計(jì)模式中關(guān)系的變異。
值得注意的是,即使存在于設(shè)計(jì)模式中的DPS表達(dá)式已經(jīng)對(duì)應(yīng)了系統(tǒng)設(shè)計(jì)中DPS表達(dá)式,設(shè)計(jì)模式也無法完全與設(shè)計(jì)系統(tǒng)中的子圖匹配,而導(dǎo)致其產(chǎn)生的原因是變異關(guān)系的保存條件不能夠滿足搜索。
這種方法的局限性在于它不能從類的角度出發(fā),來判斷并識(shí)別一些自身是否存在聯(lián)系的設(shè)計(jì)模式,Singleton模式就是典型的代表,其UML圖以及相應(yīng)的關(guān)系如圖5,圖6所示。因?yàn)榇嬖谟幸粋€(gè)自循環(huán),所以不能被寫成基于DPS表達(dá)式形式的字符串,以至于該檢測(cè)方法不適合于這類設(shè)計(jì)模式。
圖5 Singleton關(guān)聯(lián)關(guān)系
圖6 Singleton模式關(guān)系
如匹配到設(shè)計(jì)模式中的每個(gè)關(guān)系,設(shè)計(jì)模式被認(rèn)為是完全匹配系統(tǒng)設(shè)計(jì)的一部分。在此,選擇Facade模式來描述這個(gè)情形。UML 類如圖7 所示,只有關(guān)聯(lián)關(guān)系 (無聚合,泛化關(guān)系),其對(duì)應(yīng)的關(guān)系如圖8所示。
在搜索系統(tǒng)設(shè)計(jì)中的設(shè)計(jì)模式前,需要找出Facade模式的PDS表達(dá)式形式。通過應(yīng)用基于鄰接矩陣的Graph_to_DPS算法 (見表1),得到關(guān)系圖 (如圖8所示),其對(duì)應(yīng)的DPS表達(dá)式如式 (7)、式 (8)所示
圖7 Facade(裝飾)模式
圖8 Facade的關(guān)聯(lián)關(guān)系
要了解它是否存在于系統(tǒng)設(shè)計(jì)中,首先考慮使用式(1),式 (7),式 (8)來得到系統(tǒng)設(shè)計(jì)中基于DPS表達(dá)式形式的關(guān)聯(lián)關(guān)系。為此,對(duì)Facade模式的所有子圖同構(gòu)的關(guān)聯(lián)關(guān)系進(jìn)行計(jì)算。模式中的關(guān)系圖 (如圖8所示)作為G1,系統(tǒng)設(shè)計(jì)中的關(guān)系圖 (如圖2所示)作為G,G1中存在2條邊,即:(a,b)與 (a,c)。因此,N 元關(guān)系包括了Ea,b= {(4,3,*),(4,2,*)},Ea,c= {(4,*,3),(4,*,2)},根據(jù)式 (6),S2=Ea,b∩Ea,c= {(4,3,2),(4,2,3)}。因此S2,1={(a,4),(b,3),(c,2)},S2,2={(a,4),(b,2),(c,3)},S2,3={(a,4),(c,3),(b,2)},S2,4={(a,4),(c,2),(b,3)}。
同時(shí),該模式?jīng)]有涉及其它的關(guān)系,所以無需檢測(cè)系統(tǒng)中其它關(guān)系的DPS表達(dá)式形式 (如泛化,聚合)。因此,依據(jù)表2算法,只需檢測(cè)S2.對(duì)于每個(gè)S2i,可以得出Fi,因此F1= {(a,4),(b,3), (c,2)},F(xiàn)2= {(a,4),(b,2),(c,3)},F(xiàn)3= {(a,4),(c,3),(b,2)},F(xiàn)4={(a,4),(c,2),(b,3)}。這樣可以理解為Facade模式的4個(gè)關(guān)聯(lián)關(guān)系實(shí)例存在于系統(tǒng)設(shè)計(jì)圖中。同時(shí),僅有的關(guān)聯(lián)關(guān)系將減低設(shè)計(jì)模式變異發(fā)生的概率,從而使得檢測(cè)工作的難度降低。
如果沒有匹配到設(shè)計(jì)模式中的每個(gè)關(guān)系,設(shè)計(jì)模式被認(rèn)為是部分匹配到軟件系統(tǒng)設(shè)計(jì)的子部分。而代表性的例子是中介者模式,其直接關(guān)聯(lián)的關(guān)系圖是系統(tǒng)設(shè)計(jì)相應(yīng)的子圖,但是其余的關(guān)系不是這種情況。如設(shè)計(jì)模式中的泛化關(guān)系圖是斷開的,當(dāng)設(shè)計(jì)模式連接的時(shí)候,此時(shí)需要對(duì)系統(tǒng)設(shè)計(jì)的部分存在進(jìn)行檢測(cè)。
檢測(cè)系統(tǒng)設(shè)計(jì)中的中介者模式 (如圖9 所示)之前,需要挖掘基于DPS表達(dá)式形式的中介者模式,通過應(yīng)用基于鄰接矩陣的表1 算法,得到相應(yīng)的兩個(gè)圖形 (如圖10,圖11所示),其對(duì)應(yīng)的兩個(gè)DPS 表達(dá)式 (如式 (9),式(10)所示)
圖9 Mediator(中介者)模式
圖10 Mediator模式泛化表示
圖11 Mediator模式關(guān)聯(lián)表示
為此,首先對(duì)Mediator模式的所有子圖同構(gòu)泛化關(guān)系進(jìn)行計(jì)算。模式中的關(guān)系圖 (如圖10 所示)作為G1,系統(tǒng)設(shè)計(jì)中的泛化關(guān)系圖 (如圖3所示)作為G,G1中存在3條邊,即:(e,a),[(d,b),(d,c)]。因此,N 元關(guān)系包括了Ed,b= {(1,2,*),(1,3,*)},Ed,c= {(1,*,2),(1,*,3)},根 據(jù) 式 (6),S1=Eb,d∩Ec,d={(1,2,3),(1,3,2)}。因此S1,1= {(d,1),(b,2),(c,3)},S1,2= {(d,1),(b,3),(c,2)},S1,3= {(d,1),(c,2),(b,3)},S1,4= {(d,1),(c,3),(b,2)}。
依據(jù)表2算法,檢測(cè)S1.對(duì)于每個(gè)S1i,可以得出Fi,F(xiàn)1= {(d,1),(b,2), (c,3)},F(xiàn)2= {(d,1), (b,3),(c,2)},F(xiàn)3= {(d,1), (c,2), (b,3)},F(xiàn)4={(d,1),(c,3),(b,2)}。
這樣可以理解為Mediator模式目前4個(gè)可能的泛化關(guān)系實(shí)例存在于系統(tǒng)設(shè)計(jì)模型圖中,但是Ee,a= {(1,2),(1,3)},無繼承分支,可理解為無共同的基類,導(dǎo)致不能匹配。依據(jù)式 (2)與式 (9),兩個(gè)基于泛化的DPS表達(dá)式將映射成如下形式 {[(d,1),(b,2),(c,3)],[(d,1),(b,3),(c,2)],[(d,1),(c,2),(b,3)],[(d,1),(c,3),(b,2)]},而 [(e,*),(a,*)]映射不能對(duì)應(yīng)起來。這是因?yàn)樵撚成洳话撛O(shè)計(jì)模式泛化關(guān)系圖的所有頂點(diǎn),因此可以認(rèn)為泛化關(guān)系是局部的匹配。
除此之外,同樣需要關(guān)注Mediator模式的所有子圖同構(gòu)的關(guān)聯(lián)關(guān)系。模式中的關(guān)系圖 (如圖11所示)作為G1,系統(tǒng)設(shè)計(jì)中的關(guān)聯(lián)關(guān)系圖 (如圖2所示)作為G,G1中存在3條邊,即:(d,e),[(a,b),(a,c)]。因此,N 元關(guān)系包括了Ea,b= {(4,2,*),(4,3,*)},Ea,c= {(4,*,2), (4,*,3)},根 據(jù) 式 (6),S1=Ea,b∩Ea,c={(4,2,3),(4,3,2)}因此S2,1= {(a,1),(b,2),(c,3)},S2,2= {(a,1),(b,3),(c,2)},S2,3= {(a,1),(c,2),(b,3)},S2,4= {(a,1),(c,3),(b,2)},依據(jù)表2算法,檢測(cè)S2.對(duì)于每個(gè)S2i,可以得出Fi,F(xiàn)1={(a,1),(b,2),(c,3)},F(xiàn)2= {(a,1),(b,3),(c,2)},F(xiàn)3= {(a,1),(c,2),(b,3)},F(xiàn)4= {(a,1),(c,3),(b,2)}。
可以理解為Mediator模式4個(gè)關(guān)聯(lián)關(guān)系實(shí)例存在于系統(tǒng)設(shè)計(jì)模型圖中,另外,Ed,e= {(5,4)},其對(duì)應(yīng)的系統(tǒng)設(shè)計(jì)圖的映射是節(jié)點(diǎn)5到節(jié)點(diǎn)1,并未存在關(guān)聯(lián)關(guān)系,這使得和圖2只是部分映射,根據(jù)式 (6),得出S2,5=Φ (表示為空),因此,Mediator模式中的關(guān)聯(lián)關(guān)系和系統(tǒng)設(shè)計(jì)的關(guān)聯(lián)關(guān)系是局部的匹配,最終映射沒有覆蓋設(shè)計(jì)模式中的所有頂點(diǎn),也可理解為中介者模式存在關(guān)系的變異[10]。
聚合關(guān)系在Mediator模式中未有體現(xiàn),所以也不能和圖4的基于DPS的聚合關(guān)系映射起來,暫不作考慮。
文章提出了一種檢測(cè)設(shè)計(jì)模式的算法,通過把類之間的關(guān)系有向圖轉(zhuǎn)換為基于DPS表達(dá)式形式的字符串,而后利用基于子圖同構(gòu)的DPS表達(dá)式形式子串的組合與經(jīng)典的GOF設(shè)計(jì)模式匹配,在此基礎(chǔ)上依據(jù)目標(biāo)類與模式類匹配的不同程度分3種情況來檢測(cè)設(shè)計(jì)模式。工作取得了一定的效果,但是該方法不能檢測(cè)存在自循環(huán)關(guān)系的設(shè)計(jì)模式,今后的工作中將不斷的完善原型系統(tǒng),并通過JHOTDraw、ArgoUML、Junit等經(jīng)典的設(shè)計(jì)模式測(cè)試系統(tǒng)對(duì)這3種不同的情況進(jìn)行驗(yàn)證,并為大型遺產(chǎn)系統(tǒng)的重構(gòu)提供有力支持。
[1]Rasool G,Philippow I,Ader PM.Design pattern recovery based on annotations[J].Adv Eng Softw,2010,34 (4):519-526.
[2]ZHOU Xiaoyu,XU Baowen.New research framework for au-tomatic recovery of design pattern [J].Computer Science,2009,36 (5):124-128 (in Chinese). [周曉宇,徐寶文.一個(gè)設(shè)計(jì)模式自動(dòng)識(shí)別技術(shù)研究框架 [J].計(jì)算機(jī)科學(xué),2009,36 (5):124-128.]
[3]Pettersson N,L we W,Nivre J.Evaluation of accuracy in design pattern occurrence detection [J].IEEE Transactions on Software Engineering,2010,36 (4):575-590.
[4]Garlan D,Monroe R,Wile D.Acme:An architecture description interchange language [C]//CASCON 1st Decade High Impact Papers,IBM,2010:159-173.
[5]Rasool G,Philippow I.Design pattern recovery based on annotations[J].Adv Eng Softw,2010,41 (4):519-526.
[6]Sabo M,Poruban J.Preserving design patterns using source code annotations[J].Journal of Computer Science and Control Systems,2009,32 (2):53-56.
[7]Calvagn A,Tramontana E.Delivering dependable reusable components by expressing and enforcing design decisions[C]//Proceedings of Computer Software and Applications Conference Workshop QUORS,2013:493-498.
[8]Gueheneuc YG,Antoniol G.DeMIMA:A multilayered approach for design pattern Identication [J].IEEE Transactions on Software Engineering,2008,34 (5):667-684.
[9]Dong J,Zhao Y,Peng T.A review of design pattern mining techniques[J].International Journal of Software Engineering and Knowledge Engineering,2009,16 (6):823-855.
[10]XIAO Zhuoyu,HE Pei,LI Yan.Study on the extra relationships based on design pattens’s roles [J].Application Research of Computers,2015,32 (7):2042-2045 (in Chinese).[肖卓宇,何锫,黎妍.基于設(shè)計(jì)模式角色的附加關(guān)系 檢 測(cè) 研 究 [J].計(jì) 算 機(jī) 應(yīng) 用 研 究,2015,32 (7):2042-2045.]
[11]Porras GC,Gueheneuc YG.An empirical study on the efficiencey of different design pattern representations in UML class diagrams [J].Empirical Software Engineering,2010,15(5):493-522.
[12]Dong J,Sun Y,Zhao Y.Design pattern detection by template matching [C]//Proceedings of the 23rd Annual ACM,Symposium on Applied Computing,2008:765-769.