论文部分内容阅读
面向对象设计模式不仅能改善软件灵活性、可扩展性和可维护性,而且还可以为管理者提供控制软件系统质量的手段。随着软件的日益庞大,人们需要有能通过自动分析从设计文档或者源文件中挖掘设计模式及其实例的技术,亦即模式挖掘技术,以期发现已有系统的高层体系结构,有效地支持产品演化和维护,丰富设计模式库。模式挖掘技术已经成为计算机科学与技术的一个重要研究课题。尽管人们做了相当的研究,但设计模式挖掘领域依然存在着许多急待解决的问题,比如:通常人们对设计模式的描述是非形式化的,这种描述存在着二义性;同一设计模式可对应许多设计模式实例;许多挖掘算法只针对特定的一个或者几个模式,方法不具有普遍性,且挖掘效率和质量有待提高。这些问题严重制约了这一领域研究成果的有效性和通用性。 为了推动设计模式挖掘技术的发展,针对现有模式挖掘研究中存在的问题,从理论和应用两个层面进行了研究,以期解决设计模式描述、模式之间的关系和设计模式挖掘算法等关键问题,为设计模式挖掘提供新的方法和有效途径。 分析了设计模式中设计信息的不同表示方式,以及类/属性/方法之间的关系,改进了已有的基于谓词逻辑的设计模式结构描述方法,增加了对方法型构关系的表示,提出了用于描述设计模式的负准则的概念,以进一步提高设计模式描述的准确性。将设计模式的谓词表示形式转换为带属性的关系图表示形式。当用属性关系图表示设计模式和软件系统时,设计模式挖掘过程也就是求它们所对应的图的子图同构问题。对两种表示方法之间关系的分析表明当用于设计模式挖掘时这两种表示方法是等效的。 已有的模式挖掘方法往往只考虑大粒度的设计模式,而忽略作为设计模式组成部分的基本设计模式。在分析基本设计模式与设计模式之间的关系的基础上,提出基于子图同构的模式挖掘方法。基于基本设计模式与设计模式以及设计模式之间存在的包含关系,改进了已有的基于分解的子图同构算法。该算法对于大型模式图集合具有良好的增量挖掘能力。 模式实例变体的存在使得设计模式挖掘很困难。识别模式的变体是模式发现要解决的主要任务之一。分析了不同的结构型变体之间产生结构性差异的原因;提出了对应的基于继承关系、聚合关系和调用关系的传递性的变体挖掘方法,以及对设计模式候选集归并的后处理方法。提出的方法不仅能挖掘设计模式的变体,还能够用于设计模式的验证。 已有的设计模式都是由人工分析提炼出来的。为了自动发现新的未知模式,改进了基于概念格的设计模式发现方法。该方法不仅关心类以及类之间的关系,还关心类成员方法之间的调用和型构关系。为了减少算法的复杂度,设计了递推的背景构建算法,该算法能根据领域知识缩减元素数量,从而提高概念格构造和模式挖掘的效率。给出了候选模式的合并和过滤方法。改进的形式概念分析方法可以用于找出已有系统中频繁使用的复杂结构,经过人工筛选和分析总结,可以发现新的模式。