[发明专利]一种基于索引的Java软件代码克隆检测方法有效
申请号: | 201510043006.1 | 申请日: | 2015-01-28 |
公开(公告)号: | CN104572471B | 公开(公告)日: | 2017-10-03 |
发明(设计)人: | 俞东进;舒翔;陈真理;王杰 | 申请(专利权)人: | 杭州电子科技大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F21/12 |
代理公司: | 浙江杭州金通专利事务所有限公司33100 | 代理人: | 王佳健 |
地址: | 310018 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 索引 java 软件 代码 克隆 检测 方法 | ||
技术领域
本发明属于程序理解技术领域,具体涉及到一种基于索引的Java软件代码克隆检测方法。
背景技术
软件工程领域的关注点之一是如何提高软件开发过程的开发效率和软件产品质量。在软件开发的整个周期中,软件维护占了其中大部分资源和时间,而软件维护中涉及读入源代码、扫描源代码和理解源代码所做的修改等工作又占了大部分的资源和时间。因此,要改善软件开发环境和提高软件产品质量,就必须重视软件维护,并给软件维护人员提供合适的理解程序的方法。
通过分析程序代码,挖掘出程序代码中出现的克隆现象,并借助克隆检测技术可以减少软件维护人员的工作量,提高软件维护过程的效率。例如,通过对软件代码的克隆情况进行检测,可以帮助开发人员和维护人员发现和修改软件系统中的bug。代码克隆检测技术也可以应用于代码抄袭检测、软件版本检测以及库函数重构。
然而,随着软件规模的不断增长,对克隆代码检测的效率要求也相应提高。例如,由于需要把由不同公司或者组织开发的上千万行的软件代码进行相似度的比较,如果不能在一个合适的时间范围内获取代码克隆将使检测方法的有效性大打折扣。
发明内容
本发明针对现有技术的不足,提供了一种基于索引的Java软件代码克隆检测方法。
本发明方法的具体步骤是:
步骤(1).在通用计算机上设置单独的键值数据库,用于存放全局代码段物理索引和全局相似代码段物理索引,以及全局辅助物理索引,以上三个索引均为键值对结构;
步骤(2).以可用内存为限,依次读入Java软件中的源文件的源代码至通用计算机内存,通过词法分析将源代码中的每行语句解析为词项序列,再通过归一化操作将词项序列转换为字符序列表示,得到每个文件对应的“语句行号字符序列”键值对集合,读入文件的源代码的同时将“文件路径文件最新时间戳”键值对加入,其中文件路径为文件的全路径,包括文件名和扩展名;
步骤(3).遍历,将其中每隔行的字符序列作为一个代码段并计算该字符序列的代码段信息摘要,建立“文件路径代码段起始行,代码段终止行,代码段信息摘要”键值对并加入,建立“代码段信息摘要文件路径,代码段起始行,代码段终止行”键值对并加入,重复步骤(2)和(3)至软件中的所有源文件都已处理完毕;
步骤(4).在需要检测克隆代码的时候,从待检测的源文件集合中读入某个源文件的源代码至通用计算机内存,通过词法分析将源代码中的每行语句解析为词项序列,再通过归一化操作将词项序列转换为字符序列表示,得到每个文件对应的“语句行号字符序列”键值对集合,读入的同时建立“文件路径文件最新时间戳”键值对;
步骤(5).从中取出与源文件对应的文件时间戳,若,即源文件未被修改,则从中取得源文件的文件路径对应的值集合记为,转入步骤(8);否则,在中更新源文件对应的文件时间戳为,并遍历,将其中每隔行的字符序列作为一个代码段并计算该字符序列的代码段信息摘要,建立“文件路径代码段起始行,代码段终止行,代码段信息摘要”键值对集合,并将键值对集合中该文件路径对应的值部分加入临时值集合;
步骤(6).取出中与对应的值集合并记为,将和做差集运算得到新增的值集合;遍历,取出其中每个元素的代码段信息摘要,建立“代码段信息摘要文件路径,代码段起始行,代码段终止行”键值对并将其加入;
步骤(7).将和做差集运算得到过期的值集合,遍历,取出其中每个元素的代码段信息摘要,并在中找到对应的“代码段信息摘要文件路径,代码段起始行,代码段终止行”键值对将其删除,在中删除与文件路径对应的键值对,并将键值对集合合并至,记为;
步骤(8).遍历集合中的每个元素获取该元素的代码段信息摘要,在中查找和代码段信息摘要匹配的键,并获得该键对应的值集合,从中的每一个元素中可以获得源文件克隆代码段所在文件名、代码段起始行号和终止行号;
步骤(9).重复步骤(4)、(5)、(6)、(7)、(8),至待检测的源文件集合中的所有源文件都已处理完毕;
本发明所提供的基于索引的软件代码克隆检测方法由一组功能模块组成,它们包括:预处理模块、克隆检测模块和克隆报告模块。假设对于一般的检测过程,内存中已按步骤(1)、(2)和(3)建立全局代码段物理索引和全局相似代码段物理索引,以及全局辅助物理索引。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510043006.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种微小差分电容测量电路
- 下一篇:一种高频水冷变压器