The invention provides a code cloning detection method based on hash value, including steps: reading source code, extracting code base from source code by parser, obtaining cloning detection object; processing cloning detection object by hash algorithm, obtaining anonymous hash value corresponding to cloning detection object, clustering anonymous hash value, obtaining several code cloning groups; Comparing the code in the code clone grouping in two groups to determine whether the number of lines of the two codes is less than the threshold or not, the code cloning in the code clone grouping is similar, otherwise it is not code cloning. The invention relates to an electronic device and a readable storage medium for performing the above method. The invention can detect code clones with different identifiers and lines, can detect code clones for COBOL source code, has no platform and specific version language limitations, good migration, and reduces overall complexity by clustering hash values.
【技术实现步骤摘要】
基于哈希值的代码克隆检测方法、电子设备、存储介质
本专利技术涉及代码克隆检测
,尤其涉及基于哈希值的代码克隆检测方法、电子设备、存储介质。
技术介绍
代码克隆(CodeClone)是指软件源代码中重复出现的相同或相似的代码片断。这些代码片断可能完全相同,也可能经过了一些编辑性(如修改变量名)或逻辑性的修改(如修改为功能相似但功能不同的代码)。被认为互相克隆的代码片段往往具有相似的逻辑运算,实现了类似的功能。代码克隆一般是由于复制粘贴式的代码复用造成的,也可能是由于复用软件模式造成的。代码克隆大量存在于各种软件系统,特别是大型软件系统。代码克隆在软件工程中与许多问题密切相关。代码克隆检测有广泛的应用:首先,随着开源项目的发展、代码复用规模的扩大,代码复用的广泛程度可以作为代码质量的评判标准和选择所复用的代码模块的参考依据;其次,通过克隆代码检测可以找出大型系统中的代码克隆,并进行重构,从而消除代码克隆,提高源代码的质量。此外,代码的缺陷可能因为克隆而传播,代码克隆检测有助于定位并修复这种类型的缺陷。但是,现有的代码克隆检测工具缺乏对有标识符差异的代码检测的能力,缺乏对有行数差异的代码检测的能力,只能运行在特定平台上,缺乏迁移性,只能检测特定的编程语言。
技术实现思路
为了克服现有技术的不足,本专利技术的目的之一在于提供基于哈希值的代码克隆检测方法,解决了现有的代码克隆检测工具缺乏对有标识符差异的代码检测的能力,缺乏对有行数差异的代码检测的能力,无法针对COBOL进行检测,只能运行在特定平台上,缺乏迁移性,只能检测特定版本的语言的问题。本专利技术提供基于哈希 ...
【技术保护点】
1.基于哈希值的代码克隆检测方法,其特征在于包括以下步骤:代码预处理,读取源代码,通过解析器抽取所述源代码中的代码库,得到克隆检测对象;克隆聚类,通过哈希算法对所述克隆检测对象进行处理,获得所述克隆检测对象对应的匿名哈希值,通过所述匿名哈希值进行聚类,获得若干代码克隆分组;克隆比较,将所述代码克隆分组中的代码在组内两两进行比较,判断两段代码各自的行数或者有差异的代码行数是否小于阈值,是则判定为相似的代码克隆,否则判定不是代码克隆。
【技术特征摘要】
1.基于哈希值的代码克隆检测方法,其特征在于包括以下步骤:代码预处理,读取源代码,通过解析器抽取所述源代码中的代码库,得到克隆检测对象;克隆聚类,通过哈希算法对所述克隆检测对象进行处理,获得所述克隆检测对象对应的匿名哈希值,通过所述匿名哈希值进行聚类,获得若干代码克隆分组;克隆比较,将所述代码克隆分组中的代码在组内两两进行比较,判断两段代码各自的行数或者有差异的代码行数是否小于阈值,是则判定为相似的代码克隆,否则判定不是代码克隆。2.如权利要求1所述的基于哈希值的代码克隆检测方法,其特征在于:所述代码预处理步骤还包括对所述克隆检测对象进行噪音消除。3.如权利要求2所述的基于哈希值的代码克隆检测方法,其特征在于:所述代码预处理步骤还包括对所述克隆检测对象中不同的编码格式进行统一。4.如权利要求3所述的基于哈希值的代码克隆检测方法,其特征在于:所述代码预处理步骤还包括通过哈希算法对所述克隆检测对象进行处理,获取所述克隆检测对象对应的全文哈希值,将所述全文哈希值中相同值对应的代码合并为同一代码段。5.如权利要求4所述的基于哈希值的代码克隆检测方法,其特征在于:所述代码预处理步骤中,所述哈希算法为SimHash算法;所述通过哈希算法对所述克隆检测对象进行处理具体为将所述克隆检测对象进行关键词抽取,得到若干关键...
【专利技术属性】
技术研发人员:陈秋远,杨朝晖,李善平,
申请(专利权)人:浙江网新恒天软件有限公司,
类型:发明
国别省市:浙江,33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。