基于指标森林的架构衰退检测方法技术

技术编号:39645319 阅读:9 留言:0更新日期:2023-12-09 11:13
本发明专利技术公开了一种基于指标森林的架构衰退检测方法

【技术实现步骤摘要】
基于指标森林的架构衰退检测方法、系统、装置及介质


[0001]本专利技术属于软件可维护性评估
,涉及一种基于指标森林的架构衰退检测方法

系统

装置及介质


技术介绍

[0002]在软件项目的生命周期中,开发人员不断进行更改,以支持新的需求

修复错误和进行其他维护活动

在软件开发过程中,开发人员无意中为短期目标选择了次优设计决策,甚至是容易出错的决策

然而,随着这种决策的长期进行,代码的变化将积累技术债务和架构债务,因此架构不可避免地会衰退

尽早的架构侵蚀检测能指示开发人员及时解决架构问题,提高软件的可维护性,并减少偿还债务的利息支出

[0003]为了对量化软件质量以及对架构衰退根因进行定位,目前存在很多研究工作
。CK

QMOOD
是面向对象设计的代表性度量,考虑了继承

动态绑定和信息隐藏等特性
。Mo
等人的工作提出了解耦级别
(DL)
,以评估软件如何能够解耦为小型且可独立替换的模块

研究人员还提出了一系列基于源代码

修订历史

执行轨迹的度量指标

利用这些可用的度量,架构侵蚀检测的方法也被提出,包括基于规则的检测

基于优化的检测和基于机器学习的检测等

虽然目前有很多的研究工作,但这些工作缺乏可理解性

可解释性和指示性

无法帮助开发人员及时的发现及解决源代码可维护性问题


技术实现思路

[0004]本专利技术的目的在于解决现有技术中基于规则的检测

基于优化的检测和基于机器学习的检测缺乏可理解性

可解释性和指示性的问题,提供一种基于指标森林的架构衰退检测方法

系统

装置及介质

[0005]为达到上述目的,本专利技术采用以下技术方案予以实现:
[0006]基于指标森林的架构衰退检测方法,包括:
[0007]基于软件系统实体的特征及实体之间依赖关系,构建混合依赖图
G

[0008]对混合依赖图
G
中的软件模块粒度质量

软件类粒度和方法粒度进行评估;
[0009]基于依据不同粒度之间指标的潜在关联关系,构建指标森林;
[0010]基于指标森林的预定义指标规则集,检测导致可维护性问题的代码

[0011]本专利技术的进一步改进在于:
[0012]进一步的,软件系统实体的特征及实体之间依赖关系,包括:软件源代码实体之间的语法依赖关系

提交文件之间的演化依赖关系

软件类文本信息类之间的语义依赖关系和模块之间的动态依赖关系;其中,基于
ENRE
提取软件源代码实体之间的语法依赖关系;基于自然语言处理技术提取软件类文本信息抽取类之间的语义依赖关系;基于软件项目的提交历史提取作为提交文件之间变更关系的演化依赖关系;基于软件的执行轨迹提取模块之间的动态依赖关系

[0013]进一步的,构建混合依赖图
G
,具体为:基于软件源代码实体之间的语法依赖关系
和提交文件之间的演化依赖关系,输出混合依赖图
G

<V

D>
;其中,混合依赖图
G
中的实体
v∈V
,每个实体
v

<id

qualifiedname

parentID

category>
;实体包括模块



文件



方法

变量以及轨迹;
id
是每个实体的唯一标识,
qualifiedname
是实体的名称,
parentID
是实体的父节点
id

category
是每个实体所属的类型;每个
d∈D
代表了一对
v
之间的依赖关系,包括:包之间的导入依赖

方法之间的调用依赖

类之间的继承依赖

类之间的语义依赖

文件之间的共变依赖和模块之间的动态交互依赖

[0014]进一步的,对混合依赖图
G
中的软件模块粒度质量进行评估,包括:
[0015]基于结构模块度评估混合依赖图
G
的软件系统的模块性;
[0016]基于消息层的内聚度和领域层的内聚度评估混合依赖图
G
的软件系统的功能性;
[0017]基于模块内部共变频度

跨模块共变频度

演化过程中跨模块共变集群数量和演化过程中模块化良好程度评估混合依赖图
G
的软件系统的可修改性

[0018]进一步的,基于结构模块度评估混合依赖图
G
的软件系统的模块性,具体为:
[0019]结构模块度的表达式为:
[0020][0021][0022]其中,通过
scoh
度量模块的内聚度,通过
scop
i,j
度量模块之间的耦合程度,基于混合依赖图
G
统计
m
i

n
i,j

m
i
是模块
i
内所有实体间边的数量,
n
i,j
是模块
i
内的实体与模块
j
内的实体之间的边的数量;
k
i
或者
k
j
表示模块
i
或者模块
j
所包含的实体个数;
scoh
值越大则模块性越好;
[0023]结构模块度还通过
idd

odd
指标进行衡量;其中,
idd
用于度量一个模块被其他模块调用的程度;
idd
值越大,则模块被其他模块耦合的程度越高,度量
idd
如公式
(3)
所示:
[0024][0025]其中,
R
代表系统中模块的个数,
s_dep(j

i)
表本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
基于指标森林的架构衰退检测方法,其特征在于,包括:基于软件系统实体的特征及实体之间依赖关系,构建混合依赖图
G
;对混合依赖图
G
中的软件模块粒度质量

软件类粒度和方法粒度进行评估;基于依据不同粒度之间指标的潜在关联关系,构建指标森林;基于指标森林的预定义指标规则集,检测导致可维护性问题的代码
。2.
根据权利要求1所述的基于指标森林的架构衰退检测方法,其特征在于,所述软件系统实体的特征及实体之间依赖关系,包括:软件源代码实体之间的语法依赖关系

提交文件之间的演化依赖关系

软件类文本信息类之间的语义依赖关系和模块之间的动态依赖关系;其中,基于
ENRE
提取软件源代码实体之间的语法依赖关系;基于自然语言处理技术提取软件类文本信息抽取类之间的语义依赖关系;基于软件项目的提交历史提取作为提交文件之间变更关系的演化依赖关系;基于软件的执行轨迹提取模块之间的动态依赖关系
。3.
根据权利要求2所述的基于指标森林的架构衰退检测方法,其特征在于,所述构建混合依赖图
G
,具体为:基于软件源代码实体之间的语法依赖关系和提交文件之间的演化依赖关系,输出混合依赖图
G
=<
V,D
>;其中,混合依赖图
G
中的实体
v∈V
,每个实体
v
=<
id,qualifiedname,parentID,category
>;实体包括模块



文件



方法

变量以及轨迹;
id
是每个实体的唯一标识,
qualifiedname
是实体的名称,
parentID
是实体的父节点
id

category
是每个实体所属的类型;每个
d∈D
代表了一对
v
之间的依赖关系,包括:包之间的导入依赖

方法之间的调用依赖

类之间的继承依赖

类之间的语义依赖

文件之间的共变依赖和模块之间的动态交互依赖
。4.
根据权利要求3所述的基于指标森林的架构衰退检测方法,其特征在于,所述对混合依赖图
G
中的软件模块粒度质量进行评估,包括:基于结构模块度评估混合依赖图
G
的软件系统的模块性;基于消息层的内聚度和领域层的内聚度评估混合依赖图
G
的软件系统的功能性;基于模块内部共变频度

跨模块共变频度

演化过程中跨模块共变集群数量和演化过程中模块化良好程度评估混合依赖图
G
的软件系统的可修改性
。5.
根据权利要求4所述的基于指标森林的架构衰退检测方法,其特征在于,所述基于结构模块度评估混合依赖图
G
的软件系统的模块性,具体为:结构模块度的表达式为:结构模块度的表达式为:其中,通过
scoh
度量模块的内聚度,通过
scop
i,j
度量模块之间的耦合程度,基于混合依赖图
G
统计
n
i

n
i,j

m
i
是模块
i
内所有实体间边的数量,
n
i,j
是模块
i
内的实体与模块
j
内的实体之间的边的数量;
k
i
或者
k
j
表示模块
i
或者模块
j
所包含的实体个数;
scoh
值越大则模块性越好;结构模块度还通过
idd

odd
指标进行衡量;其中,
idd
用于度量一个模块被其他模块调用的程度;
idd
值越大,则模块被其他模块耦合的程度越高,度量
idd
如公式
(3)
所示
:
其中,
R
代表系统中模块的个数,
s_dep(j,i)
表示类
i
被类
j
依赖的数量;
odd
用于度量一个模块调用其他模块的程度,
odd
值越大,则该模块耦合其他模块的程度越高;与
idd
类似,度量
odd
如公式
(4)
所示:其中,
...

【专利技术属性】
技术研发人员:晋武侠张宇云杨子江
申请(专利权)人:交叉信息核心技术研究院西安有限公司
类型:发明
国别省市:

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

1