肖卓宇,郭 杰,陳 果,徐運(yùn)標(biāo),王林春
(湖南工業(yè)職業(yè)技術(shù)學(xué)院信息工程學(xué)院,湖南 長沙,410208)
源程序中融入設(shè)計模式有助于提高軟件的可重用性和可維護(hù)性[1-3]。設(shè)計模式可在軟件開發(fā)過程的分析與設(shè)計階段扮演重要角色[4-6]。軟件設(shè)計模式提供設(shè)計級別的應(yīng)用,常用于解決重復(fù)出現(xiàn)的軟件設(shè)計問題[7-8]。設(shè)計模式應(yīng)用涉及正向工程和逆向工程領(lǐng)域,而設(shè)計模式挖掘?qū)儆谀嫦蚬こ痰牡湫蛻?yīng)用,有助于程序理解[9-12]、軟件維護(hù)[13-16]、系統(tǒng)重構(gòu)等[17-18]。由此可見,設(shè)計模式挖掘研究是一項(xiàng)具有積極意義的重要工作。為此,國內(nèi)外眾多科學(xué)研究圍繞設(shè)計模式挖掘展開。
Fontana 提出將源碼抽取為中間微結(jié)構(gòu)EDP,CLUE 等,進(jìn)而篩選設(shè)計模式參與者候選集合,最終實(shí)現(xiàn)設(shè)計模式挖掘[19-20]。Zanoni[21]與Chihada[22]將決策樹、隨機(jī)森林與支持向量機(jī)等機(jī)器學(xué)習(xí)算法融入設(shè)計模式實(shí)例挖掘,并通過多個指標(biāo)閾值調(diào)優(yōu)實(shí)現(xiàn)方法優(yōu)化。肖卓宇歸納了設(shè)計模式變體的普遍性規(guī)則[23],并解決了設(shè)計模式實(shí)例共享問題[24],能一定程度減少假陰性與假陽性挖掘結(jié)果。Guéhéneuc[25]構(gòu)建了23 種標(biāo)準(zhǔn)設(shè)計模式挖掘的基準(zhǔn)案例庫P-mart。課題組先前工作厘析了設(shè)計模式挖掘的主要影響因素,關(guān)注了工具、語言、變體、實(shí)例共享與目錄位置等問題[26-28]。
總而言之,現(xiàn)有設(shè)計模式挖掘相關(guān)工作存在以下問題:
(1)對設(shè)計模式設(shè)計意圖的理解缺乏清晰的認(rèn)識;
(2)缺乏對設(shè)計模式挖掘結(jié)果中間表示形式的關(guān)注;
(3)對設(shè)計模式挖掘的基準(zhǔn)系統(tǒng)缺乏有效歸納;
為此,研究針對設(shè)計模式挖掘結(jié)果有效性評估方法缺乏的問題,提出一種設(shè)計模式挖掘有效性評估策略,分類歸納了3 類設(shè)計模式的設(shè)計意圖,整理了設(shè)計模式挖掘的基準(zhǔn)測試系統(tǒng),探究了設(shè)計模式挖掘結(jié)果的中間形式表示,可為設(shè)計模式挖掘的理論與應(yīng)用研究提供支持。
本研究主要貢獻(xiàn)如下:
(1)對GOF 設(shè)計模式設(shè)的計意圖分類進(jìn)行了歸納;
(2)分類探究了設(shè)計模式挖掘中間結(jié)果表示的形式;
表1 設(shè)計模式的設(shè)計意圖分類
(3)分析歸納了主流設(shè)計模式挖掘的基準(zhǔn)測試系統(tǒng);
文章余下部分組織如下:第2 節(jié)對設(shè)計模式設(shè)計意圖進(jìn)行了分類研究;第3 節(jié)對設(shè)計模式挖掘的基準(zhǔn)系統(tǒng)進(jìn)行歸納與分析;第4 節(jié)對設(shè)計模式挖掘結(jié)果的中間表示形式進(jìn)行了歸納與分析;第5 節(jié)對設(shè)計模式挖掘的效度進(jìn)行了分析;第6節(jié)對全文工作進(jìn)行總結(jié),并對未來工作進(jìn)行規(guī)劃。
(Gang of Four,GoF)GoF[29]歸納了23 種經(jīng)典設(shè)計模式,分為結(jié)構(gòu)型設(shè)計模式、行為型設(shè)計模式和創(chuàng)建型設(shè)計模式三類。每種設(shè)計模式都有其不同的設(shè)計意圖、結(jié)構(gòu)、別名和參與者類(角色)等信息,并能提供針對特定設(shè)計問題的解決方案。
通過分析文獻(xiàn)[2-6]研究后發(fā)現(xiàn),設(shè)計意圖的獲取在設(shè)計模式挖掘精確率的所有影響特征指標(biāo)中起主導(dǎo)性作用,也是軟件研發(fā)人員選擇不同設(shè)計模式,甚至是設(shè)計模式自動推薦的重要依據(jù)。為此,本研究通過表1 對不同設(shè)計模式的設(shè)計意圖進(jìn)行了詳細(xì)的歸納與總結(jié)。表1 將23 種設(shè)計模式分為結(jié)構(gòu)型、行為型與創(chuàng)建型三類,其中,結(jié)構(gòu)型設(shè)計模式包括Adapter 模式等7 種;行為型設(shè)計模式包括Visitor 模式等11 種;創(chuàng)建型設(shè)計模式包括Prototype 模式等5 種。
表1 設(shè)計模式的設(shè)計意圖分類
目前,設(shè)計模式挖掘方法或工具使用不同的開源軟件系統(tǒng)進(jìn)行評估,但由于部分方法或工具并未公開,故難以有效評價每種工具或方法的優(yōu)缺點(diǎn)及適合的測試場景。為了解決這個問題,本研究對國內(nèi)外主要設(shè)計模式挖掘精確率評估測試系統(tǒng)進(jìn)行了歸納總結(jié),見表2。通過對表2 分析歸納發(fā)現(xiàn),最常用的開放式源系統(tǒng)為JHotDraw、JRefacto ry、JUnit v3.7 和QuickUML 2001 等。進(jìn)一步深入研究后發(fā)現(xiàn),選擇這些軟件系統(tǒng)作為設(shè)計模式挖掘基準(zhǔn)系統(tǒng)的原因歸納為:
(1)使用了多種典型代表性GOF 設(shè)計模式;
(2)待挖掘系統(tǒng)為開源系統(tǒng),且其程序源代碼是公開的,這將有助于研究人員對不同設(shè)計模式進(jìn)行標(biāo)注;
(3)待挖掘系統(tǒng)不僅有小規(guī)模測試軟件系統(tǒng),更有中型、大型軟件測試系統(tǒng),甚至是超大型遺產(chǎn)系統(tǒng)。
(4)待挖掘系統(tǒng)主要通過Java 程序語言實(shí)現(xiàn),除此之外也包括少部分C++、Smalltalk、C#語言研發(fā)的軟件系統(tǒng)。
表2 設(shè)計模式挖掘方法/工具的測試系統(tǒng)
通過研究國內(nèi)外主要研究文獻(xiàn)發(fā)現(xiàn),目前設(shè)計模式挖掘方法或工具為提高挖掘結(jié)果的精確率、F-Score 等指標(biāo),習(xí)慣于將待挖掘軟件系統(tǒng)的源碼通過工具抽取為中間結(jié)果,如Matrix、Prolog、ASG(Abstract Syntax Graph)、AST(Abstract Syntax Tree)、PADL 等表示形式,進(jìn)而過濾設(shè)計模式參與者角色中與其他參與者不存在任何關(guān)系或關(guān)系作用不顯著的類或接口等。為此,本研究對國內(nèi)外主要工具或方法的抽取中間表示結(jié)果進(jìn)行了歸納與總結(jié),見表3。
表3 設(shè)計模式挖掘方法/工具中間結(jié)果表示
現(xiàn)階段國內(nèi)外學(xué)者對設(shè)計模式挖掘的工具或方法進(jìn)行了相關(guān)研究,取得了一定了成效,但同樣存在諸多問題,現(xiàn)將主要問題歸納如下5 點(diǎn):
(1)設(shè)計模式的設(shè)計意圖難以有效獲取,故容易出現(xiàn)設(shè)計意圖相近的設(shè)計模式挖掘失??;
(2)現(xiàn)有設(shè)計模式挖掘的工具主要支持Java研發(fā)的軟件系統(tǒng),缺乏對其他主流程序語言的支持;
(3)設(shè)計模式挖掘的基準(zhǔn)系統(tǒng)不夠完善,尤其缺乏設(shè)計模式變體、設(shè)計模式附加關(guān)系、設(shè)計模式共享實(shí)例等基準(zhǔn)案例庫的歸納;
(4)設(shè)計模式挖掘?qū)嶒?yàn)未公開工具、平臺或方法等、故難以有效開展交叉比較實(shí)驗(yàn);
(5)設(shè)計模式挖掘?qū)嶒?yàn)僅僅針對某種或某幾種設(shè)計模式,沒有進(jìn)行多元、全面、系統(tǒng)的深入研究;
研究工作歸納為:
(1)提出一種設(shè)計模式挖掘有效性評估策略;
(2)分結(jié)構(gòu)型、行為型和創(chuàng)建型三類歸納了設(shè)計模式的設(shè)計意圖;
(3)分析了設(shè)計模式挖掘的基準(zhǔn)測試系統(tǒng);
(4)探究了設(shè)計模式挖掘結(jié)果的中間形式表示;
未來工作致力于:
(1)設(shè)計模式挖掘的理論與應(yīng)用研究;
(2)探究設(shè)計模式挖掘的關(guān)鍵技術(shù)研究;
(3)設(shè)計模式演化后變體基準(zhǔn)案例庫的完善等。
湖南工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報2021年1期