当前位置: 首页 > 专利查询>浙江大学专利>正文

代码克隆检测方法、装置以及电子设备制造方法及图纸

技术编号:24089664 阅读:42 留言:0更新日期:2020-05-09 07:30
本申请公开了一种代码克隆检测方法,包括:获取至少两个版本的源代码组成的源代码集;将所述至少两个版本的源代码分别转换为对应的代码特征向量;将所述至少两个版本的源代码对应的代码特征向量输入集成分类模型进行克隆检测,获得克隆检测结果。所述代码克隆检测方法,通过提取源代码各自的特征信息将其转换为代码特征向量,在代码特征向量的基础上利用集成分类模型实现克隆检测,从而降低了源代码的特征损失,在此基础上实现的代码克隆检测更加精准,同时也更具有效性。

Code clone detection method, device and electronic equipment

【技术实现步骤摘要】
代码克隆检测方法、装置以及电子设备
本申请涉及软件克隆
,具体涉及一种代码克隆检测方法。本申请同时涉及一种代码克隆检测装置,以及一种电子设备。
技术介绍
随着软件系统规模的日趋扩大化和复杂化,软件开发工作也越来越繁重,在软件开发过程中,软件开发人员经常参照已有代码来实现类似功能,或者直接通过复制粘贴来“复用”已有代码,生成许多语义和功能上类似的代码,这就是代码克隆。尽管这种重用代码的方式在某种程度上能提高软件开发效率,但代码克隆却导致软件Bug(漏洞)的扩散,同时也导致软件维护难度加大,甚至会触发许可违规的风险;因此,代码克隆检测也随着软件的维护和发展变得愈加重要。目前,已提出许多代码克隆检测的方法和工具,这些方法和工具主要可分为三类:基于文本的代码克隆检测、基于标记的代码克隆检测以及基于树的代码克隆检测。其中,基于文本的代码克隆检测工具主要有NiCadCloneDetector,该工具首先对源代码进行了少量预处理,即格式化和标准化排版,然后通过简单的文本行比较来对潜在克隆代码进行动态聚类。基于标记的代码克隆检测工具主要有CCFinder和SourcererCC,二者均是在标记的基础上实现代码克隆检测。基于树的代码克隆检测工具主要有DECKARD,通过识别出AST(abstractsyntaxtree,抽象语法树)相似的代码来进行代码克隆检测。上述提供的代码克隆检测工具虽然比较实用,但只能通过检测文本、标记以及树(语法)级别的相似性来检测代码克隆,对于语义相似但语法未必相似的代码,无法实现语义级别的代码克隆检测,存在较大的缺陷。
技术实现思路
本申请提供一种代码克隆检测方法,以解决现有技术存在的缺陷。本申请同时涉及一种代码克隆检测装置,以及一种电子设备。本申请提供一种代码克隆检测方法,包括:获取至少两个版本的源代码组成的源代码集;将所述至少两个版本的源代码分别转换为对应的代码特征向量;将所述至少两个版本的源代码对应的代码特征向量输入集成分类模型进行克隆检测,获得克隆检测结果。可选的,所述将所述至少两个版本的源代码分别转换为对应的代码特征向量,包括:针对所述源代码集中至少两个版本的源代码,执行如下操作:基于代码字符语料库,提取所述源代码包含的所述代码字符语料库中的代码字符单元;构建所述代码字符单元的语义向量;根据所述代码字符单元的语义向量生成所述源代码的语义矩阵;将所述源代码的语义矩阵转换为语义向量,作为所述源代码对应的代码特征向量。可选的,所述集成分类模型,采用如下方式训练获得:获取原始训练代码集中至少两个版本的训练源代码;将所述至少两个版本的训练源代码分别转换为对应的训练特征向量;利用转换获得的至少两个训练特征向量进行模型训练。可选的,所述利用转换获得的至少两个训练特征向量进行模型训练子步骤执行之前,包括:对所述原始训练代码集中正向训练数据和负向训练数据进行平衡处理;其中,所述正向训练数据是指所述至少两个版本的训练源代码存在克隆代码,所述负向训练数据是指所述至少两个版本的训练源代码不存在克隆代码。可选的,所述对所述原始训练代码集中正向训练数据和负向训练数据进行平衡处理,包括:计算所述原始训练代码集中正向训练数据与负向训练数据之比;若所述正向训练数据与负向训练数据之比小于目标比,则在所述原始训练代码集随机选择负向训练数据加入所述原始训练代码集;若所述正向训练数据与负向训练数据之比大于目标比,则在所述原始训练代码集随机选择正向训练数据加入所述原始训练代码集。可选的,所述将所述至少两个版本的训练源代码分别转换为对应的训练特征向量,包括:基于代码字符语料库,提取所述训练源代码包含的所述代码字符语料库中的代码字符单元;构建所述代码字符单元的语义向量;根据所述训练源代码包含的代码字符单元的语义向量,生成所述训练源代码的语义矩阵;将所述语义矩阵转换成语义向量,作为所述训练源代码对应的训练特征向量。可选的,所述克隆检测结果携带所述至少两个版本源代码之间的代码克隆类型;其中,所述代码克隆类型包括下述至少一项:文本克隆、标记克隆、语法克隆和语义克隆。可选的,所述集成分类模型包括:采用集成学习方法训练获得的随机森林分类模型;其中,所述随机森林分类模型的基础学习器采用下述至少一项分类技术:决策树、朴素贝叶斯、支持向量机、线性判别分析和k-近邻分类器;所述随机森林分类模型的集成方法采用下述至少一项:装袋、增强和堆叠。可选的,所述将所述至少两个版本的源代码分别转换为对应的代码特征向量步骤,采用词嵌入技术将源代码集中至少两个版本的源代码分别转换为对应的所述代码特征向量;其中,所述词嵌入技术包括下述至少一项:词向量化和文本向量化。本申请还提供一种代码克隆检测装置,包括:获取源代码集单元,用于获取至少两个版本的源代码组成的源代码集;代码特征向量转换单元,用于将所述至少两个版本的源代码分别转换为对应的代码特征向量;克隆检测单元,用于将所述至少两个版本的源代码对应的代码特征向量输入集成分类模型进行克隆检测,获得克隆检测结果。本申请还提供一种电子设备,包括:存储器和处理器;所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令:获取至少两个版本的源代码组成的源代码集;将所述至少两个版本的源代码分别转换为对应的代码特征向量;将所述至少两个版本的源代码对应的代码特征向量输入集成分类模型进行克隆检测,获得克隆检测结果。与现有技术相比,本申请具有如下优点:本申请提供的所述代码克隆检测方法,包括:获取至少两个版本的源代码组成的源代码集;将所述至少两个版本的源代码分别转换为对应的代码特征向量;将所述至少两个版本的源代码对应的代码特征向量输入集成分类模型进行克隆检测,获得克隆检测结果。本申请提供的所述代码克隆检测方法,在对至少两个版本的源代码进行克隆检测的过程中,通过提取至少两个版本的源代码各自的特征信息来将源代码转换为各自对应的代码特征向量,在代码特征向量的基础上利用集成分类模型实现至少两个版本的源代码之间的克隆检测,从而降低了源代码的特征损失,在此基础上实现的代码克隆检测更加精准,同时也更具有效性。附图说明附图1是本申请提供的一种代码克隆检测方法实施例的处理流程图;附图2是本申请提供的一种代码克隆检测框架的示意图;附图3是本申请提供的一种代码克隆检测装置实施例的示意图;附图4是本申请提供的一种电子设备的示意图。具体实施方式在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其他方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开本文档来自技高网
...

【技术保护点】
1.一种代码克隆检测方法,其特征在于,包括:/n获取至少两个版本的源代码组成的源代码集;/n将所述至少两个版本的源代码分别转换为对应的代码特征向量;/n将所述至少两个版本的源代码对应的代码特征向量输入集成分类模型进行克隆检测,获得克隆检测结果。/n

【技术特征摘要】
1.一种代码克隆检测方法,其特征在于,包括:
获取至少两个版本的源代码组成的源代码集;
将所述至少两个版本的源代码分别转换为对应的代码特征向量;
将所述至少两个版本的源代码对应的代码特征向量输入集成分类模型进行克隆检测,获得克隆检测结果。


2.根据权利要求1所述的代码克隆检测方法,其特征在于,所述将所述至少两个版本的源代码分别转换为对应的代码特征向量,包括:
针对所述源代码集中至少两个版本的源代码,执行如下操作:
基于代码字符语料库,提取所述源代码包含的所述代码字符语料库中的代码字符单元;
构建所述代码字符单元的语义向量;
根据所述代码字符单元的语义向量生成所述源代码的语义矩阵;
将所述源代码的语义矩阵转换为语义向量,作为所述源代码对应的代码特征向量。


3.根据权利要求1所述的代码克隆检测方法,其特征在于,所述集成分类模型,采用如下方式训练获得:
获取原始训练代码集中至少两个版本的训练源代码;
将所述至少两个版本的训练源代码分别转换为对应的训练特征向量;
利用转换获得的至少两个训练特征向量进行模型训练。


4.根据权利要求3所述的代码克隆检测方法,其特征在于,所述利用转换获得的至少两个训练特征向量进行模型训练子步骤执行之前,包括:
对所述原始训练代码集中正向训练数据和负向训练数据进行平衡处理;
其中,所述正向训练数据是指所述至少两个版本的训练源代码存在克隆代码,所述负向训练数据是指所述至少两个版本的训练源代码不存在克隆代码。


5.根据权利要求4所述的代码克隆检测方法,其特征在于,所述对所述原始训练代码集中正向训练数据和负向训练数据进行平衡处理,包括:
计算所述原始训练代码集中正向训练数据与负向训练数据之比;
若所述正向训练数据与负向训练数据之比小于目标比,则在所述原始训练代码集随机选择负向训练数据加入所述原始训练代码集;
若所述正向训练数据与负向训练数据之比大于目标比,则在所述原始训练代码集随机选择正向训练数据加入所述原始训练代码集。


6.根据权利要求3所述的代码克隆检测方法,其特征在于,所述将所述至少两个版本的...

【专利技术属性】
技术研发人员:傅珉杨昕立鄢萌李元平章修琳吴芮杨小虎
申请(专利权)人:浙江大学
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1