一种代码相似度检测的方法、装置及存储介质与流程

文档序号:33625972发布日期:2023-03-28 20:46阅读:48来源:国知局
一种代码相似度检测的方法、装置及存储介质与流程

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


背景技术:

2.随着软件规模的不断增大,软件系统中代码重复是不可避免的,这不仅增加了程序代码的容量和运行时间,也给软件维护带来了难题。因此,代码相似性具有重要的研究意义。源代码相似性度量旨在判断一段代码与其他代码在语句、语义功能上的相似程度,是代码克隆、代码剽窃、代码推荐、知识产权、信息检索等应用的基础。
3.目前相似度检测中多用tf-idf算法来计算特征值文档中的重要程度和文档区分度。但单纯使用tf-idf来判断一个特征是否有区分度是不够的,它没有考虑特征词在类间的分布,很难很好地反应代码的真实情况,无法提取隐藏在源代码中的深层次复杂特征。


技术实现要素:

4.在下文中给出了关于本公开的简要概述,以便提供关于本公开的一些方面的基本理解。但是,应当理解,这个概述并不是关于本公开的穷举性概述。它并不是意图用来确定本公开的关键性部分或重要部分,也不是意图用来限定本公开的范围。其目的仅仅是以简化的形式给出关于本公开的某些概念,以此作为稍后给出的更详细描述的前序。
5.根据本公开的一个方面,提供一种代码相似度检测方法,包括:针对待检测代码和第一比较代码分别进行结构分析,获得待检测代码结构类图和第一比较代码结构类图;计算待检测代码结构类图和第一比较代码结构类图的相似度;在相似度小于等于第一阈值的情况下,判断为代码结构相似,并且计算待检测代码的词条与第二比较代码间的词条间的分布比重,并按照从大到小的顺序排列分布比重来获得第一特征向量,所述第二比较代码是与待检测代码同类型的代码;计算待检测代码词条的出现频率权重,并按照从大到小的顺序排列出现频率权重来获得第二特征向量;对第一特征向量与第二特征向量取交集来获得最终特征向量;根据最终特征向量和第一比较代码的词条向量,计算余弦相似度,比较余弦相似度与第二阈值的大小,如果余弦相似度大于第二阈值,则判定为待检测代码为抄袭;如果余弦相似度小于等于第二阈值,则判断为待检测代码没有抄袭。
6.根据本公开的又一个方面,提供一种代码相似度检测装置,包括:存储器,其上存储有指令;以及处理器,被配置为执行存储在所述存储器上的指令,以执行上述的方法。
7.根据本公开的又一个方面,提供一种计算机可读存储介质,包括计算机可执行指令,所述计算机可执行指令在由一个或多个处理器执行时,使得所述一个或多个处理器执行根据上述的方法。
8.根据本发明,能够提高向量值的精度,能有效提高相似度计算结果的准确性。
附图说明
9.构成说明书的一部分的附图描述了本公开的实施例,并且连同说明书一起用于解释本公开的原理。
10.参照附图,根据下面的详细描述,可以更清楚地理解本公开,其中:
11.图1是示出了根据本发明的一个实施例的代码相似度检测方法的流程图。
12.图2是示出了根据本发明的一个具体应用例的代码相似度检测方法的流程图。
13.图3示出了可以实现根据本公开的实施例的计算设备的示例性配置。
具体实施方式
14.参考附图进行以下详细描述,并且提供以下详细描述以帮助全面理解本公开的各种示例实施例。以下描述包括各种细节以帮助理解,但是这些细节仅被认为是示例,而不是为了限制本公开,本公开是由随附权利要求及其等同内容限定的。在以下描述中使用的词语和短语仅用于能够清楚一致地理解本公开。另外,为了清楚和简洁起见,可能省略了对公知的结构、功能和配置的描述。本领域普通技术人员将认识到,在不脱离本公开的精神和范围的情况下,可以对本文描述的示例进行各种改变和修改。
15.图1是示出了根据本发明的一个实施例的代码相似度检测方法的流程图。
16.如图1所示,在步骤s101中,针对待检测代码和第一比较代码分别进行结构分析,获得待检测代码结构类图p1和第一比较代码结构类图p2。在一些实施例中,可以使用可视化建模工具对代码结构进行分析来生成类图,可视化建模工具可以是面向对象的统一建模语言的rational rose,应当理解可视化建模工具并不限于此。
17.接下来,在步骤s103中,计算待检测代码结构类图和第一比较代码结构类图的相似度。在一些实施例中,可以利用ssim(图片结构相似性)算法来计算相似度,即
[0018][0019]
其中,
[0020][0021][0022][0023][0024]
p1i、p2i分别为类图p1、p2的第i个像素值,n为像素值的总数,μ表示类图的像素值的平均值,σ2表示类图的像素值的方差。
[0025]
在步骤s105中,对在步骤s103中得到相似度与第一阈值进行比较,判断相似度是否小于等于第一阈值。在相似度小于等于第一阈值的情况下(即步骤s105中判断为“是”),进入到步骤s107,判断为代码结构相似,并且计算待检测代码的词条与第二比较代码间的词条间的分布比重,并按照从大到小的顺序排列分布比重来获得第一特征向量,其中,第二
idf算法的基础上,加入卡方检验算法,对特征向量值进行二次过滤,以提高向量值的精度,能有效提高相似度计算结果的准确性。
[0036]
图2是示出了根据本发明的一个具体应用例的代码相似度检测方法的流程图。
[0037]
第一步s1:设定待检测代码的结构类图p1,比较代码结构类图p2,词条n={n1,n2,...,ni},所有的词条数目w,比较文件的总数d,代码相似度sim。
[0038]
第二步s2:使用已有工具rational rose对代码结构进行分析并生成类图p1、p2。
[0039]
第三步:利用ssim算法计算代码类图相似度,
[0040][0041]
其中,
[0042][0043][0044][0045][0046]
p1i、p2i分别为类图p1、p2的第i个像素值,n为像素值的总数,μ表示类图的像素值的平均值,σ2表示类图的像素值的方差。
[0047]
第四步s4:比较ssim值是否位于[0,1]区间。
[0048]
第五步s5:如果ssim值不位于[0,1]间,则判断为代码结构不相似,流程结束。
[0049]
第六步s6:如果ssim位于[0,1]间,则判断为代码结构相似。
[0050]
第七步s7:引入外部同类型代码,利用卡方检验计算代码词条在同类代码间的分布比重,
[0051][0052]
其中,n表示切分后的代码词条,w表示切分后的所有代码词条的数量,ei表示各个代码词条在类间分布的理论值,并从大到小排列获得特征向量t0={t1,t2...,ti}。
[0053]
第八步s8:计算待检测代码的词条出现频率权重,
[0054][0055]
其中,i表示词条的编号,例如,将在某文件中切分后的代码词条分别标记为n1、n2、n3.......,i为自然数;j表示某代码词条所属的代码文件的编号,例如,n
1,2
表示代码文件2中的代码词条n1,n
2,3
表示代码文件3中的代码词条n2,j为自然数;w
i,j
表示代码词条ni在文件j中出现的次数;wj表示在文件j中所有代码词条的数目;|{j:ni∈dj}|表示待检测代码的词条ni包含于第二比较代码文件中编号为j的词条集合dj的文件数目(即w
i,j
≠0的文件数目),d表示第二比较代码的文件的总数。如果该词语不在词条库中,就会导致分母为零,因此一般情况下使用1+|{j:ni∈dj}|,并从大到小排列获得特征向量t1={t1,t2,...,ti},t0
与t1取交集获得最终特征向量t={t1,t2,...,ti}。
[0056]
第九步s9:根据最终特征向量和第一比较代码的词条向量,计算余弦相似度,
[0057][0058]
第十步s10:比较sim与阈值的大小。
[0059]
第十一步s11:如果sim》阈值,则判断为待检测代码为抄袭;如果sim≤阈值,则判断为待检测代码没有抄袭。
[0060]
根据本发明,在流程中具有代码结构相似度检测,达到预筛选的目的,并且,在tf-idf算法的基础上,加入卡方检验算法,对特征向量值进行二次过滤,以提高向量值的精度,能有效提高相似度计算结果的准确性。
[0061]
在本具体实施例中,实验测试样本数为1000,代码行数为10到15万行。经测试统计后发现:使用tf-idf算法平均相似度检出率为33.24%,使用综合度量算法平均相似度检出率为37.73%,总准确度提高了13.51%。
[0062]
图3示出了能够实现根据本公开的实施例的计算设备1200的示例性配置。
[0063]
计算设备1200是能够应用本公开的上述方面的硬件设备的实例。计算设备1200可以是被配置为执行处理和/或计算的任何机器。计算设备1200可以是但不限制于工作站、服务器、台式计算机、膝上型计算机、平板计算机、个人数据助手(pda)、智能电话、车载计算机或以上组合。
[0064]
如图3所示,计算设备1200可以包括可以经由一个或多个接口与总线1202连接或通信的一个或多个元件。总线2102可以包括但不限于,工业标准架构(industry standard architecture,isa)总线、微通道架构(micro channel architecture,mca)总线、增强isa(eisa)总线、视频电子标准协会(vesa)局部总线、以及外设组件互连(pci)总线等。计算设备1200可以包括例如一个或多个处理器1204、一个或多个输入设备1206以及一个或多个输出设备1208。一个或多个处理器1204可以是任何种类的处理器,并且可以包括但不限于一个或多个通用处理器或专用处理器(诸如专用处理芯片)。处理器1202例如可以对应于图1中的处理电路1010。输入设备1206可以是能够向计算设备输入信息的任何类型的输入设备,并且可以包括但不限于鼠标、键盘、触摸屏、麦克风和/或远程控制器。输出设备1208可以是能够呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。
[0065]
计算设备1200还可以包括或被连接至非暂态存储设备1214,该非暂态存储设备1214可以是任何非暂态的并且可以实现数据存储的存储设备,并且可以包括但不限于盘驱动器、光存储设备、固态存储器、软盘、柔性盘、硬盘、磁带或任何其他磁性介质、压缩盘或任何其他光学介质、缓存存储器和/或任何其他存储芯片或模块、和/或计算机可以从其中读取数据、指令和/或代码的其他任何介质。计算设备1200还可以包括随机存取存储器(ram)1210和只读存储器(rom)1212。rom 1212可以以非易失性方式存储待执行的程序、实用程序或进程。ram 1210可提供易失性数据存储,并存储与计算设备1200的操作相关的指令。计算设备1200还可包括耦接至数据链路1218的网络/总线接口1216。网络/总线接口1216可以是能够启用与外部装置和/或网络通信的任何种类的设备或系统,并且可以包括但不限于调
制解调器、网络卡、红外线通信设备、无线通信设备和/或芯片集(诸如蓝牙
tm
设备、802.11设备、wifi设备、wimax设备、蜂窝通信设施等)。
[0066]
本公开可以被实现为装置、系统、集成电路和非瞬时性计算机可读介质上的计算机程序的任何组合。可以将一个或多个处理器实现为执行本公开中描述的部分或全部功能的集成电路(ic)、专用集成电路(asic)或大规模集成电路(lsi)、系统lsi,超级lsi或超lsi组件。
[0067]
本公开包括软件、应用程序、计算机程序或算法的使用。可以将软件、应用程序、计算机程序或算法存储在非瞬时性计算机可读介质上,以使诸如一个或多个处理器的计算机执行上述步骤和附图中描述的步骤。例如,一个或多个存储器以可执行指令存储软件或算法,并且一个或多个处理器可以关联执行该软件或算法的一组指令,以根据本公开中描述的实施例提供各种功能。
[0068]
软件和计算机程序(也可以称为程序、软件应用程序、应用程序、组件或代码)包括用于可编程处理器的机器指令,并且可以以高级过程性语言、面向对象编程语言、功能性编程语言、逻辑编程语言或汇编语言或机器语言来实现。术语“计算机可读介质”是指用于向可编程数据处理器提供机器指令或数据的任何计算机程序产品、装置或设备,例如磁盘、光盘、固态存储设备、存储器和可编程逻辑设备(pld),包括将机器指令作为计算机可读信号来接收的计算机可读介质。
[0069]
举例来说,计算机可读介质可以包括动态随机存取存储器(dram)、随机存取存储器(ram)、只读存储器(rom)、电可擦只读存储器(eeprom)、紧凑盘只读存储器(cd-rom)或其他光盘存储设备、磁盘存储设备或其他磁性存储设备,或可以用于以指令或数据结构的形式携带或存储所需的计算机可读程序代码以及能够被通用或专用计算机或通用或专用处理器访问的任何其它介质。如本文中所使用的,磁盘或盘包括紧凑盘(cd)、激光盘、光盘、数字多功能盘(dvd)、软盘和蓝光盘,其中磁盘通常以磁性方式复制数据,而盘则通过激光以光学方式复制数据。上述的组合也包括在计算机可读介质的范围内。
[0070]
提供本公开的主题作为用于执行本公开中描述的特征的装置、系统、方法和程序的示例。但是,除了上述特征之外,还可以预期其他特征或变型。可以预期的是,可以用可能代替任何上述实现的技术的任何新出现的技术来完成本公开的部件和功能的实现。
[0071]
另外,以上描述提供了示例,而不限制权利要求中阐述的范围、适用性或配置。在不脱离本公开的精神和范围的情况下,可以对所讨论的元件的功能和布置进行改变。各种实施例可以适当地省略、替代或添加各种过程或部件。例如,关于某些实施例描述的特征可以在其他实施例中被结合。
[0072]
另外,在本公开的描述中,术语“第一”、“第二”、“第三”等仅用于描述目的,而不能理解为指示或暗示相对重要性和顺序。
[0073]
类似地,虽然在附图中以特定次序描绘了操作,但是这不应该被理解为要求以所示的特定次序或者以顺序次序执行这样的操作,或者要求执行所有图示的操作以实现所希望的结果。在某些情况下,多任务处理和并行处理可以是有利的。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1