一种基于TOPSIS法的Java冗余代码评估方法技术

技术编号:35775437 阅读:20 留言:0更新日期:2022-12-01 14:19
本发明专利技术公开了一种基于TOPSIS法的Java冗余代码评估方法,步骤如下:以待检测Java项目为目标,识别其启动方法以确定项目的起点;以项目的启动方法作为输入,构建函数调用关系图,检测Java项目中所有可达方法的集合;检测出Java项目中存在的冗余代码;计算项目中各个节点的度中心性和接近中心性;构建面向冗余代码评估的软件复杂网络;利用TOPSIS法对中心性度量在软件复杂网络中进行聚合评估得到删除冗余代码的风险。本发明专利技术基于静态分析技术与复杂网络模型,通过检测所有可达方法来找出冗余代码,用TOPSIS法评估删除冗余代码的风险。用TOPSIS法评估删除冗余代码的风险。用TOPSIS法评估删除冗余代码的风险。

【技术实现步骤摘要】
一种基于TOPSIS法的Java冗余代码评估方法


[0001]本专利技术属于智能软件的维护
,具体涉及一种基于TOPSIS法的Java冗余代码评估方法。

技术介绍

[0002]在商业和开源软件中,冗余代码是一个相当普遍的现象。在对一个工业软件系统的代码检查中发现,开发人员对于当前在软件系统上工作的30%到50%的源代码没有任何理解或记录。在一个用PHP编写的web应用程序的子系统上,开发人员删除了2740个冗余文件,即大约30%的子系统文件。一项对Java编写的应用程序中的冗余方法研究的研究结果表明,这些应用中的冗余方法的占比在5%到10%之间。最后,软件工程专业人员认为,冗余代码检测是软件专业人员希望在他们的支持工具中具备的特性之一。
[0003]冗余代码的存在可能会带来的问题如下:
[0004](1)冗余代码会增加文件大小,导致过度使用内存,并可能增加软件执行时间;
[0005](2)冗余代码阻碍了对源代码的理解,使其结构不那么明显;
[0006](3)冗余代码影响软件的可维护性,因为其使源代码更难以理解;
[0007](4)冗余代码的存在严重影响了对不熟悉源代码的理解,也会对不熟悉源代码的开发人员在修改时产生负面影响;
[0008](5)开发人员可能会浪费时间维护冗余代码,从而导致更高的维护成本;
[0009](6)当包含错误的冗余代码在不经意间变得可操作时,可能会影响系统的可靠性。
[0010]尽管冗余代码的存在是一个普遍现象,并且冗余代码的存在可能会带来很多潜在的问题。然而,冗余代码很少受到软件工程研究领域的关注,在用Java编写的软件系统中,几乎没有工具支持检测冗余代码。
[0011]如何在分析精度和分析效率之间达到更好的均衡,并且使分析方式能够满足程序日益变大的需求是基于静态类型分析所面临的两个最重要的问题。流敏感的分析和上下文敏感的分析虽然能得到较高的分析精度,但分析的成本大,且不能很好的满足程序的扩展性,因此无法在实际中得到广泛的应用。而快速类型分析(RTA)方法是流不敏感和上下文不敏感的,算法较简单,实现容易,分析的成本小,能够更好的满足分析精度和分析效率的均衡。快速类型分析(RTA)是当前冗余代码检测中常用的调用图构造算法。

技术实现思路

[0012]针对于上述现有技术的不足,本专利技术的目的在于提供一种基于TOPSIS法的Java冗余代码评估方法,以克服现有技术中冗余代码检测精度低,无法很好的处理冗余虚函数的问题。本专利技术基于静态分析技术与复杂网络模型,通过检测所有可达方法来找出冗余代码,用TOPSIS法评估删除冗余代码的风险。
[0013]为达到上述目的,本专利技术采用的技术方案如下:
[0014]本专利技术的一种基于TOPSIS法的Java冗余代码评估方法,步骤如下:
[0015]1)以待检测Java项目为目标,识别其启动方法以确定项目的起点;
[0016]2)以项目的启动方法作为输入,使用快速类型分析算法提取函数间的调用关系,构建函数调用关系图,检测Java项目中所有可达方法的集合;
[0017]3)用项目中所有方法的集合减去可达方法的集合,检测出Java项目中存在的冗余代码;
[0018]4)计算项目中各个节点的度中心性和接近中心性;
[0019]5)构建面向冗余代码评估的软件复杂网络;
[0020]6)利用TOPSIS(Technique for Order Preference by Similarity to an Ideal Solution,优劣解距离)法对步骤4)中的中心性度量在软件复杂网络中进行聚合,评估得到删除冗余代码的风险。
[0021]优选地,所述步骤1)具体包括:将待检测Java项目的所在路径、项目的启动方法路径以及保存分析结果的xml文件路径作为参数输入到冗余代码检测工具中;当不指定启动方法路径时,冗余代码检测工具自动化识别待检测Java项目的启动方法(一般包括主方法和反射调用的方法);在此过程中将项目中所有函数的放入一个集合V中。
[0022]优选地,所述步骤2)具体包括:
[0023]21)使用快速类型分析算法提取函数间的调用关系,构建函数调用关系图;快速类型分析算法对项目中的每个函数M给定一个集合S
M
,对每个域x给定一个集合S
X
,用ParamTypes(M)表示函数M的参数的声明类型的集合,用ReturnType(M)表示函数的返回类型;定义函数SubTypes()满足:
[0024]SubTypes(M)=∪
m∈M
SubTypes(m)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1);
[0025]22)假定项目中仅main函数被调用,所有对象未被实例化,通过从main函数开始遍历各个函数,所有的虚函数调用结点开始都被忽略,若函数中包含某个对象的实例化信息,则将该对象放入实例化对象的集合中,同时若遍历过的所有函数的某个虚函数调用点的接受对象与该实例化对象相关,则确定在该接受对象的运行时可能类型集合中包含该实例化对象对应的类型;该虚函数调用点在运行时调用的目标函数包括该实例化对象对应的类型中的相应目标函数;每遍历一个函数,如果该函数中包含实例化对象,即迭代的处理在其前面遍历的函数中与该实例化对象相关的虚函数调用点,最终得到所有可达方法的集合。
[0026]优选地,所述快速类型分析算法的步骤如下:
[0027]211)main∈R,main表示项目中的main函数,R为可达函数的集合;
[0028]212)对于每个函数M,以及M中的每个虚函数调用点e.m(),如果存在类C∈SubTypes(StaticType(e)),并且有StaticLookup(C,m)=M


[0029][0030]213)对于每个函数M,如果在M中包含new C()这样的实例化信息,那么:
[0031][0032]优选地,所述步骤3)具体包括:
[0033]31)依据步骤2)中快速类型分析算法输出的可达函数的集合R,使用项目中所有函数的集合V减去可达函数的集合R得到不可达函数的集合U;
[0034]32)经过处理后的不可达函数的集合U中的代码即为项目中的冗余代码,将检测到的冗余代码输出到xml文件中。
[0035]优选地,所述步骤4)具体包括:
[0036]41)度中心性的计算公式如下:
[0037][0038]其中,C
D
(v)是节点v的度中心性,a
uv
为节点v与节点u连接的边;
[0039]42)节点对之间最短路径d(u,v)的定义如下:
[0040]d(u,v)=min(x
uh
+

+x
hv
)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)
[0041]其本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于TOPSIS法的Java冗余代码评估方法,其特征在于,步骤如下:1)以待检测Java项目为目标,识别其启动方法以确定项目的起点;2)以项目的启动方法作为输入,使用快速类型分析算法提取函数间的调用关系,构建函数调用关系图,检测Java项目中所有可达方法的集合;3)用项目中所有方法的集合减去可达方法的集合,检测出Java项目中存在的冗余代码;4)计算项目中各个节点的度中心性和接近中心性;5)构建面向冗余代码评估的软件复杂网络;6)利用TOPSIS法对步骤4)中的中心性度量在软件复杂网络中进行聚合,评估得到删除冗余代码的风险。2.根据权利要求1所述的基于TOPSIS法的Java冗余代码评估方法,其特征在于,所述步骤1)具体包括:将待检测Java项目的所在路径、项目的启动方法路径以及保存分析结果的xml文件路径作为参数输入到冗余代码检测工具中;当不指定启动方法路径时,冗余代码检测工具自动化识别待检测Java项目的启动方法;在此过程中将项目中所有函数的放入一个集合V中。3.根据权利要求1所述的基于TOPSIS法的Java冗余代码评估方法,其特征在于,所述步骤2)具体包括:21)使用快速类型分析算法提取函数间的调用关系,构建函数调用关系图;快速类型分析算法对项目中的每个函数M给定一个集合S
M
,对每个域x给定一个集合S
X
,用ParamTypes(M)表示函数M的参数的声明类型的集合,用ReturnType(M)表示函数的返回类型;定义函数SubTypes()满足:SubTypes(M)=∪
m∈M
SubTypes(m)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1);22)假定项目中仅main函数被调用,所有对象未被实例化,通过从main函数开始遍历各个函数,所有的虚函数调用结点开始都被忽略,若函数中包含某个对象的实例化信息,则将该对象放入实例化对象的集合中,同时若遍历过的所有函数的某个虚函数调用点的接受对象与该实例化对象相关,则确定在该接受对象的运行时可能类型集合中包含该实例化对象对应的类型;该虚函数调用点在运行时调用的目标函数包括该实例化对象对应的类型中的相应目标函数;每遍历一个函数,如果该函数中包含实例化对象,即迭代的处理在其前面遍历的函数中与该实例化对象相关的虚函数调用点,最终得到所有可达方法的集合。4.根据权利要求3所述的基于TOPSIS法的Java冗余代码评估方法,其特征在于,所述快速类型分析算法的步骤如下:211)main∈R,main表示项目中的main函数,R为可达函数的集合;212)对于每个函数M,以及M中...

【专利技术属性】
技术研发人员:陶传奇刘昕炜
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:

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

1