一种代码相似度检测的方法、装置及存储介质制造方法及图纸

技术编号:37037422 阅读:12 留言:0更新日期:2023-03-29 19:16
本公开涉及代码相似度检测的方法、装置及存储介质。代码相似度检测方法包括:针对待检测代码和第一比较代码分别进行结构分析,获得结构类图;计算待检测代码结构类图和第一比较代码结构类图的相似度;在相似度小于等于第一阈值的情况下,判断为代码结构相似,并且计算待检测代码的词条与第二比较代码间的词条间的分布比重,并按照从大到小的顺序排列分布比重来获得第一特征向量;计算待检测代码词条的出现频率权重而获得第二特征向量;对第一特征向量与第二特征向量取交集来获得最终特征向量;根据最终特征向量和第一比较代码的词条向量,计算余弦相似度,比较余弦相似度与第二阈值的大小来判断是否抄袭。值的大小来判断是否抄袭。值的大小来判断是否抄袭。

【技术实现步骤摘要】
一种代码相似度检测的方法、装置及存储介质


[0001]本公开总体上涉及安全领域,更具体地涉及代码相似度检测的方法、装置及存储介质。

技术介绍

[0002]随着软件规模的不断增大,软件系统中代码重复是不可避免的,这不仅增加了程序代码的容量和运行时间,也给软件维护带来了难题。因此,代码相似性具有重要的研究意义。源代码相似性度量旨在判断一段代码与其他代码在语句、语义功能上的相似程度,是代码克隆、代码剽窃、代码推荐、知识产权、信息检索等应用的基础。
[0003]目前相似度检测中多用TF

IDF算法来计算特征值文档中的重要程度和文档区分度。但单纯使用TF

IDF来判断一个特征是否有区分度是不够的,它没有考虑特征词在类间的分布,很难很好地反应代码的真实情况,无法提取隐藏在源代码中的深层次复杂特征。

技术实现思路

[0004]在下文中给出了关于本公开的简要概述,以便提供关于本公开的一些方面的基本理解。但是,应当理解,这个概述并不是关于本公开的穷举性概述。它并不是意图用来确定本公开的关键性部分或重要部分,也不是意图用来限定本公开的范围。其目的仅仅是以简化的形式给出关于本公开的某些概念,以此作为稍后给出的更详细描述的前序。
[0005]根据本公开的一个方面,提供一种代码相似度检测方法,包括:针对待检测代码和第一比较代码分别进行结构分析,获得待检测代码结构类图和第一比较代码结构类图;计算待检测代码结构类图和第一比较代码结构类图的相似度;在相似度小于等于第一阈值的情况下,判断为代码结构相似,并且计算待检测代码的词条与第二比较代码间的词条间的分布比重,并按照从大到小的顺序排列分布比重来获得第一特征向量,所述第二比较代码是与待检测代码同类型的代码;计算待检测代码词条的出现频率权重,并按照从大到小的顺序排列出现频率权重来获得第二特征向量;对第一特征向量与第二特征向量取交集来获得最终特征向量;根据最终特征向量和第一比较代码的词条向量,计算余弦相似度,比较余弦相似度与第二阈值的大小,如果余弦相似度大于第二阈值,则判定为待检测代码为抄袭;如果余弦相似度小于等于第二阈值,则判断为待检测代码没有抄袭。
[0006]根据本公开的又一个方面,提供一种代码相似度检测装置,包括:存储器,其上存储有指令;以及处理器,被配置为执行存储在所述存储器上的指令,以执行上述的方法。
[0007]根据本公开的又一个方面,提供一种计算机可读存储介质,包括计算机可执行指令,所述计算机可执行指令在由一个或多个处理器执行时,使得所述一个或多个处理器执行根据上述的方法。
[0008]根据本专利技术,能够提高向量值的精度,能有效提高相似度计算结果的准确性。
附图说明
[0009]构成说明书的一部分的附图描述了本公开的实施例,并且连同说明书一起用于解释本公开的原理。
[0010]参照附图,根据下面的详细描述,可以更清楚地理解本公开,其中:
[0011]图1是示出了根据本专利技术的一个实施例的代码相似度检测方法的流程图。
[0012]图2是示出了根据本专利技术的一个具体应用例的代码相似度检测方法的流程图。
[0013]图3示出了可以实现根据本公开的实施例的计算设备的示例性配置。
具体实施方式
[0014]参考附图进行以下详细描述,并且提供以下详细描述以帮助全面理解本公开的各种示例实施例。以下描述包括各种细节以帮助理解,但是这些细节仅被认为是示例,而不是为了限制本公开,本公开是由随附权利要求及其等同内容限定的。在以下描述中使用的词语和短语仅用于能够清楚一致地理解本公开。另外,为了清楚和简洁起见,可能省略了对公知的结构、功能和配置的描述。本领域普通技术人员将认识到,在不脱离本公开的精神和范围的情况下,可以对本文描述的示例进行各种改变和修改。
[0015]图1是示出了根据本专利技术的一个实施例的代码相似度检测方法的流程图。
[0016]如图1所示,在步骤S101中,针对待检测代码和第一比较代码分别进行结构分析,获得待检测代码结构类图P1和第一比较代码结构类图P2。在一些实施例中,可以使用可视化建模工具对代码结构进行分析来生成类图,可视化建模工具可以是面向对象的统一建模语言的Rational Rose,应当理解可视化建模工具并不限于此。
[0017]接下来,在步骤S103中,计算待检测代码结构类图和第一比较代码结构类图的相似度。在一些实施例中,可以利用SSIM(图片结构相似性)算法来计算相似度,即
[0018][0019]其中,
[0020][0021][0022][0023][0024]P1
i
、P2
i
分别为类图P1、P2的第i个像素值,N为像素值的总数,μ表示类图的像素值的平均值,σ2表示类图的像素值的方差。
[0025]在步骤S105中,对在步骤S103中得到相似度与第一阈值进行比较,判断相似度是否小于等于第一阈值。在相似度小于等于第一阈值的情况下(即步骤S105中判断为“是”),进入到步骤S107,判断为代码结构相似,并且计算待检测代码的词条与第二比较代码间的词条间的分布比重,并按照从大到小的顺序排列分布比重来获得第一特征向量,其中,第二
比较代码是与待检测代码相同类型的代码。在一些实施例中,相同类型的代码是与待检测代码具有相同或类似功能、用途的代码或应用程序,例如,在待检测代码是通讯软件代码的情况下,第二比较代码可以是微信安装软件、QQ安装软件等通讯软件中的一个或多个。另外,在一些实施例中,可以在相似度大于第一阈值的情况下,进入到步骤S109,判断为代码结构不相似,此时可以结束相似度检测流程。在一些实施例中,可以例如利用卡方检验计算代码词条在同类代码间的分布比重,即
[0026][0027]其中,n表示切分后的代码词条,W表示切分后的所有代码词条的数量,E
i
表示各个代码词条在类间分布的理论值。在一些实施例中,理论值是通过四格表卡方检验的理论频数而得到的,理论频数的获得是本领域的公知技术,在此不再赘述。
[0028]接着,在步骤S111中,计算待检测代码的词条的出现频率权重,并按照从大到小的顺序排列出现频率权重来获得第二特征向量。在一些实施例中,可以利用以下公式(7)来计算词条出现频率权重,
[0029][0030]其中,i表示词条的编号,例如,将在某文件中切分后的代码词条分别标记为n1、n2、n3.......,i为自然数;j表示某代码词条所属的代码文件的编号,例如,n
1,2
表示代码文件2中的代码词条n1,n
2,3
表示代码文件3中的代码词条n2,j为自然数;W
i,j
表示代码词条n
i
在文件j中出现的次数;W
j
表示在文件j中所有代码词条的数目;|{j:n
i
∈d
j
}|表示待检测代码的词条n
i
包本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码相似度检测方法,包括:针对待检测代码和第一比较代码分别进行结构分析,获得待检测代码结构类图和第一比较代码结构类图;计算待检测代码结构类图和第一比较代码结构类图的相似度;在所述相似度小于等于第一阈值的情况下,判断为待检测代码和第一比较代码的代码结构相似,并且计算待检测代码的词条与第二比较代码间的词条间的分布比重,并按照从大到小的顺序排列分布比重来获得第一特征向量,所述第二比较代码是与待检测代码同类型的代码;计算待检测代码词条的出现频率权重,并按照从大到小的顺序排列出现频率权重来获得第二特征向量;对第一特征向量与第二特征向量取交集来获得最终特征向量;根据最终特征向量和第一比较代码的词条向量,计算余弦相似度,比较余弦相似度与第二阈值的大小,如果余弦相似度大于第二阈值,则判定为待检测代码为抄袭;如果余弦相似度小于等于第二阈值,则判断为待检测代码没有抄袭。2.根据权利要求1所述的方法,其中,利用SSIM算法来计算相似度,即其中,其中,其中,其中,其中,P1表示待检测代码结构类图,P2表示第一比较代码结构类图,P1
i
、P2
i
分别为类图P1、P2的第i个像素值,N为像素值的总数,μ表示类图的像素值的平均值,σ2表示类图的像素值的方差。3.根据权利要求1所述的方法,其中,在相似度大于第一阈值的情况下,判断为代码结构不相似。4.根据权利要求1所述的方法,其中,利用卡方检验计算代码词条在同类代码间的分布比重,其中,n表示切分后的代码词条,W表示切分后的所有代码词条的数量,E
i
表示各个代码词条在类间分布的理论值。

【专利技术属性】
技术研发人员:闵婕
申请(专利权)人:中国电信股份有限公司
类型:发明
国别省市:

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

1