[发明专利]基于哈希值的代码克隆检测方法、电子设备、存储介质在审
申请号: | 201811308117.0 | 申请日: | 2018-11-05 |
公开(公告)号: | CN109445844A | 公开(公告)日: | 2019-03-08 |
发明(设计)人: | 陈秋远;杨朝晖;李善平 | 申请(专利权)人: | 浙江网新恒天软件有限公司 |
主分类号: | G06F8/75 | 分类号: | G06F8/75 |
代理公司: | 广州市越秀区哲力专利商标事务所(普通合伙) 44288 | 代理人: | 胡拥军;糜婧 |
地址: | 310000 浙江省杭*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 克隆检测 哈希 克隆 源代码 电子设备 聚类 行数 判定 标识符 读取 可读存储介质 存储介质 哈希算法 分组 代码库 代码行 复杂度 解析器 迁移性 两段 抽取 检测 语言 | ||
本发明提供基于哈希值的代码克隆检测方法,包括步骤:读取源代码,通过解析器抽取源代码中的代码库,得到克隆检测对象;通过哈希算法对克隆检测对象进行处理,获得克隆检测对象对应的匿名哈希值,通过匿名哈希值进行聚类,获得若干代码克隆分组;将代码克隆分组中的代码在组内两两进行比较,判断两段代码各自的行数或者有差异的代码行数是否小于阈值,是则判定为相似的代码克隆,否则判定不是代码克隆。本发明涉及电子设备与可读存储介质,用于执行上述方法。本发明能够检测到有标识符差异的代码克隆与有行数差异的代码克隆,能够针对COBOL源代码进行代码克隆检测,无平台及特定版本语言的限制,迁移性好,通过对哈希值进行聚类,降低整体复杂度。
技术领域
本发明涉及代码克隆检测技术领域,尤其涉及基于哈希值的代码克隆检测方法、电子设备、存储介质。
背景技术
代码克隆(CodeClone)是指软件源代码中重复出现的相同或相似的代码片断。这些代码片断可能完全相同,也可能经过了一些编辑性(如修改变量名)或逻辑性的修改(如修改为功能相似但功能不同的代码)。被认为互相克隆的代码片段往往具有相似的逻辑运算,实现了类似的功能。代码克隆一般是由于复制粘贴式的代码复用造成的,也可能是由于复用软件模式造成的。代码克隆大量存在于各种软件系统,特别是大型软件系统。代码克隆在软件工程中与许多问题密切相关。代码克隆检测有广泛的应用:首先,随着开源项目的发展、代码复用规模的扩大,代码复用的广泛程度可以作为代码质量的评判标准和选择所复用的代码模块的参考依据;其次,通过克隆代码检测可以找出大型系统中的代码克隆,并进行重构,从而消除代码克隆,提高源代码的质量。此外,代码的缺陷可能因为克隆而传播,代码克隆检测有助于定位并修复这种类型的缺陷。但是,现有的代码克隆检测工具缺乏对有标识符差异的代码检测的能力,缺乏对有行数差异的代码检测的能力,只能运行在特定平台上,缺乏迁移性,只能检测特定的编程语言。
发明内容
为了克服现有技术的不足,本发明的目的之一在于提供基于哈希值的代码克隆检测方法,解决了现有的代码克隆检测工具缺乏对有标识符差异的代码检测的能力,缺乏对有行数差异的代码检测的能力,无法针对COBOL进行检测,只能运行在特定平台上,缺乏迁移性,只能检测特定版本的语言的问题。
本发明提供基于哈希值的代码克隆检测方法,包括以下步骤:
代码预处理,读取源代码,通过解析器抽取所述源代码中的代码库,得到克隆检测对象;
克隆聚类,通过哈希算法对所述克隆检测对象进行处理,获得所述克隆检测对象对应的匿名哈希值,通过所述匿名哈希值进行聚类,获得若干代码克隆分组;
克隆比较,将所述代码克隆分组中的代码在组内两两进行比较,判断两段代码各自的行数或者有差异的代码行数是否小于阈值,是则判定为相似的代码克隆,否则判定不是代码克隆。
进一步地,所述代码预处理步骤还包括对所述克隆检测对象进行噪音消除。
进一步地,所述代码预处理步骤还包括对所述克隆检测对象中不同的编码格式进行统一。
进一步地,所述代码预处理步骤还包括通过哈希算法对所述克隆检测对象进行处理,获取所述克隆检测对象对应的全文哈希值,将所述全文哈希值中相同值对应的代码合并为同一代码段。
进一步地,所述代码预处理步骤中,所述哈希算法为SimHash算法;所述通过哈希算法对所述克隆检测对象进行处理具体为将所述克隆检测对象进行关键词抽取,得到若干关键词与权重对,计算每个所述关键词与权重对中关键词的哈希值,对哈希值与权重对进行位的纵向累加,得到所述全文哈希值。
进一步地,所述代码预处理步骤还包括对所述克隆检测对象进行变量名替换。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江网新恒天软件有限公司,未经浙江网新恒天软件有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811308117.0/2.html,转载请声明来源钻瓜专利网。