当前位置: 首页 > 专利查询>东南大学专利>正文

一种基于软件依赖关系提取的多层架构识别方法技术

技术编号:30305905 阅读:17 留言:0更新日期:2021-10-09 22:42
本发明专利技术公开了一种基于软件依赖关系提取过程的多层架构的识别方法,该识别方法地具体步骤如下:步骤1:目标系统的输入预处理,统一输入形式,剔除无关实体,绑定相关实体,提高源码扫描效率;步骤2,提取源码中隐含的依赖信息,并且计算相关的参考值作为划分的依据,步骤3:根据依赖关系进行初步划分和使用聚类算法对中间层的进一步划分。本方法对于软件层次的划分具有较高的准确度,可用于提高框架反演中架构识别过程的效率,并且辅助进行代码重构。构。构。

【技术实现步骤摘要】
一种基于软件依赖关系提取的多层架构识别方法


[0001]本专利技术属于软件维护中与框架反演和框架识别相关的
,涉及一种基于软件依赖关系 提取的多层架构识别方法。

技术介绍

[0002]多层架构在企业级开发中应用广泛,其在结构上对程序中的实体进行了层次划分,不同的层 次具有不同的职责,协同完成系统某个功能的子操作,多层架构模式便于开发人员对软件系统 的理解,不仅方便开发还提高了系统的可维护性。
[0003]软件演化过程中,系统架构无法确保按照预定计划被构建,可能出现架构偏移或者违背系统 的约束和规则等情况,这种现象正是源于开发过程中对软件频繁的修改。开发人员不能及时对 这种偏差进行检测和干预,导致系统不断偏离设计目标、可维护性变差,甚至影响软件质量。 为了应对这种风险,通常需要对迭代频繁的系统进行架构恢复。
[0004]架构识别是软件架构恢复的关键步骤,可以通过分析目标系统的源代码,得到目标系统架构 层面的抽象表示,在多层架构中,通过层次划分中形成的描述实体分布和依赖轨迹的图像,开 发人员可以加深对当前系统的理解,找到演化过程中发生架构偏移和违反架构原则等问题的关 键结点。

技术实现思路

[0005]本专利技术的目的是提供一种基于软件依赖关系提取的多层架构识别方法,目标是获取目标系统架 构级别的抽象表示,该视图包含各个层次及其内部的程序实体,不同层次内的实体之间的依赖 关系。本方法对于软件层次的划分具有较高的准确度,可用于提高框架反演中架构识别过程的 效率,并且辅助进行代码重构。该方案首先使用软件依赖关系提取程序对静态的软件源码进行 处理并获取用于层次划分的信息,例如获取源码中存在的所有的类的类名、类的路径和类之间 的依赖关系;根据第一步得出的信息统计出每个类的扇入值和扇出值等参考值;以上面获得的 数据为依据对软件的层次进行划分,具体是将源码中的实体初步划分到三个基本的层次中,包 括顶层、中间层和底层,随后利用分层架构的规则对初步划分结果进行调整。使用聚类算法对 中间层次中的类进一步划分,其中聚类算法的依据采用的是实体的结构相似度,具体考察类中 的注解、继承关系和接口实现关系,根据层次划分结果可以对软件中的依赖关系进行清晰的展 示,有助于代码审查和架构偏移关键点的定位。
[0006]为了实现上述目的,本专利技术的技术方案如下,一种基于软件依赖关系提取过程的多层架构 的识别方法,所述方法包括以下步骤:
[0007]步骤1:目标系统源码预处理,
[0008]步骤2:目标系统依赖信息提取,
[0009]步骤3:目标系统层次划分。
[0010]其中,所述步骤1:目标系统源码预处理,具体如下:
[0011]11)对非源码形式的目标系统的编译产物进行反编译,将输入形式统一为静态源码;
[0012]12)剔除系统中没有内容或被注释的类;
[0013]13)将系统中存在接口实现关系或继承关系的多个类进行绑定,参与层次划分时可将其作为 一个实体看待,缩小识别对象的规模。
[0014]其中,步骤2:目标系统依赖信息提取,具体如下:
[0015]21)提取预处理后每个类文件中的标识符信息,包括类名、属性名、方法名、方法形参名和 注解名,构成一个标识符信息表,每个类的标识符信息是其中的一条记录;
[0016]22)扫描标识符列表,提取出可用来初步划分层次的依赖信息,每条依赖信息包括:类名、 该类所在的路径(目录结构)、类所依赖的其他自定义类名,形成依赖信息表;
[0017]23)根据依赖信息表可以构建出若干条目标系统中的依赖路径,将源码中不在任何一条路径 上的类剔除,可认为其不是分层架构的组成部分。
[0018]其中,步骤3:目标系统层次划分,具体如下,
[0019]31)根据依赖信息表,计算出每个实体的扇入值FanIn和扇出值FanOut,其中FanIn是系 统中依赖当前结点的结点个数,FanOut是当前结点所依赖的系统中其他结点的个数;
[0020]32)以扇入扇出值为依据,按照规则进行目标系统的初步划分,三条规则如下所列:
[0021]满足FanIn=0且FanOut>0的结点划分到顶层;
[0022]满足FanIn≠0且FanOut≠0的结点划分到中间层;
[0023]满足FanIn>0且FanOut=0的结点划分到底层;
[0024]33)对初步划分结果中可能存在的“跨层依赖”现象,定义消除规则,然后根据规则对相关 结点进行调整,规则如下所示:
[0025]若某顶层结点跨层依赖底层结点的同时还保持对中间层某结点的依赖,并且该底层结点 没有被中间层依赖,就将底层结点上移到中间层;
[0026]若某顶层结点跨层依赖底层结点的同时不依赖中间层结点,并且该底层结点被中间层依 赖,就将顶层结点下移到中间层;
[0027]若某顶层结点跨层依赖底层结点的同时还依赖中间层结点,被该顶层结点依赖的底层结 点同时也被中间层结点依赖,就比较顶层结点到中间层的扇出值和底层结点到中间层结 点的扇入值,值小的一方移动到中间层;
[0028]若某顶层结点跨层依赖底层结点,同时顶层、底层结点同中间层都没有依赖关系,则顶 层结点或底层结点移动到中间层都可以;
[0029]34)对中间层的结点采用聚类算法进行进一步划分,聚类依据为实体结构相似度,其中使用 结构相似度的依据是同层次实体实现类似的功能并且对相邻的需要使用其功能的层次提供 统一的接口,这里主要考察其代码结构中的注解、继承的父类和实现的接口具有的相似性;
[0030]35)结合中间层聚类结果可得目标系统整体的分层状态,可以绘制分层架构图,图中展现了所划分 的层次及其包含的实体,各层实体之间的依赖路径信息
[0031]有益效果:本专利技术通过对目标系统的源码进行信息提取和分析,获得目标系统的真实架构, 本专利技术与现有技术相比,主要优点有:
[0032](1)本专利技术提出的基于软件依赖关系提取的多层架构的识别方法,较以往的方法增加了预 处理的步骤,包括输入形式的统一和对源码中干扰项的过滤,提高了识别的效率。
[0033](2)本专利技术基于多层架构的发展规律,提出初步划分和中间层进一步划分的流程,降低了 以往方法整体划分的复杂度,提高了可行性。
[0034](3)设计了针对初步识别结果的优化过程,具体是引入分层架构的设计思想,消除可能出 现的跨层依赖,降低软件维护人员对识别结果的理解难度。
[0035](4)本专利技术的识别方法在进一步划分层次时,考虑了不同层次实体之间多个相关结构的相 似度,并且最终生成的架构层次图可以用来加深对目标系统的理解,辅助对架构偏移点的定位。
附图说明
[0036]图1为本专利技术框架示意图;
[0037]图2为预处理过程示意图;
[0038]图3依赖信息提取过程示意图;
[0039]图4为最佳K值选取示意图本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于软件依赖关系提取过程的多层架构的识别方法,其特征在于,所述方法包括以下步骤:步骤1:目标系统源码预处理,步骤2:目标系统依赖信息提取,步骤3:目标系统层次划分。2.根据权利要求1所述的基于软件依赖关系提取过程的多层架构的识别方法,其特征在于,所述步骤1:目标系统源码预处理,具体如下:11)对非源码形式的目标系统的编译产物进行反编译,将输入形式统一为静态源码;12)剔除系统中没有内容或被注释的类;13)将系统中存在接口实现关系或继承关系的多个类进行绑定,参与层次划分时可将其作为一个实体看待,缩小识别对象的规模。3.根据权利要求1所述的基于软件依赖关系提取过程的多层架构的识别方法,其特征在于,步骤2:目标系统依赖信息提取,具体如下:21)提取预处理后每个类文件中的标识符信息,包括类名、属性名、方法名、方法形参名和注解名,构成一个标识符信息表,每个类的标识符信息是其中的一条记录;22)扫描标识符列表,提取出可用来初步划分层次的依赖信息,每条依赖信息包括:类名、该类所在的路径(目录结构)、类所依赖的其他自定义类名,形成依赖信息表;23)根据依赖信息表可以构建出若干条目标系统中的依赖路径,将源码中不在任何一条路径上的类剔除,可认为其不是分层架构的组成部分。4.根据权利要求1所述的基于软件依赖关系提取过程的多层架构的识别方法,其特征在于,步骤3:目标系统层次划分,具体如下,31)根据依赖信息表,计算出每个实体的扇入值FanIn和扇出值FanOut,其中FanIn是系统中依赖当前结点的结点个数,FanOut是当前结点所...

【专利技术属性】
技术研发人员:周颖余良李必信王璐璐孔祥龙廖力
申请(专利权)人:东南大学
类型:发明
国别省市:

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

1