CN116578336A - 一种基于抄袭者-检测器对抗的软件克隆检测方法 - Google Patents
一种基于抄袭者-检测器对抗的软件克隆检测方法 Download PDFInfo
- Publication number
- CN116578336A CN116578336A CN202310599633.8A CN202310599633A CN116578336A CN 116578336 A CN116578336 A CN 116578336A CN 202310599633 A CN202310599633 A CN 202310599633A CN 116578336 A CN116578336 A CN 116578336A
- Authority
- CN
- China
- Prior art keywords
- code
- model
- similarity
- plagiarism
- codes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 108
- 238000012549 training Methods 0.000 claims abstract description 41
- 230000004048 modification Effects 0.000 claims abstract description 18
- 238000012986 modification Methods 0.000 claims abstract description 18
- 238000000034 method Methods 0.000 claims description 27
- 230000006870 function Effects 0.000 claims description 16
- 239000011159 matrix material Substances 0.000 claims description 13
- 238000011176 pooling Methods 0.000 claims description 13
- 238000010367 cloning Methods 0.000 claims description 12
- 230000008569 process Effects 0.000 claims description 12
- 238000004364 calculation method Methods 0.000 claims description 6
- 238000004590 computer program Methods 0.000 claims description 6
- 230000002457 bidirectional effect Effects 0.000 claims description 3
- 238000011478 gradient descent method Methods 0.000 claims description 3
- 238000005457 optimization Methods 0.000 claims description 3
- 230000008485 antagonism Effects 0.000 claims 1
- 238000006243 chemical reaction Methods 0.000 description 7
- 238000012423 maintenance Methods 0.000 description 7
- 230000009471 action Effects 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 125000004122 cyclic group Chemical group 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000003042 antagnostic effect Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000033001 locomotion Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种基于抄袭者‑检测器对抗的软件克隆检测方法,首先获得新的待检测的代码对;如果不存在训练完成的克隆检测模型,利用于抄袭者‑检测器对抗训练的软件克隆检测方法建立克隆检测模型:构造训练集合;初始化克隆检测模型和抄袭者模型;利用抄袭者模型,根据对原代码的修改,得到新生代码对;计算抄袭者的奖励和损失,优化抄袭者修改策略的权重参数;利用检测模型,对原代码对进行不同的裁剪,得到两个子代码段的集合,进行代码表示,计算全局相似度;计算检测模型在训练集上的损失,根据损失判断是否完成模型训练。利用克隆检测模型分别提取两段代码的语义特征;计算两个语义特征之间的相似度;输出代码对克隆检测的结果。
Description
技术领域
本发明涉及一种基于抄袭者-检测器对抗的软件克隆检测方法,基于建模两个代码的局部特征与全局特征并计算语义相似度,自动判断两个代码段是否属于克隆对并反馈给源代码开发者,属于自动化软件质量辅助维护技术领域。
背景技术
软件在现代社会中扮演着重要角色,各行各业都依赖于软件来实现信息化和智能化的业务流程。随着科技的不断发展,软件系统的开发越来越复杂,其中代码克隆是一个很常见的现象,其通常指在一个软件系统中出现的相似或完全相同的代码片段,这可能是开发人员需要快速构建系统或模块,复用代码而出现了重复的代码片段,它可能会影响软件系统的可维护性,造成版权抄袭等问题。因此大多数软件开发和维护过程,以及版权和作业的抄袭检查中,开发团队或者查审人员会对克隆代码进行控制和管理,以提高代码质量、降低缺陷率、减少版权抄袭情况的发生,但这需要消耗大量的人力和时间资源,因此对代码的自动克隆检测对软件质量的提升尤为重要。
然而,不论是传统的基于不同代码表示的克隆检测模型挖掘特定的代码信息,还是大规模预训练模型更全面地学习代码表示,他们虽然在克隆检测上取得了优秀性能,但只适用于静态的代码克隆。而现实生活中抄袭者会对代码进行修改以迷惑检测器,针对动态开放的克隆检测任务,现有工作提出使用对抗框架,使得抄袭者生成具有干扰性的代码数据,进一步训练克隆检测器。然而,面对预训练模型优秀的表达能力,单一且固定的修改模板难以让抄袭者生成具有干扰性的新生代码对,不具备进一步提升检测模型的能力。并且预训练模型采用自然语言的方式对代码进行代码表达,直接得到全局特征的过程中信息被压缩,增加了克隆检测的难度。现有建模技术难以突破抄袭者和检测器这两方面的障碍。
发明内容
发明目的:大部分软件克隆检测模型无法应对动态对抗的抄袭环节,现有的抄袭者难以给出足够干扰预训练模型的动作修改,预训练模型作为检测器直接产生全局特征会造成信息损失。针对这些问题,本发明提出了一种基于抄袭者-检测器对抗的软件克隆检测方法。该方法中抄袭者采用十种语义等价的操作,设计“代码间-代码内”作为奖励对克隆对中两个代码段同时进行双向修改,产生具有扰动性的数据训练检测器,而检测器产生基于重要变量的多示例局部特征,来代替全局特征,恢复损失的信息,通过比较对应变量之间的语义相似度来判断代码对是否克隆,将结果反馈给审查人员。
技术方案:一种基于抄袭者-检测器对抗的软件克隆检测方法,通过以下步骤,根据两个代码片段的文本进行自动克隆检测:
步骤(1)获得新的待检测的代码对;
步骤(2)判断是否已存在训练完成的克隆检测模型,如果不存在,转入步骤(3),建立克隆检测模型;如果存在,转入步骤(13);
步骤(3)获取大量原代码对、是否克隆的标记,构造训练集合;
步骤(4)初始化克隆检测模型和抄袭者模型;
步骤(5)利用抄袭者模型,对原代码对的两个代码段同时进行双向的语义等价的修改,得到标记一致的新生代码对;
步骤(6)计算新生代码对与原代码对之间的距离,包括代码间的距离和代码内的距离,以及克隆检测模型在新生代码对上的检测错误率,新生代码对与原代码对之间的距离和检测错误率共同组成奖励,反馈给抄袭者模型,优化抄袭者模型的修改策略的权重参数;
步骤(7)若抄袭者模型完成迭代次数,本轮抄袭者模型优化完成,转入步骤(8),否则转入步骤(5);
步骤(8)对原代码对或新生代码对针对重要变量,进行基于树的裁剪,得到两个子代码段的集合;
步骤(9)利用当前克隆检测模型,将两个子代码段集合通过预训练模型表示为针对变量的局部特征,以此作为两个多示例集合,通过最大池化和平均池化计算得到全局相似度;
步骤(10)计算当前克隆检测模型在训练集上的损失;
步骤(11)若克隆检测模型的损失低于预设损失阈值,模型训练完成,转入步骤(13),否则转入步骤(12);
步骤(12)更新克隆检测模型权重参数,转入步骤(5)继续训练克隆检测模型和抄袭者模型;
步骤(13)利用克隆检测模型,提取两段代码的多示例局部特征;
步骤(14)根据多示例局部特征计算两段代码的语义相似度,如果语义相似度小于相似度阈值,判断为非克隆对,如果语义相似度大于相似度阈值,判断为克隆对,将判断结果输出给代码检测者;
步骤(15)若还有代码对尚未进行克隆检测,转步骤(1),否则软件克隆检测过程结束。
一种计算机设备,该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述计算机程序时实现如上所述的基于抄袭者-检测器对抗的软件克隆检测方法。
一种计算机可读存储介质,该计算机可读存储介质存储有执行如上所述的基于抄袭者-检测器对抗的软件克隆检测方法的计算机程序。
有益效果:与现有软件克隆检测方法相比,本发明对抗框架中,抄袭者(抄袭者模型)可采用的修改动作扰动更大、选择更多,并鼓励抄袭者生成距离更远、更不易被辨别的新生数据以进一步训练,得到稳健性更强的克隆检测模型。而检测器(检测模型)采用局部特征恢复了预训练模型直接得到全局特征中损失的信息,更适合克隆检测任务,使检测模型准确性更高,性能得到进一步提升。
附图说明
图1为基于自动化软件质量辅助维护装置的软件克隆检测过程图;
图2为本发明实施例的软件克隆检测器工作流程图;
图3为本发明实施例的软件克隆检测建模流程图;
图4为本发明实施例的软件克隆检测模型生成流程图。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
基于自动化软件质量辅助维护装置的软件克隆检测过程图如图1所示。在软件系统的开发和维护的过程中,开发者会检测系统中存在的克隆代码对。在获得这些待检测的源代码对后,自动化软件质量辅助维护装置将对代码对进行自动克隆检测,输出检测结果,并实时反馈给相关开发人员和审查人员。如果检测结果为克隆对,则会对代码对进行重点标记,否则开发人员直接返回源代码并不做标记。若尚有新的待检测的克隆对未处理,则继续对新的源代码对进行检测,直至没有未检测的源代码对。
软件质量维护装置的核心内容是基于抄袭者-检测器对抗的软件克隆检测方法,本实施例的软件克隆检测器工作流程如图2所示。本实施例的软件克隆检测方法充分利用了代码对的信息,通过建模两个代码段的语义特征,并且计算特征之间的相似度得到克隆结果,从而将人工软件克隆检测自动化。包括如下步骤:
步骤(0)是起始动作;
步骤(1)获得新的待克隆检测的代码对;
步骤(2)判断是否已存在训练完成的软件克隆检测模型,如果不存在,转入步骤(3),如果存在,转入步骤(4);
步骤(3)获取大量原始代码对、是否克隆的标记,构建训练集合,建立克隆检测模型;
步骤(4)利用软件克隆检测的大规模预训练模型分别提取待检测的代码对中两段代码的语义特征,从而对代码对进行建模;
步骤(5)根据得到的两个语义特征,计算其之间的相似度,给出克隆检测结果。如果代码对的语义相似度大于相似度阈值,则认为其为克隆代码对,如果代码对的语义相似度小于相似度阈值,则认为其为非克隆代码对。
步骤(6)输出模型给出的检测结果,代码自动克隆检测过程结束。
当已存在训练完成的软件克隆检测模型,对新的待检测源代码对(xa,xb)利用大规模预训练模型建模两个代码的语义特征,并使用式(1)判断该代码对是否为克隆代码。I(·)为指示函数,当条件满足时返回1,代表两个代码段为克隆对;当条件不满足时返回0,代表两个代码段为非克隆对。函数d(·,·)是克隆检测模型对于代码对进行语义特征建模并计算相似度的结果,用来度量代码段所对应的两特征间的距离。相似度阈值ε一般设置为0.5。
f(xa,xb)=I(d(xa,xb)≥ε) (1)
本发明实施例的软件克隆检测建模流程图如图3所示。本发明首先构建待检测代码对中两段代码的树结构,根据代码文本中不同变量出现的次数和位置,分析两段代码中较为重要的变量,然后针对不同变量对代码进行基于树的裁剪,得到两个子代码段集合,接着利用大规模预训练模型,将子代码段集合表示为多示例的局部特征的集合,其中每个局部特征表示对应代码变量在代码中所体现的功能。之后,根据两个局部特征的集合,交叉计算两个子代码段集合之间的相似度矩阵,并通过横向最大池化层得到匹配变量之后的相似度矩阵,将高于相似度阈值的数值通过平均池化层,最终得到代码对的相似度,最后根据相似度返回是否克隆的结果。具体实施过程将会详细说明。
本模型首先针对程序代码对构建基于行的语法树,它是一种对语法进行解析后,将代码行作为节点的树结构表示方法,该树中每个节点对应代码中的一行,兄弟节点表示顺序关系,父子节点表示控制流关系。此处认为出现范围越广、次数越多的变量越重要,分析得到若干个重要变量后,基于树结构进行子代码段的生成,具体操作如下:选定一个变量后,对代码的树结构进行裁剪,首先出现该变量的代码行节点进行保留,接着保留该节点的父节点以及其他的祖先节点,但对其兄弟节点进行舍弃,同样的对其父节点以及祖先节点的为出现目标变量的兄弟节点进行舍弃,从而得到对应的子代码段。
将代码对(xa,xb)针对不同变量形成子代码段集合后,根据大规模预训练模型将其表示为两个多示例局部特征的包,为:A={a1,a2,…,an},B={b1,b2,…,bm}。定义两个示例ai和bj之间的相似度s(ai,bj)为克隆检测模型对两个示例所预测为克隆对的概率s(ai,bj)=
D(ai,bj)。
对两个局部特征的包通过交叉计算,得到相似度矩阵相似度矩阵S的元素sij表示示例ai和bj之间的相似度。将相似度矩阵S按行经过最大池化层,得到匹配局部特征之后的相似度矩阵/>其中相似度矩阵/>的每个元素/>表示示例ai与其相匹配的bj之间的相似度/>接着对匹配后的相似度经过平均池化,为了避免不相关变量对结果的影响,对低于阈值τ的相似度进行舍弃,最终得到代码对相似度/> 将该结果与相似度阈值进行比较,得到克隆检测的结果。
本发明采用了十种适用于方法级代码的转换方法作为原子修改操作符,包括常见的重构,如变量重命名,到更具攻击性的转换,如循环交换,从不同程度对代码进行修改。这些原子修改操作为:重命名函数、重命名参数、重命名变量、添加死码、try-catch封装、for循环转换、while循环转换、do循环转换、判断条件转换、提取条件语句。
本发明实施例的软件克隆检测模型生成流程图如图4所示。首先收集大量原代码对数据和是否克隆的标记数据,构造训练集。初始化克隆检测模型和抄袭者模型。利用抄袭者模型对原代码,根据当前策略,对两段代码同时进行保持语义等价的修改,即在代码的合适位置(如:将循环转换操作应用在出现循环语句的位置,判断条件的转换和提取应用在出现判断条件语句的位置)多次应用本发明的原子修改操作符,得到标签一致的新生代码对,根据检测模型计算奖励反馈给抄袭者模型,其中包括“代码间-代码内”的距离,以及检测模型对新生代码的错误率,以此更新抄袭者模型参数。若抄袭者模型未完成迭代次数,继续训练抄袭者模型,若抄袭者模型已完成迭代次数,则进入检测模型的训练阶段。对原代码对和新生代码对针对变量进行基于树的裁剪,根据检测模型得到局部特征的结合,计算相似度矩阵,通过池化层计算得到全局相似度,计算当前检测模型在训练集上的损失。当检测模型的训练损失大于人工设定的损失阈值时,更新检测模型参数,继续训练抄袭者模型和检测模型。直到训练损失小于预设的损失阈值时,训练完成,得到克隆检测模型。具体实施过程将会详细说明。
本发明采用强化学习的方式来优化抄袭者模型的修改路径,其中原子动作为所定义的十种操作。抄袭者模型采用裁剪替代的目标函数式(2)将损失函数控制在一定范围内,在优化策略的同时限制每次对策略的变化幅度,从而在固定部署下学习到最优修改路径。是时间步t处优势函数的估计,通常与价值函数和奖励相关联,用来评估当前动作相对于当前状态的优越程度,如式(2)所示。其中t表示在固定步长T轨迹内的时刻,st表示当前状态,
V(st)为当前状态st下值函数的价值,rt为当前状态下的奖励,δt表示当前时刻t所增长的价值,γ为衰减因子。
期望表示在交替进行采样和优化的强化学习算法中,有限批样本的经验平均值。学习目标是最优修改路径πθ,其为一种策略参数θ下的概率模型,πθ(at|st)表示在给定当前状态st下,采取行动at的概率。进一步采用/>作为概率比,指新旧策略在某一状态下采取某一动作的概率的比值,用于计算策略梯度。本抄袭者模型利用随机梯度下降方法(SGD,Stochastic Gradient Descent)最小化式(3)中的损失函数LC(θ),更新模型参数。其中/>是被修正的代理目标函数,通过裁剪概率比rt(θ),将其限制在[1-∈,1+∈]固定区间内,∈为裁剪范围。
本发明中的抄袭者模型采用双向修改策略,为克隆代码对的两个代码段xa,xb分别学习两个修改策略得到新生克隆代码对ga(xa),gb(xb),d(·,·)表示由检测模型得到的两段代码之间的相似度,yi为第i对代码对是否克隆的真实标签(0表示非克隆,1表示克隆)。考虑采用“代码间-代码内”的符合目标作为抄袭者的奖励r,如式(4)所示。
本发明中克隆检测模型的优化目标为检测模型预测概率与样本实际标签的交叉熵,如式(5)。检测器模型利用随机梯度下降方法最小化式(5)中的损失函数L更新模型参数,其中yi为第i对代码对是否克隆的真实标签(0表示非克隆,1表示克隆),表示第i对代码对中两段代码/>由检测模型得到的相似度,N为代码对的数量。检测模型利用反向传播网络,每次迭代过程把损失信号沿着网络结构反向传回,并对网络权重进行更新,以减小模型在训练集上的训练损失。当模型在训练集上的演化损失L小于预先设定的阈值ε时,停止更新网络,模型学习完成。
显然,本领域的技术人员应该明白,上述的本发明实施例的基于抄袭者-检测器对抗的软件克隆检测方法各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
Claims (9)
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所述的基于抄袭者-检测器对抗的软件克隆检测方法,其特征在于,当已存在训练完成的软件克隆检测模型,对新的待检测源代码对(xa,xb)利用预训练模型建模两个代码xa,xb的语义特征,并使用式(1)判断所述代码对是否为克隆代码;I(·)为指示函数,当条件满足时返回1,代表两个代码段为克隆对;当条件不满足时返回0,代表两个代码段为非克隆对;函数d(·,·)是克隆检测模型对于代码对进行语义特征建模并计算相似度的结果,用来度量代码段所对应的两特征间的距离;ε为相似度阈值;
f(xa,xb)=I(d(xa,xb)≥ε) (1)。
3.根据权利要求1所述的基于抄袭者-检测器对抗的软件克隆检测方法,其特征在于,软件克隆检测建模流程为:首先构建待检测代码对中两段代码的树结构,根据代码文本中不同变量出现的次数和位置,分析两段代码中较为重要的变量,然后针对不同变量对代码进行基于树的裁剪,得到两个子代码段集合,接着利用预训练模型,将子代码段集合表示为多示例的局部特征的集合,其中每个局部特征表示对应代码变量在代码中所体现的功能;之后,根据两个局部特征的集合,交叉计算两个子代码段集合之间的相似度矩阵,并通过横向最大池化层得到匹配变量之后的相似度矩阵,将高于相似度阈值的数值通过平均池化层,最终得到代码对的相似度,最后根据相似度返回是否克隆的结果。
4.根据权利要求3所述的基于抄袭者-检测器对抗的软件克隆检测方法,其特征在于,出现范围越广、次数越多的变量越重要。
5.根据权利要求3所述的基于抄袭者-检测器对抗的软件克隆检测方法,其特征在于,克隆检测模型首先针对程序代码对构建基于行的语法树,语法树中每个节点对应代码中的一行,兄弟节点表示顺序关系,父子节点表示控制流关系;分析得到若干个重要变量后,基于树结构进行子代码段的生成,具体操作如下:选定一个变量后,对代码的树结构进行裁剪,首先出现该变量的代码行节点进行保留,接着保留该节点的父节点以及其他的祖先节点,但对其兄弟节点进行舍弃,同样的对其父节点以及祖先节点的为出现目标变量的兄弟节点进行舍弃,从而得到对应的子代码段;
将代码对(xa,xb)针对不同变量形成子代码段集合后,根据大规模预训练模型将其表示为两个多示例局部特征的包,为:A={a1,a2,…,an},B={b1,b2,…,bm};定义两个示例ai和bj之间的相似度s(ai,bj)为克隆检测模型对两个示例所预测为克隆对的概率s(ai,bj)=
D(ai,bj);
对两个局部特征的包通过交叉计算,得到相似度矩阵相似度矩阵S的元素sij表示示例ai和bj之间的相似度;将相似度矩阵S按行经过最大池化层,得到匹配局部特征之后的相似度矩阵/>其中相似度矩阵/>的每个元素/>表示示例ai与其相匹配的bj之间的相似度/>接着对匹配后的相似度经过平均池化,对低于阈值τ的相似度进行舍弃,最终得到代码对相似度/>将相似度结果与相似度阈值进行比较,得到克隆检测的结果。
6.根据权利要求1所述的基于抄袭者-检测器对抗的软件克隆检测方法,其特征在于,所述步骤(5)中抄袭者模型采用双向修改策略,为代码对的两个代码段xa,xb分别学习两个修改策略得到新生克隆代码对ga(xa),gb(xb),d(·,·)表示由检测模型得到的两段代码之间的相似度,yi为第i对代码对是否克隆的真实标签,0表示非克隆,1表示克隆,考虑采用“代码间-代码内”的符合目标作为抄袭者的奖励r,如式(4)所示;
7.根据权利要求1所述的基于抄袭者-检测器对抗的软件克隆检测方法,其特征在于,所述克隆检测模型的优化目标为检测模型预测概率与样本实际标签的交叉熵,如式(5),检测器模型利用随机梯度下降方法最小化式(5)中的损失函数L更新模型参数,其中yi为第i对代码对是否克隆的真实标签,0表示非克隆,1表示克隆,表示第i对代码对中两段代码/>由检测模型得到的相似度,N为代码对的数量;检测模型利用反向传播网络,每次迭代过程把损失信号沿着网络结构反向传回,并对网络权重进行更新,以减小模型在训练集上的训练损失;当模型在训练集上的演化损失L小于预先设定的阈值ε时,停止更新网络,模型学习完成;
8.一种计算机设备,其特征在于:该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行上述计算机程序时实现如权利要求1-7中任一项所述的基于抄袭者-检测器对抗的软件克隆检测方法。
9.一种计算机可读存储介质,其特征在于:该计算机可读存储介质存储有执行如权利要求1-7中任一项所述的基于抄袭者-检测器对抗的软件克隆检测方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310599633.8A CN116578336A (zh) | 2023-05-24 | 2023-05-24 | 一种基于抄袭者-检测器对抗的软件克隆检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310599633.8A CN116578336A (zh) | 2023-05-24 | 2023-05-24 | 一种基于抄袭者-检测器对抗的软件克隆检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116578336A true CN116578336A (zh) | 2023-08-11 |
Family
ID=87542948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310599633.8A Pending CN116578336A (zh) | 2023-05-24 | 2023-05-24 | 一种基于抄袭者-检测器对抗的软件克隆检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116578336A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117113964A (zh) * | 2023-08-18 | 2023-11-24 | 北方工业大学 | 一种作文抄袭检测方法 |
-
2023
- 2023-05-24 CN CN202310599633.8A patent/CN116578336A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117113964A (zh) * | 2023-08-18 | 2023-11-24 | 北方工业大学 | 一种作文抄袭检测方法 |
CN117113964B (zh) * | 2023-08-18 | 2024-03-08 | 北方工业大学 | 一种作文抄袭检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111783100B (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
CN112699377B (zh) | 基于切片属性图表示学习的函数级代码漏洞检测方法 | |
CN110162478B (zh) | 一种基于缺陷报告的缺陷代码路径定位方法 | |
CN112463424B (zh) | 一种基于图的端到端程序修复方法 | |
CN109857457B (zh) | 一种在双曲空间中学习源代码中的函数层次嵌入表示方法 | |
CN110162972B (zh) | 一种基于语句联合编码深度神经网络的uaf漏洞检测方法 | |
CN114816497B (zh) | 基于bert预训练模型的链接生成方法 | |
CN113254675B (zh) | 基于自适应少样本关系抽取的知识图谱构建方法 | |
CN114898121A (zh) | 基于图注意力网络的混凝土坝缺陷图像描述自动生成方法 | |
CN116578336A (zh) | 一种基于抄袭者-检测器对抗的软件克隆检测方法 | |
Meilong et al. | An approach to semantic and structural features learning for software defect prediction | |
CN116402352A (zh) | 一种企业风险预测方法、装置、电子设备及介质 | |
CN117236677A (zh) | 一种基于事件抽取的rpa流程挖掘方法及装置 | |
CN111258909B (zh) | 一种测试样本生成方法及装置 | |
CN115935372A (zh) | 一种基于图嵌入和双向门控图神经网络的漏洞检测方法 | |
CN115328782A (zh) | 基于图表示学习和知识蒸馏的半监督软件缺陷预测方法 | |
CN113127933B (zh) | 一种基于图匹配网络的智能合约庞氏骗局检测方法及系统 | |
CN114416479A (zh) | 一种基于流外正则化的日志序列异常检测方法 | |
CN113268370A (zh) | 一种根因告警分析方法、系统、设备及存储介质 | |
Zhao et al. | Suzzer: A vulnerability-guided fuzzer based on deep learning | |
CN113159441A (zh) | 银行业务项目实施情况的预测方法及装置 | |
CN116909788A (zh) | 一种任务导向和视角不变的多模态故障诊断方法及系统 | |
CN115438190B (zh) | 一种配电网故障辅助决策知识抽取方法及系统 | |
CN110554952B (zh) | 一种基于搜索的分层回归测试数据生成方法 | |
CN116561761A (zh) | 一种基于智能合约字节码的漏洞检测方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |