一种基于组合聚类的包层次上的代码重构方法及系统技术方案

技术编号:33027522 阅读:8 留言:0更新日期:2022-04-15 09:02
本发明专利技术属于代码重构领域,提供了一种基于组合聚类的包层次上的代码重构方法及系统,该方法包括:获取待重构的代码数据;从待重构的代码数据中构建代码模块的实体属性矩阵;基于实体属性矩阵计算实体间的相似度得到实体相似度矩阵;根据实体相似度矩阵,采用密度聚类DBSCAN算法对实体进行聚类得到实体聚类分组;对每个实体聚类分组分别进行层次聚类得到聚类树状图;基于聚类树状图分析结果并切分出代码重构的分组结果。码重构的分组结果。码重构的分组结果。

【技术实现步骤摘要】
一种基于组合聚类的包层次上的代码重构方法及系统


[0001]本专利技术属于代码重构领域,尤其涉及一种基于组合聚类的包层次上的代码重构方法及系统。

技术介绍

[0002]本部分的陈述仅仅是提供了与本专利技术相关的
技术介绍
信息,不必然构成在先技术。
[0003]在现实世界中,进化是软件的一个内在属性。随着软件的增强、修改和适应新的需求,代码变得越来越复杂并逐渐偏离最初的设计,导致代码的质量逐渐下降,而重构是解决这个问题的一个有效办法。重构,是一种在不改变代码外在行为的前提下,对代码作出修改,提升代码质量的程序整理方法。但是,寻找到需要重构的代码以及确定使用何种重构策略都将会是一项复杂而繁琐的任务。
[0004]聚类作为一种可以将相似的数据聚集在相同簇中的技术,可以将软件系统的实体(如类或源文件)分组为更加有意义的子系统,从而发现质量更好的软件体系结构,为代码重构提供指导性建议。在包层次上的代码重构研究中,为了得到“高内聚、低耦合”的软件结构,层次聚类算法因其简单有效、聚类精度高等特点被认为是一种较好的软件聚类方法。但是,层次聚类算法时间复杂度高,不利于处理较大规模的软件。

技术实现思路

[0005]为了解决上述
技术介绍
中存在的至少一项技术问题,本专利技术提供一种基于组合聚类的包层次上的代码重构方法,其利用使用算法复杂度低的DBSCAN算法所产生的类来约束层次聚类算法的聚类空间,该方法可以保持层次聚类算法的精度不变,且它的时间复杂度介于DBSCAN和层次聚类算法之间。
[0006]为了实现上述目的,本专利技术采用如下技术方案:
[0007]本专利技术的第一个方面提供一种基于组合聚类的包层次上的代码重构方法,包括如下步骤:
[0008]获取待重构的代码数据;
[0009]从待重构的代码数据中构建代码模块的实体属性矩阵;
[0010]基于实体属性矩阵计算实体间的相似度得到实体相似度矩阵;
[0011]根据实体相似度矩阵,采用密度聚类DBSCAN算法对实体进行聚类得到实体聚类分组;
[0012]对每个实体聚类分组分别进行层次聚类得到聚类树状图;
[0013]基于聚类树状图分析结果并切分出代码重构的分组结果。
[0014]本专利技术的第二个方面提供一种基于组合聚类的包层次上的代码重构系统,包括:
[0015]代码获取模块,被配置为:获取待重构的代码数据;
[0016]实体属性矩阵构建模块,被配置为:从待重构的代码数据中构建代码模块的实体
属性矩阵;
[0017]实体相似度矩阵构建模块,被配置为:基于实体属性矩阵计算实体间的相似度得到实体相似度矩阵;
[0018]实体聚类分组模块,被配置为:根据实体相似度矩阵,采用密度聚类DBSCAN算法对实体进行聚类得到实体聚类分组;
[0019]实体层次聚类模块,被配置为:对每个实体聚类分组分别进行层次聚类得到聚类树状图;
[0020]代码重构分组模块,被配置为:基于聚类树状图分析结果并切分出代码重构的分组结果。
[0021]本专利技术的第三个方面提供一种计算机可读存储介质。
[0022]一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的一种基于组合聚类的包层次上的代码重构方法中的步骤。
[0023]本专利技术的第四个方面提供一种计算机设备。
[0024]一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的一种基于组合聚类的包层次上的代码重构方法中的步骤。
[0025]与现有技术相比,本专利技术的有益效果是:
[0026]本专利技术提出一种基于组合聚类的包层次上的代码重构方法,将DBSCAN算法的高效性与层次聚类的精度高的特点结合到一起,对软件的代码结构进行有效划分,并且在保持层次聚类精度不变的同时有效减少层次聚类算法的运行时间。本专利技术可以依据代码的划分结果提供有效的代码重构方案,得到“高内聚、低耦合”的软件结构,提升软件代码的安全性、可读性、可复用性。
附图说明
[0027]构成本专利技术的一部分的说明书附图用来提供对本专利技术的进一步理解,本专利技术的示意性实施例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。
[0028]图1是基于组合聚类的包层次上的代码重构方法的流程示意图。
具体实施方式
[0029]下面结合附图与实施例对本专利技术作进一步说明。
[0030]应该指出,以下详细说明都是例示性的,旨在对本专利技术提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本专利技术所属
的普通技术人员通常理解的相同含义。
[0031]需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本专利技术的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0032]实施例一
[0033]如图1所示,本实施例提供一种基于组合聚类的包层次上的代码重构方法,包括如
下步骤:
[0034]S1:获取待重构的代码数据;
[0035]S2:从待重构的代码数据中构建代码模块的实体属性矩阵;
[0036]S3:基于实体属性矩阵计算实体间的相似度得到实体相似度矩阵;
[0037]S4:根据实体相似度矩阵,采用密度聚类算法对实体进行聚类得到实体聚类分组;
[0038]需要说明的是,本实施例中,采用DBSCAN(Density

Based Spatial Clustering of Applications with Noise)算法对实体进行聚类,此外,还可以采用例如OPTICS算法和DENCLUE算法等。
[0039]S5:对每个实体聚类分组分别进行层次聚类得到聚类树状图;
[0040]S6:基于聚类树状图分析树状图的结构并切分出代码重构的分组结果。
[0041]在包层次上的代码重构研究中,代码中的类被选为实体,实体的特征称为属性。在专利技术中,代码里的所有方法被选作实体的属性。
[0042]在S2中,从待重构的代码数据中构建代码模块的实体属性矩阵包括:
[0043]所述实体属性矩阵采用只包含0和1的向量来表示实体,其中向量的每一维代表实体的一个属性,属性值可由如下公式计算得到:
[0044][0045]式中,v(att
i
,ent
j
)表示实体j的属性i的值;att
i
∈ent
j
oratt
i

ent
j
表示属性i代表的方法属于实体j代表的类或被实体j代表的类所调用。
[0046]在S3中,实体间的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于组合聚类的包层次上的代码重构方法,其特征在于,包括如下步骤:获取待重构的代码数据;从待重构的代码数据中构建代码模块的实体属性矩阵;基于实体属性矩阵计算实体间的相似度得到实体相似度矩阵;根据实体相似度矩阵,采用密度聚类算法对实体进行聚类得到实体聚类分组;对每个实体聚类分组分别进行层次聚类得到聚类树状图;基于聚类树状图分析结果并切分出代码重构的分组结果。2.如权利要求1所述的一种基于组合聚类的包层次上的代码重构方法,其特征在于,所述代码数据中的类被选为实体,实体的特征作为属性。3.如权利要求1所述的一种基于组合聚类的包层次上的代码重构方法,其特征在于,所述实体属性矩阵采用只包含0和1的向量来表示实体,其中向量的每一维代表实体的一个属性,属性值可由如下公式计算得到:式中,v(att
i
,ent
j
)表示实体j的属性i的值;att
i
∈ent
j
oratt
i

ent
j
表示属性i代表的方法属于实体j代表的类或被实体j代表的类所调用。4.如权利要求1所述的一种基于组合聚类的包层次上的代码重构方法,其特征在于,实体间的相似度矩阵用来表示实体间的联系紧密度,所述实体相似度矩阵计算公式为:式中,|X∩Y|表示实体X与实体Y属性值都为1的属性个数,|A
i
|表示第i个实体属性值为1的属性个数,表示程序中所有实体属性值为1的属性个数的总和。5.如权利要求1所述的一种基于组合聚类的包层次上的代码重构方法,其特征在于,采用密度聚类DBSCAN算法对实体进行聚类得到实体聚类分组的过程包括:将实体相似度矩阵作为输入,设置好超参数MinPts的值,使用绘制k
‑<...

【专利技术属性】
技术研发人员:李文昊李凡平石柱国
申请(专利权)人:以萨技术股份有限公司
类型:发明
国别省市:

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

1