一种基于快速搜索序列的结构型设计模式实例挖掘方法技术

技术编号:13428277 阅读:66 留言:0更新日期:2016-07-29 18:20
本发明专利技术公开了一种基于快速搜索序列的结构型设计模式实例挖掘方法,该方法首先构建一个用于形式化定义设计模式的通用模型,然后将结构型设计模式的形式化定义和待挖掘的软件源码转化为用三元组表示的类关系图;再遍历结构型设计模式的类关系图CRGd,构建其快速搜索序列,最后找出待挖掘的软件源码所包含的所有结构型设计模式实例。本发明专利技术可以优先过滤大量不满足条件的子图,减少挖掘过程的搜索空间,从而提高挖掘过程的执行效率。

【技术实现步骤摘要】

本专利技术属于设计模式挖掘
,具体涉及到一种基于快速搜索序列的结构型设计模式实例挖掘方法
技术介绍
许多软件系统由于业务需要和技术更新等因素不再被使用、维护和更新,即变成了所谓的遗留软件。这些遗留软件通常蕴含了许多领域相关的业务知识和设计思路,合理利用这些遗留软件可以产生巨大的研究和经济价值。然而,在实际的软件设计和开发过程中,由于开发周期紧张、开发过程不规范、用户需求频繁变更等各方面因素,许多遗留软件缺少完整且详细的软件设计和开发文档,这严重阻碍了软件开发和维护人员对这些软件系统的深入理解、升级和维护等工作的顺利进行。所幸,许多遗留软件尤其是基于面向对象编程的软件系统在设计和开发过程中使用了大量的设计模式以提高软件系统的质量。设计模式在软件源码中的使用信息(即设计模式实例)能够在较大程度上反映软件系统的设计思路。其中结构型设计模式主要用于合理有效地组合不同的类或对象,作为一类重要的设计模式,它被广泛用于软件代码的设计之中。因此,准确地从软件源码中识别和挖掘结构型设计模式实例能够有效地帮助软件开发和维护人员快速理解软件系统的原始设计和实现,从而为软件系统的维护、升级更新和二次开发等工作提供便利。现有的结构型设计模式实例挖掘方法通常将设计模式和软件源码转化为某种中间表示形式,从而降低结构型设计模式实例的挖掘难度。其中,部分方法将结构型设计模式和软件源码转化为某种图的形式,然后从表示软件源码的图中找出所有与表示结构型设计模式的图相同构的子图,每个子图的顶点所表示的类即可组成一个候选结构型设计模式实例。这些方法的实现相对简单,并且能够获得较好的实验结果,然而,由于挖掘同构子图问题是一个NP完全问题,这些方法的执行效率普遍较低。
技术实现思路
本专利技术针对现有技术的不足,提供了一种基于快速搜索序列的结构型设计模式实例挖掘方法。本专利技术方法的具体步骤是:步骤(1)构建一个用于形式化定义设计模式的通用模型,其中包含五种描述设计模式基本特征的必备元素,分别为:1)pattern:表示设计模式形式化定义的根元素,描述设计模式的名称;2)role:表示设计模式中所涉及的各个角色,每个角色包含attribute和method两个子元素;3)attribute:表示角色包含的属性信息;4)method:表示角色包含的方法信息;5)relation:表示两个角色之间的关系,为泛化关系、聚合关系、关联关系或依赖关系;使用上述元素形式化定义每种结构型设计模式,并将其保存成XML文档;步骤(2)将结构型设计模式的形式化定义和待挖掘的软件源码转化为用三元组CRG=<V,E,W>表示的类关系图,其中分别包含了结构型设计模式和软件源码的关键结构信息,如设计模式的角色、软件源码中的类、属性、方法以及类与类之间的关系;步骤(3)遍历结构型设计模式的类关系图CRGd,构建其快速搜索序列,用于表示在后续挖掘设计模式实例过程中能够显著减少搜索空间的搜索顺序,可表示为其中mi表示快速搜索序列的一个结点,wi表示结点mi所对应的图中顶点vk的权重信息(包括出度权重和入度权重),ri,j表示结点mi所表示顶点vk到其他结点mj所表示顶点vk'之间的关系;步骤(4)在待挖掘的软件源码的类关系图CRGs中找出某种结构型设计模式的快速搜索序列SEQ中第一个结点m1的所有候选顶点,每个候选顶点的出度权重和入度权重能够分别整除m1的出度权重和入度权重;然后针对m1的每个候选顶点,寻找每个后续结点mi的候选顶点,这些候选顶点的出度权重和入度权重必须能够分别整除对应结点的出度权重和入度权重,并且必须与其余结点的某个候选顶点之间存在对应的关系(即ri,j中定义的结点mi和mj之间的关系);在每次遍历结束后,任取SEQ中每个结点的一个候选顶点所对应的类组合在一起即构成了一个设计模式实例,并将其添加到设计模式实例集合中;所有遍历结束后即可找出待挖掘的软件源码所包含的所有结构型设计模式实例。本专利技术所提供的基于快速搜索序列的结构型设计模式实例挖掘方法由一组功能模块组成,它们包括:结构型设计模式形式化定义模块、类关系图构建模块、快速搜索序列构建模块和结构型设计模式实例挖掘模块。结构型设计模式形式化定义模块根据预先定义的通用模型中声明的5种描述设计模式基本特征的元素形式化定义每一种结构型设计模式,将每种结构型设计模式的形式化定义保存成一份XML文档。类关系图构建模块输入结构型设计模式的形式化定义文档和待挖掘的软件源码,为结构型设计模式和待挖掘的软件源码生成相应的类关系图,其中分别包含了结构型设计模式和待挖掘的软件源码的关键信息,如类的声明信息、属性、方法以及类与类之间的关系(如泛化关系、聚合关系、关联关系和依赖关系等)。快速搜索序列构建模块采用某种特殊的深度优先方式遍历设计模式的类关系图,从而构建一个快速搜索序列,用于指定一个在挖掘结构型设计模式实例过程中所遵循的搜索设计模式中每个角色的顺序。结构型设计模式实例挖掘模块输入结构型设计模式的快速搜索序列和软件源码的类关系图,按照快速搜索序列中定义的搜索顺序从软件源码的类关系图中找出所有满足快速搜索序列中所定义条件的子图,每个子图所对应的类即可组成一个结构型设计模式实例。本专利技术提出的方法采用基于子图同构和快速搜索序列的结构型设计模式实例挖掘策略。与传统的基于子图同构的设计模式实例挖掘方法相比,本专利技术提出了一种更加通用的模型定义设计模式,并在挖掘结构型设计模式实例过程中引入快速搜索序列以提高执行效率。根据快速搜索序列的特征可知,优先寻找候选顶点的角色包含更多的约束条件,待挖掘的软件源码的类关系图中满足其约束条件的候选顶点也越少,因此可以优先过滤大量不满足条件的子图,减少挖掘过程的搜索空间,从而提高挖掘过程的执行效率。附图说明图1结构型设计模式实例挖掘流程图;图2通用模型结构图;图3-1装饰者模式的类图;图3-2装饰者模式的类关系图。具体实施方式本专利技术所提供的基于快速搜索序列的结构型设计模式实例挖掘方法的具体实施方式主要分4步(如图1所示):(1)形式化定义每种结构型设计模式;(2)将结构型设计模式的形式化定义和待挖掘的软件源码分别转化类关系图,其中分别包含了结构型设计模式和待挖掘的软件源码的关键特征;(3)遍历结构型设计模式的类关系图,创建结构型设计模式的快速搜索序列,用于表示在挖掘过程中所遵循的搜索结构型设计模式中每个角色的顺序;(4)根据结构型设计模式的快速搜索序列本文档来自技高网
...

【技术保护点】
一种基于快速搜索序列的结构型设计模式实例挖掘方法,其特征在于该方法的具体步骤是:步骤(1).构建一个用于形式化定义设计模式的通用模型,其中包含5种描述设计模式基本特征的必备元素,分别为:1)pattern:表示设计模式形式化定义的根元素,描述设计模式的名称;2)role:表示设计模式中所涉及的各个角色,每个角色包含attribute和method两个子元素;3)attribute:表示角色包含的属性信息;4)method:表示角色包含的方法信息;5)relation:表示两个角色之间的关系,为泛化关系、聚合关系、关联关系或依赖关系;使用上述元素形式化定义每种结构型设计模式,并将其保存成XML文档;步骤(2).将结构型设计模式的形式化定义和待挖掘的软件源码转化为用三元组CRG=<V,E,W>表示的类关系图,其中:V={v1,v2,...,vn}为类关系图的顶点集合,每个顶点表示结构型设计模式的某个角色或待挖掘的软件源码中的某个类;为类关系图的边集合,每条边表示该边的两个顶点所表示角色之间或类之间的关系,分为泛化关系gen、聚合关系agg、关联关系ass和依赖关系dep;W表示为类关系图中顶点和边赋权重的函数,设顶点vi所表示的角色或类包含α个属性和β个方法,该函数将权重2、3、5、7、11和13分别赋至角色或类所拥有的每一个属性、方法以及每条边所对应的泛化关系gen、聚合关系agg、关联关系ass和依赖关系dep,,每条边的权重即为该边所表示关系的权重,并将2α、2β与从该顶点vi出发的所有边的权值的乘积作为顶点vi的出度权重wout(vi),将指向该顶点vi的所有边的权值的乘积作为顶点vi的入度权重win(vi);步骤(3).遍历每种结构型设计模式的类关系图CRGd,构建其快速搜索序列,可表示为其中mi表示快速搜索序列的一个结点,wi表示结点mi所对应的类关系图CRGd中顶点vk的权重信息,权重信息包括出度权重和入度权重,ri,j表示结点mi所表示顶点vk到其他结点mj所表示顶点vk'之间的关系,“*”表示大于等于一个;快速搜索序列的构建过程分以下两个步骤:1)在CRGd未被访问过的顶点中选择出度权重最大的顶点v,若存在多个具有最大出度权重的顶点,则选择其中入度权重最大的顶点,选择CRGd剩余的边中从顶点v出发的权重最小的边e,将边e的两个顶点添加到已被访问的顶点集合VT中,然后将顶点v作为快速搜索序列SEQ中的一个结点,即记录SEQ中的mi和wi,将边e的信息添加到该结点中,即记录SEQ中的ri,j,并将边e从CRGd中删除;2)找出CRGd剩余的边中从VT出发的所有边,若不存在,则返回步骤1);否则从中选择权重最小的边集合F,针对边集合F的每条边,若边的末尾顶点属于VT,则将该边的信息添加到相应的SEQ结点中,即记录SEQ中的ri,j,并将其从F和CRGd中删除;否则将该边的末尾顶点添加到VT中,并为其创建一个SEQ结点,即记录SEQ中的mi和wi;重复步骤2)直至CRGd中的所有顶点均被访问;步骤(4).在待挖掘的软件源码的类关系图CRGs中找出某种结构型设计模式的快速搜索序列SEQ中第一个结点m1的所有候选顶点,每个候选顶点的出度权重和入度权重必须能够分别整除m1的出度权重和入度权重;然后针对m1的每个候选顶点,寻找每个后续结点mi的候选顶点,这些候选顶点的出度权重和入度权重必须能够分别整除对应结点的出度权重和入度权重,并且必须与其余结点的某个候选顶点之间存在对应的关系,即ri,j中定义的结点mi和mj之间的关系;在每次遍历结束后,任取SEQ中每个结点的一个候选顶点所对应的类组合在一起即构成了一个设计模式实例,并将其添加到设计模式实例集合中;所有遍历结束后即可找出待挖掘的软件源码所包含的所有结构型设计模式实例。...

【技术特征摘要】
1.一种基于快速搜索序列的结构型设计模式实例挖掘方法,其特征在于该方法的具体
步骤是:
步骤(1).构建一个用于形式化定义设计模式的通用模型,其中包含5种描述设计模式
基本特征的必备元素,分别为:1)pattern:表示设计模式形式化定义的根元素,描述设计模
式的名称;2)role:表示设计模式中所涉及的各个角色,每个角色包含attribute和method
两个子元素;3)attri...

【专利技术属性】
技术研发人员:俞东进陈真理张艳艳张海平
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1