一种基于组合聚类的包层次上的代码重构方法及系统与流程

文档序号:29635275发布日期:2022-04-13 16:59阅读:86来源:国知局
一种基于组合聚类的包层次上的代码重构方法及系统与流程

1.本发明属于代码重构领域,尤其涉及一种基于组合聚类的包层次上的代码重构方法及系统。


背景技术:

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


技术实现要素:

5.为了解决上述背景技术中存在的至少一项技术问题,本发明提供一种基于组合聚类的包层次上的代码重构方法,其利用使用算法复杂度低的dbscan算法所产生的类来约束层次聚类算法的聚类空间,该方法可以保持层次聚类算法的精度不变,且它的时间复杂度介于dbscan和层次聚类算法之间。
6.为了实现上述目的,本发明采用如下技术方案:
7.本发明的第一个方面提供一种基于组合聚类的包层次上的代码重构方法,包括如下步骤:
8.获取待重构的代码数据;
9.从待重构的代码数据中构建代码模块的实体属性矩阵;
10.基于实体属性矩阵计算实体间的相似度得到实体相似度矩阵;
11.根据实体相似度矩阵,采用密度聚类dbscan算法对实体进行聚类得到实体聚类分组;
12.对每个实体聚类分组分别进行层次聚类得到聚类树状图;
13.基于聚类树状图分析结果并切分出代码重构的分组结果。
14.本发明的第二个方面提供一种基于组合聚类的包层次上的代码重构系统,包括:
15.代码获取模块,被配置为:获取待重构的代码数据;
16.实体属性矩阵构建模块,被配置为:从待重构的代码数据中构建代码模块的实体
属性矩阵;
17.实体相似度矩阵构建模块,被配置为:基于实体属性矩阵计算实体间的相似度得到实体相似度矩阵;
18.实体聚类分组模块,被配置为:根据实体相似度矩阵,采用密度聚类dbscan算法对实体进行聚类得到实体聚类分组;
19.实体层次聚类模块,被配置为:对每个实体聚类分组分别进行层次聚类得到聚类树状图;
20.代码重构分组模块,被配置为:基于聚类树状图分析结果并切分出代码重构的分组结果。
21.本发明的第三个方面提供一种计算机可读存储介质。
22.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的一种基于组合聚类的包层次上的代码重构方法中的步骤。
23.本发明的第四个方面提供一种计算机设备。
24.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的一种基于组合聚类的包层次上的代码重构方法中的步骤。
25.与现有技术相比,本发明的有益效果是:
26.本发明提出一种基于组合聚类的包层次上的代码重构方法,将dbscan算法的高效性与层次聚类的精度高的特点结合到一起,对软件的代码结构进行有效划分,并且在保持层次聚类精度不变的同时有效减少层次聚类算法的运行时间。本发明可以依据代码的划分结果提供有效的代码重构方案,得到“高内聚、低耦合”的软件结构,提升软件代码的安全性、可读性、可复用性。
附图说明
27.构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
28.图1是基于组合聚类的包层次上的代码重构方法的流程示意图。
具体实施方式
29.下面结合附图与实施例对本发明作进一步说明。
30.应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
31.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
32.实施例一
33.如图1所示,本实施例提供一种基于组合聚类的包层次上的代码重构方法,包括如
下步骤:
34.s1:获取待重构的代码数据;
35.s2:从待重构的代码数据中构建代码模块的实体属性矩阵;
36.s3:基于实体属性矩阵计算实体间的相似度得到实体相似度矩阵;
37.s4:根据实体相似度矩阵,采用密度聚类算法对实体进行聚类得到实体聚类分组;
38.需要说明的是,本实施例中,采用dbscan(density-based spatial clustering of applications with noise)算法对实体进行聚类,此外,还可以采用例如optics算法和denclue算法等。
39.s5:对每个实体聚类分组分别进行层次聚类得到聚类树状图;
40.s6:基于聚类树状图分析树状图的结构并切分出代码重构的分组结果。
41.在包层次上的代码重构研究中,代码中的类被选为实体,实体的特征称为属性。在发明中,代码里的所有方法被选作实体的属性。
42.在s2中,从待重构的代码数据中构建代码模块的实体属性矩阵包括:
43.所述实体属性矩阵采用只包含0和1的向量来表示实体,其中向量的每一维代表实体的一个属性,属性值可由如下公式计算得到:
[0044][0045]
式中,v(atti,entj)表示实体j的属性i的值;atti∈entjoratti→
entj表示属性i代表的方法属于实体j代表的类或被实体j代表的类所调用。
[0046]
在s3中,实体间的相似度矩阵用来表示实体间的联系紧密度,所述实体相似度矩阵计算公式为:
[0047][0048]
式中,|x∩y|表示实体x与实体y属性值都为1的属性个数,|ai|表示第i个实体属性值为1的属性个数,表示程序中所有实体属性值为1的属性个数的总和。
[0049]
在s4中,采用密度聚类dbscan算法对实体进行聚类得到实体聚类分组的过程包括:将实体相似度矩阵作为输入,设置超参数minpts(eps邻域最小点数)和eps(邻域半径)的值,使用dbscan算法进行运算,得到实体聚类分组结果。
[0050]
本实施例中,本发明设定minpts=3,对于eps,本发明使用绘制k-距离曲线法来获得,k=minpts,对于数据中的每个点,计算其对应的第k个最近点距离,并将数据中所有点的第k个最近点距离按照降序方式排序作图,称这幅图为k距离曲线图,选择该图中第一个突变点做为eps。
[0051]
在s5中,对每个实体聚类分组分别进行层次聚类得到聚类树状图中,所述层次聚类采用a-knn算法,算法思想是先将每个实体视为一个集群,在第二次迭代中,设k=3,算法选择待被聚类实体的三个最近邻居,然后检查它们的标签,如果三个实体中至少有两个具有相同的标记,则该算法标记目前的实体与这两个实体的标签相同,如果这三个实体有不同的标签,则算法将用最近实体的标签标记当前实体。
[0052]
本实施例在五个不同领域的开源项目上采用本实施例的重构方法进行实验,并与4种经典的聚类算法a-knn、slink、clink、wpgma在划分效果和运行时间上进行对比,对比结
果如表1所示。
[0053]
其中,mq值是一种评估划分结果的指标,计算的是类内联系度与类间联系度的比值,这个比值越大越好,表示实体被正确划分了。
[0054]
表1组合聚类与其他聚类算法的软件划分结果mq值对比
[0055][0056]
表2组合聚类与其他聚类算法的运行时间对比(单位:ms)
[0057][0058]
本发明可以将dbscan算法的高效性与层次聚类的精度高的特点结合到一起,对软件的代码结构进行有效划分,并且在保持层次聚类精度不变的同时有效减少层次聚类算法的运行时间。
[0059]
本发明可以依据代码的划分结果提供有效的代码重构方案,得到“高内聚、低耦合”的软件结构,提升软件代码的安全性、可读性、可复用性。
[0060]
实施例二
[0061]
本实施例提供一种基于组合聚类的包层次上的代码重构系统,包括:
[0062]
代码获取模块,被配置为:获取待重构的代码数据;
[0063]
实体属性矩阵构建模块,被配置为:从待重构的代码数据中构建代码模块的实体属性矩阵;
[0064]
实体相似度矩阵构建模块,被配置为:基于实体属性矩阵计算实体间的相似度得到实体相似度矩阵;
[0065]
实体聚类分组模块,被配置为:根据实体相似度矩阵,采用密度聚类算法对实体进行聚类得到实体聚类分组;
[0066]
实体层次聚类模块,被配置为:对每个实体聚类分组分别进行层次聚类得到聚类树状图;
[0067]
代码重构分组模块,被配置为:基于聚类树状图分析结果并切分出代码重构的分组结果。
[0068]
实施例三
[0069]
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处
理器执行时实现如上述所述的一种基于组合聚类的包层次上的代码重构方法中的步骤。
[0070]
实施例四
[0071]
本实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的一种基于组合聚类的包层次上的代码重构方法中的步骤。
[0072]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
[0073]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0074]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0075]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0076]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random accessmemory,ram)等。
[0077]
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1