[发明专利]基于字节码序列匹配的Java语句块克隆检测方法有效
申请号: | 201910003382.6 | 申请日: | 2019-01-03 |
公开(公告)号: | CN109976806B | 公开(公告)日: | 2022-06-14 |
发明(设计)人: | 俞东进;杨加柞;孙笑笑;陈信;王琳 | 申请(专利权)人: | 杭州电子科技大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F16/903 |
代理公司: | 杭州君度专利代理事务所(特殊普通合伙) 33240 | 代理人: | 朱月芬 |
地址: | 310018 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 字节 序列 匹配 java 语句 克隆 检测 方法 | ||
本发明公开了一种基于字节码序列匹配的Java语句块克隆检测方法,本发明提出的方法是通过对指令的执行和跳转的分析来提取语句块级别的字节码代码片段,然后从字节码代码片段中提取指令并按照其实现的功能不同采用唯一的字符来表示。再采用序列匹配和相似度计算的方式,最终获得相似的代码片段。该方法通过对指令的执行和跳转的分析,从而精准地提取语句块级别的字节码代码片段,并按照指令实现的功能而采用唯一的字符来表示,从而提高了代码克隆的检测效率。在具体检测克隆代码的过程中,将序列匹配方法应用到了单一字符指令序列上,与其他传统方法相比,采用本方法有更好的检测识别效果。
技术领域
本发明属于软件工程领域,具体涉及到一种基于字节码序列匹配的Java语句块代码克隆检测技术。
背景技术
在软件开发过程中,经常会有开发人员通过复制-粘贴或者添加少量修改来复用代码,而这种复用代码的形式就是代码克隆。研究表明,这些克隆代码在软件中的比例大约为7%~23%之间。代码克隆一方面有利于减少开发的成本,但是在另一方面,代码克隆也会带来许多危害,例如代码克隆会将原始代码段中bug引入到系统当中以及会使得软件的理解和维护变得困难。因此,代码克隆检测可以更好地帮助人们从软件系统中发现克隆代码,从而为软件维护,代码管理等提供依据。
代码克隆检测是当前软件代码分析中的热点研究领域。在软件工程领域,代码克隆检测有很多的应用领域,如程序理解、代码质量分析、软件演化分析和错误检测等都需要对软件系统中的克隆代码段进行提取,使得代码克隆检测称为软件分析领域的一个重要并且有价值的部分。然而现有的代码克隆检测方法大部分都是从软件系统的源代码中识别克隆代码,比如基于文本、基于token、基于抽象语法树、基于度量和基于程序依赖图等,而且检测的粒度一般局限于类和方法层面。事实上,由于类似的源代码有可能编译成相同的字节码,直接从字节码识别可以达到更为精确的效果。另一方面,相比于类和方法层面,代码克隆更广泛地存在于语句块层面。
发明内容
本发明针对现有技术的不足,提供了一种基于字节码序列匹配的Java语句块代码克隆检测方法。
本发明方法的具体步骤是:
步骤(1).将两个不同的Java源代码文件分别编译成字节码,并进一步转换为字节码文本格式文件,并在字节码文本文件基础上,提取字节码的语句块p、q;
步骤(2).分别从语句块p、q中提取指令序列,将每条指令根据其功能不同采用唯一的字符来表示,从而形成两个长度分别为|p|和|q|的单一指令字符序列SCSp和SCSq;
步骤(3).为两个单一字符指令序列SCSp和SCSq构建|p|+1行、|q|+1列的字节码匹配矩阵BAMp,q,并初始化BAMp,q中的每个单元格的匹配分值为0;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910003382.6/2.html,转载请声明来源钻瓜专利网。