【技术实现步骤摘要】
一种基于抄袭者
‑
检测器对抗的软件克隆检测方法
[0001]本专利技术涉及一种基于抄袭者
‑
检测器对抗的软件克隆检测方法,基于建模两个代码的局部特征与全局特征并计算语义相似度,自动判断两个代码段是否属于克隆对并反馈给源代码开发者,属于自动化软件质量辅助维护
技术介绍
[0002]软件在现代社会中扮演着重要角色,各行各业都依赖于软件来实现信息化和智能化的业务流程。随着科技的不断发展,软件系统的开发越来越复杂,其中代码克隆是一个很常见的现象,其通常指在一个软件系统中出现的相似或完全相同的代码片段,这可能是开发人员需要快速构建系统或模块,复用代码而出现了重复的代码片段,它可能会影响软件系统的可维护性,造成版权抄袭等问题。因此大多数软件开发和维护过程,以及版权和作业的抄袭检查中,开发团队或者查审人员会对克隆代码进行控制和管理,以提高代码质量、降低缺陷率、减少版权抄袭情况的发生,但这需要消耗大量的人力和时间资源,因此对代码的自动克隆检测对软件质量的提升尤为重要。
[0003]然而, ...
【技术保护点】
【技术特征摘要】
1.一种基于抄袭者
‑
检测器对抗的软件克隆检测方法,其特征在于,通过以下步骤,根据两个代码片段的文本进行自动克隆检测:步骤(1)获得新的待检测的代码对;步骤(2)判断是否已存在训练完成的克隆检测模型,如果不存在,转入步骤(3),建立克隆检测模型;如果存在,转入步骤(13);步骤(3)获取原代码对、是否克隆的标记,构造训练集合;步骤(4)初始化克隆检测模型和抄袭者模型;步骤(5)利用抄袭者模型,对原代码对的两个代码段同时进行双向的语义等价的修改,得到标记一致的新生代码对;步骤(6)计算新生代码对与原代码对之间的距离,包括代码间的距离和代码内的距离,以及克隆检测模型在新生代码对上的检测错误率,新生代码对与原代码对之间的距离和检测错误率共同组成奖励,反馈给抄袭者模型,优化抄袭者模型的修改策略的权重参数;步骤(7)若抄袭者模型完成迭代次数,本轮抄袭者模型优化完成,转入步骤(8),否则转入步骤(5);步骤(8)对原代码对或新生代码对针对重要变量,进行基于树的裁剪,得到两个子代码段的集合;步骤(9)利用当前克隆检测模型,将两个子代码段集合通过预训练模型表示为针对变量的局部特征,以此作为两个多示例集合,通过最大池化和平均池化计算得到全局相似度;步骤(10)计算当前克隆检测模型在训练集上的损失;步骤(11)若克隆检测模型的损失低于预设损失阈值,模型训练完成,转入步骤(13),否则转入步骤(12);步骤(12)更新克隆检测模型权重参数,转入步骤(5)继续训练克隆检测模型和抄袭者模型;步骤(13)利用克隆检测模型,提取两段代码的多示例局部特征;步骤(14)根据多示例局部特征计算两段代码的语义相似度,如果语义相似度小于相似度阈值,判断为非克隆对,如果语义相似度大于相似度阈值,判断为克隆对,将判断结果输出给代码检测者;步骤(15)若还有代码对尚未进行克隆检测,转步骤(1),否则软件克隆检测过程结束。2.根据权利要求1所述的基于抄袭者
‑
检测器对抗的软件克隆检测方法,其特征在于,当已存在训练完成的软件克隆检测模型,对新的待检测源代码对(x
a
,x
b
)利用预训练模型建模两个代码x
a
,x
b
的语义特征,并使用式(1)判断所述代码对是否为克隆代码;I(
·
)为指示函数,当条件满足时返回1,代表两个代码段为克隆对;当条件不满足时返回0,代表两个代码段为非克隆对;函数d(
·
,
·
)是克隆检测模型对于代码对进行语义特征建模并计算相似度的结果,用来度量代码段所对应的两特征间的距离;ε为相似度阈值;f(x
a
,x
b
)=I(d(x
a
,x
b
)≥ε)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)。3.根据权利要求1所述的基于抄袭者
‑
检测器对抗的软件克隆检测方法,其特征在于,软件克隆检测建模流程为:首先构建待检测代码对中两段代码的树结构,根据代码文本中不同变量出现的次数和位置,分析两段代码中较为重要的变量,然后针对不同变量对代码进行基于树的裁剪,得到两个子代码段集合,接着利用预训练模型,将子代码段集合表示为
多示例的局部特征的集合,其中每个局部特征表示对应代码变量在代码中所体现的功能;之后,根据两个局部特征的集合,交叉计算两个子代码段集合之间的相似度矩阵,并通过横向最大池化层得到匹配变量之后的相似度矩阵,将高于相似度阈值的数值通过平均池化层,最终得到代码对的相似度,最后根据相似度返回是否克隆的结果。4.根据权利要求3所述的基于抄袭者
‑
检测器对抗的软件克隆检测方法,其特征在于,出现范围越广、次数越多的变量越重要。5.根据权利要求3所述的基于抄袭者
‑
检测器对抗的软件克隆检测方法,其特征在于,克隆检...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。