肖卓宇,郭 杰,陈 果,徐运标,王林春
(湖南工业职业技术学院信息工程学院,湖南 长沙,410208)
源程序中融入设计模式有助于提高软件的可重用性和可维护性[1-3]。设计模式可在软件开发过程的分析与设计阶段扮演重要角色[4-6]。软件设计模式提供设计级别的应用,常用于解决重复出现的软件设计问题[7-8]。设计模式应用涉及正向工程和逆向工程领域,而设计模式挖掘属于逆向工程的典型应用,有助于程序理解[9-12]、软件维护[13-16]、系统重构等[17-18]。由此可见,设计模式挖掘研究是一项具有积极意义的重要工作。为此,国内外众多科学研究围绕设计模式挖掘展开。
Fontana 提出将源码抽取为中间微结构EDP,CLUE 等,进而筛选设计模式参与者候选集合,最终实现设计模式挖掘[19-20]。Zanoni[21]与Chihada[22]将决策树、随机森林与支持向量机等机器学习算法融入设计模式实例挖掘,并通过多个指标阈值调优实现方法优化。肖卓宇归纳了设计模式变体的普遍性规则[23],并解决了设计模式实例共享问题[24],能一定程度减少假阴性与假阳性挖掘结果。Guéhéneuc[25]构建了23 种标准设计模式挖掘的基准案例库P-mart。课题组先前工作厘析了设计模式挖掘的主要影响因素,关注了工具、语言、变体、实例共享与目录位置等问题[26-28]。
总而言之,现有设计模式挖掘相关工作存在以下问题:
(1)对设计模式设计意图的理解缺乏清晰的认识;
(2)缺乏对设计模式挖掘结果中间表示形式的关注;
(3)对设计模式挖掘的基准系统缺乏有效归纳;
为此,研究针对设计模式挖掘结果有效性评估方法缺乏的问题,提出一种设计模式挖掘有效性评估策略,分类归纳了3 类设计模式的设计意图,整理了设计模式挖掘的基准测试系统,探究了设计模式挖掘结果的中间形式表示,可为设计模式挖掘的理论与应用研究提供支持。
本研究主要贡献如下:
(1)对GOF 设计模式设的计意图分类进行了归纳;
(2)分类探究了设计模式挖掘中间结果表示的形式;
表1 设计模式的设计意图分类
(3)分析归纳了主流设计模式挖掘的基准测试系统;
文章余下部分组织如下:第2 节对设计模式设计意图进行了分类研究;第3 节对设计模式挖掘的基准系统进行归纳与分析;第4 节对设计模式挖掘结果的中间表示形式进行了归纳与分析;第5 节对设计模式挖掘的效度进行了分析;第6节对全文工作进行总结,并对未来工作进行规划。
(Gang of Four,GoF)GoF[29]归纳了23 种经典设计模式,分为结构型设计模式、行为型设计模式和创建型设计模式三类。每种设计模式都有其不同的设计意图、结构、别名和参与者类(角色)等信息,并能提供针对特定设计问题的解决方案。
通过分析文献[2-6]研究后发现,设计意图的获取在设计模式挖掘精确率的所有影响特征指标中起主导性作用,也是软件研发人员选择不同设计模式,甚至是设计模式自动推荐的重要依据。为此,本研究通过表1 对不同设计模式的设计意图进行了详细的归纳与总结。表1 将23 种设计模式分为结构型、行为型与创建型三类,其中,结构型设计模式包括Adapter 模式等7 种;行为型设计模式包括Visitor 模式等11 种;创建型设计模式包括Prototype 模式等5 种。
表1 设计模式的设计意图分类
目前,设计模式挖掘方法或工具使用不同的开源软件系统进行评估,但由于部分方法或工具并未公开,故难以有效评价每种工具或方法的优缺点及适合的测试场景。为了解决这个问题,本研究对国内外主要设计模式挖掘精确率评估测试系统进行了归纳总结,见表2。通过对表2 分析归纳发现,最常用的开放式源系统为JHotDraw、JRefacto ry、JUnit v3.7 和QuickUML 2001 等。进一步深入研究后发现,选择这些软件系统作为设计模式挖掘基准系统的原因归纳为:
(1)使用了多种典型代表性GOF 设计模式;
(2)待挖掘系统为开源系统,且其程序源代码是公开的,这将有助于研究人员对不同设计模式进行标注;
(3)待挖掘系统不仅有小规模测试软件系统,更有中型、大型软件测试系统,甚至是超大型遗产系统。
(4)待挖掘系统主要通过Java 程序语言实现,除此之外也包括少部分C++、Smalltalk、C#语言研发的软件系统。
表2 设计模式挖掘方法/工具的测试系统
通过研究国内外主要研究文献发现,目前设计模式挖掘方法或工具为提高挖掘结果的精确率、F-Score 等指标,习惯于将待挖掘软件系统的源码通过工具抽取为中间结果,如Matrix、Prolog、ASG(Abstract Syntax Graph)、AST(Abstract Syntax Tree)、PADL 等表示形式,进而过滤设计模式参与者角色中与其他参与者不存在任何关系或关系作用不显著的类或接口等。为此,本研究对国内外主要工具或方法的抽取中间表示结果进行了归纳与总结,见表3。
表3 设计模式挖掘方法/工具中间结果表示
现阶段国内外学者对设计模式挖掘的工具或方法进行了相关研究,取得了一定了成效,但同样存在诸多问题,现将主要问题归纳如下5 点:
(1)设计模式的设计意图难以有效获取,故容易出现设计意图相近的设计模式挖掘失败;
(2)现有设计模式挖掘的工具主要支持Java研发的软件系统,缺乏对其他主流程序语言的支持;
(3)设计模式挖掘的基准系统不够完善,尤其缺乏设计模式变体、设计模式附加关系、设计模式共享实例等基准案例库的归纳;
(4)设计模式挖掘实验未公开工具、平台或方法等、故难以有效开展交叉比较实验;
(5)设计模式挖掘实验仅仅针对某种或某几种设计模式,没有进行多元、全面、系统的深入研究;
研究工作归纳为:
(1)提出一种设计模式挖掘有效性评估策略;
(2)分结构型、行为型和创建型三类归纳了设计模式的设计意图;
(3)分析了设计模式挖掘的基准测试系统;
(4)探究了设计模式挖掘结果的中间形式表示;
未来工作致力于:
(1)设计模式挖掘的理论与应用研究;
(2)探究设计模式挖掘的关键技术研究;
(3)设计模式演化后变体基准案例库的完善等。