[发明专利]基于抽象语法树的冗余变量和冗余方法的检测方法及系统在审
申请号: | 202011579248.X | 申请日: | 2020-12-28 |
公开(公告)号: | CN112650680A | 公开(公告)日: | 2021-04-13 |
发明(设计)人: | 张智轶;熊超;黄志球;陶传奇;周玉倩 | 申请(专利权)人: | 南京航空航天大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京苏高专利商标事务所(普通合伙) 32204 | 代理人: | 李淑静 |
地址: | 210016 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 抽象 语法 冗余 变量 方法 检测 系统 | ||
本发明提出了一种基于抽象语法树的冗余变量和冗余方法的检测方法及系统。所述方法包括:利用抽象语法树技术解析java源文件,在解析的过程中生成相应的变量数组和方法数组,并通过变量的关系依赖数组和方法的调用变量数组以及未匹配的字符串数组来检测出冗余变量和冗余方法,对检测出的冗余变量和冗余方法执行删除操作。通过本发明,输入一个包含main方法的java源文件,即可输出所有的冗余变量和冗余方法,并且可以自动删除所检测出来的冗余变量和冗余方法。本发明不要求进行冗余变量和冗余方法的人为判断,也可以在不知道冗余变量和冗余方法的具体位置的情况下对其进行删除,这为冗余变量和冗余方法的检测和删除提供了一个良好的解决方案。
技术领域
本发明属于计算机领域,具体涉及软件开发中冗余代码的检测方法及检测系统。
背景技术
在当前的软件开发过程中,多人多地开发、软件复用等开发方法已成为加快软件开发的常用手段,因此在开发过程中通常会积累许多重复和冗余代码。这些代码一方面降低了代码可读性,另一方面可能存在软件漏洞和安全隐患,如何检测及消除源代码中出现的重复和冗余代码,已成为软件开发过程中不可避免的问题,也是研究人员亟待解决的难点。尽管重复冗余代码检测分析工具已经产生了不少,但是大多数工具对于冗余代码的检测效果不佳,或者运行时间过长效率低。
冗余变量和冗余方法都属于冗余代码的部分,并占据绝大部分,往往是因为先定义好了变量或者方法,但最终确并没有使用过,这不可避免地降低了代码的执行效率,故如何检测和删除冗余变量和冗余方法也是目前研究人员待解决的难题。
发明内容
发明目的:针对现有技术中的问题,本发明提出一种基于抽象语法树的冗余变量和冗余方法的检测方法和检测系统,检测代码中的冗余变量和冗余方法,并能选择删除冗余变量和冗余方法,提高代码效率。
本发明的另一目的是提供一种基于抽象语法树的冗余变量和冗余方法的检测系统。
技术方案:根据本发明实施例的第一方面,提供一种基于抽象语法树的冗余变量和冗余方法的检测方法,包括以下步骤:
(1)根据Java语言的抽象语法树的节点结构对Java源文件进行解析,得到当前文件的抽象语法树;
(2)根据抽象语法树,将所有由用户定义的变量与方法分解出来,生成对应的变量数组与方法数组;
(3)从函数main方法入口出发,遍历遇到的所有变量与方法,并在对应变量数组与方法数组中添加其他变量或者方法的依赖;
(4)将主函数调用位做上标记,并以此推断变量数组与方法数组中冗余的节点;
(5)根据得到的冗余变量和冗余方法节点,删除对应的冗余的变量和方法。
根据本发明实施例的第二方面,提供一种基于抽象语法树的冗余变量和冗余方法的检测系统,包括:
源文件解析模块,用于根据Java语言的抽象语法树的节点结构对Java源文件进行解析,得到当前文件的抽象语法树;
变量处理模块,用于根据抽象语法树,将所有由用户定义的变量分解出来,生成对应的变量数组;
方法处理模块,用于根据抽象语法树,将所有由用户定义的方法分解出来,生成对应的方法数组;
依赖关系分析模块,用于从函数main方法入口出发,遍历遇到的所有变量与方法,并在对应变量数组与方法数组中添加其他变量或者方法的依赖;
冗余判断模块,用于将主函数调用位做上标记,并以此推断变量数组与方法数组中冗余的节点;
冗余删除模块,用于根据得到的冗余变量和冗余方法节点,删除对应的冗余的变量和方法。
根据本发明实施例的第三方面,提供一种计算机设备,所述设备包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京航空航天大学,未经南京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011579248.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:液力变矩器牵引性能预测方法
- 下一篇:突变胞溶素孔