本发明专利技术公开了一种相似代码检测方法及装置、电子设备、存储介质,所述方法包括:获取待检测的代码片段对;利用词嵌入技术,将所述代码片段对转换成包含语义信息的特征向量对;将所述特征向量对输入到训练好的集成学习分类器中,得到检测结果。所述训练好的集成学习分类器的训练过程包括:获取具有已知类别标签的代码片段对的相似数据集和不相似数据集;利用词嵌入技术,将所述相似数据集和不相似数据集的代码片段转换成包含语义信息的特征向量,得到对应的相似特征集和不相似特征集;利用过采样技术,对所述不相似特征集进行扩增;将所述相似特征集与扩增后的不相似特征集作为训练集,输入集成学习分类器进行训练。输入集成学习分类器进行训练。
【技术实现步骤摘要】
一种相似代码检测方法及装置、电子设备、存储介质
[0001]本申请涉及软件工程领域,尤其涉及一种相似代码检测方法及装置、电子设备、存储介质。
技术介绍
[0002]软件开发人员经常参照已有代码来实现类似功能,或者直接通过复制粘贴来“复用”代码,这样会产生很多语义和功能上相似的代码。尽管这种重用代码的方式某种程度上能提高开发效率,但是代码克隆却导致了软件bug的扩散,维护难度加大,甚至有许可违规的风险。随着软件系统规模越来越大也越来越复杂,相似代码检测在软件的维护和发展过程中变得愈加重要。通常,相似代码可以根据相似程度分为四种不同的类型:
[0003]1)Type1型。除了注释和布局之外,两个代码片段完全相同。
[0004]2)Type2型。除了Type
‑
1型差异之外,两个代码片段在标识符名称和字面常量值方面也不同。
[0005]3)Type3型。除了Type
‑
1和Type
‑
2型差异之外,这两个代码片段还添加,修改和删除了相关的语句。换句话说,它们在语法层面上是相似的。
[0006]4)Type4型。两个代码片段实现相同的功能,但在语法上不相似。
[0007]研究已经提出了一些相似代码检测的方法和工具,这些工具主要可分为三大类:基于文本、基于标记以及基于树。NICAD是一种基于文本的相似代码检测方法。CCFinder和SourcererCC是两个著名的基于标记的相似代码检测方法。DECKARD是一个基于树的相似代码检测工具。
[0008]在实现本专利技术的过程中,专利技术人发现现有技术中至少存在如下问题:这些工具只根据代码语法上的相似性来检测,对Type1
‑
Type3型相似代码检测效果较好,并不能有效检测Type4型相似代码。而实际中,Type4型相似代码恰恰是数量最多且亟需被检测的。
技术实现思路
[0009]本申请实施例的目的是提供一种相似代码检测方法及装置、电子设备、存储介质,以解决相关技术中存在的无法有效检测Type4型相似代码的技术问题。
[0010]根据本申请实施例的第一方面,提供一种方法,包括:
[0011]获取待检测的代码片段对;
[0012]利用词嵌入技术,将所述代码片段对转换成包含语义信息的特征向量对;
[0013]将所述特征向量对输入到训练好的集成学习分类器中,得到检测结果。
[0014]进一步地,利用词嵌入技术,将所述代码片段对转换成包含语义信息的特征向量,包括:
[0015]将所述代码片段对中的每个代码片段输入到所述词嵌入技术的模型中;
[0016]根据所述模型的最大化目标函数,分别计算得到所述代码片段中的单词的词义向量;
[0017]分别对代码片段包含的所有单词的词义向量取均值,得到所述代码片段的特征向量,从而得到所述代码片段对相对应的特征向量对。
[0018]进一步地,训练好的集成学习分类器的训练过程包括:
[0019]获取具有已知类别标签的代码片段对的相似数据集和不相似数据集;
[0020]利用词嵌入技术,将所述相似数据集和不相似数据集的代码片段转换成包含语义信息的特征向量,得到对应的相似特征集和不相似特征集;
[0021]利用过采样技术,对所述不相似特征集进行扩增;将所述相似特征集与扩增后的不相似特征集作为训练集对集成学习分类器进行训练。
[0022]进一步地,利用词嵌入技术,对所述相似数据集和不相似数据集的代码片段转换成包含语义信息的特征向量,得到对应的相似特征集和不相似特征集,包括:
[0023]将所述相似数据集和不相似数据集的代码片段输入到所述词嵌入技术的模型中;
[0024]根据所述模型的最大化目标函数,计算得到所述代码片段中的单词的词义向量;
[0025]对代码片段包含的所有单词的词义向量取均值,得到所述代码片段的特征向量;
[0026]根据所述相似数据集和不相似数据集的所有代码片段的特征向量,得到对应的相似特征集和不相似特征集。
[0027]进一步地,利用过采样技术,对所述不相似特征集进行扩增,包括:
[0028]获取所述相似特征集的第一数据量和所述不相似特征集的第二数据量;
[0029]设置所述第一数据量占所述第一数据量和第二数据量之和的目标比例;
[0030]选择所述不相似特征集中的实例;将所述实例添加到所述不相似特征集中,直到所述第二数据量与所述第一数据量和第二数据量之和的比值达到所述目标比例。
[0031]根据本申请实施例的第二方面,提供一种装置,包括:
[0032]获取模块,获取待检测的代码片段对;
[0033]转换模块,利用词嵌入技术,将所述代码片段对转换成包含语义信息的特征向量对;
[0034]检测模块,将所述特征向量对输入到训练好的集成学习分类器中,得到检测结果。
[0035]根据本申请实施例的第三方面,提供一种电子设备,包括:
[0036]一个或多个处理器;
[0037]存储器,用于存储一个或多个程序;
[0038]当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的方法。
[0039]根据本申请实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该指令被处理器执行时实现如第一方面所述方法的步骤。
[0040]本申请的实施例提供的技术方案可以包括以下有益效果:
[0041]由上述实施例可知,本申请采用词嵌入技术将代码片段转换为包含语义信息的特征向量,更好的挖掘出代码中的隐含的信息,有助于更好的判断出Type4型相似代码;将所述特征向量输入到集成学习分类器中,可以更全面的学习所述特征向量;有效地检测相似代码中数量最多,最难检测且亟需被检测的Type4型相似代码。同时,本专利技术未采用复杂的深度神经网络,可以保证在实际生产中可扩展性较高,检测效率较高。
[0042]应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不
能限制本申请。
附图说明
[0043]此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
[0044]图1是根据一示例性实施例示出的一种相似代码检测方法中集成学习分类器的训练过程流程图。
[0045]图2是根据一示例性实施例示出的步骤S102的流程图。
[0046]图3是根据一示例性实施例示出的步骤S103的流程图。
[0047]图4是根据一示例性实施例示出的一种相似代码检测方法的流程图。
[0048]图5是根据一示例性实施例示出的一种相似代码检测装置的框图。
具体实施方式
[0049]这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种相似代码检测方法,其特征在于,包括:获取待检测的代码片段对;利用词嵌入技术,将所述代码片段对转换成包含语义信息的特征向量对;将所述特征向量对输入到训练好的集成学习分类器中,得到检测结果。2.根据权利要求1所述的一种相似代码检测方法,其特征在于,利用词嵌入技术,将所述代码片段对转换成包含语义信息的特征向量对,包括:将所述代码片段对中的每个代码片段输入到所述词嵌入技术的模型中;根据所述模型的最大化目标函数,分别计算得到所述代码片段中的单词的词义向量;分别对代码片段包含的所有单词的词义向量取均值,得到所述代码片段的特征向量,从而得到所述代码片段对相对应的特征向量对。3.根据权利要求1所述的一种相似代码检测方法,其特征在于,训练好的集成学习分类器的训练过程包括:获取具有已知类别标签的代码片段对的相似数据集和不相似数据集;利用词嵌入技术,将所述相似数据集和不相似数据集的代码片段转换成包含语义信息的特征向量,得到对应的相似特征集和不相似特征集;利用过采样技术,对所述不相似特征集进行扩增;将所述相似特征集与扩增后的不相似特征集作为训练集,输入集成学习分类器进行训练。4.根据权利要求3所述的一种相似代码检测方法,其特征在于,利用词嵌入技术,对所述相似数据集和不相似数据集的代码片段转换成包含语义信息的特征向量,得到对应的相似特征集和不相似特征集,包括:将所述相似数据集和不相似数据集的代码片段输入到所述词嵌入技术的模型中;根据所述模型的最大化目标函数,计算得到所述代码片段中的单词的词义向量;对代码片段包含的所有单词的词义向量取均值,得到所述代码片段的特征向量;根据所述相似数据集和不相似数据集的所有代码片段的特征向量,得到对应的相似特征集和不相似特征集。5.根据权利要求3所述的一种相似代码检测方法,其特征在于,利用过采样技术,对所述不相似特征集进行扩增,包括:设置所述不相似特征集数据量占所述相似特征集...
【专利技术属性】
技术研发人员:杨昕立,吕何新,戴过勇,阮越,
申请(专利权)人:浙江树人学院浙江树人大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。