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