相似代码检测方法、装置、设备和计算机存储介质

文档序号:1815549 发布日期:2021-11-09 浏览:17次 >En<

阅读说明:本技术 相似代码检测方法、装置、设备和计算机存储介质 (Similar code detection method, device, equipment and computer storage medium ) 是由 李雪 于 2020-05-09 设计创作,主要内容包括:本发明公开了一种相似代码检测方法,包括以下步骤:在接收到检测指令时,从第一代码文件中抽取第一有效函数片段,从第二代码文件中抽取第二有效函数片段;将所述第一有效函数片段与所述第二有效函数片段进行图片转换生成第一图片与第二图片;计算所述第一图片与所述第二图片的图片相似度;当所述图片相似度大于预设阈值时,则判定所述第一代码文件与所述第二代码文件相似。本发明还公开了一种相似代码检测装置、设备和计算机存储介质,实现了通用于各种开发语言代码的相似代码检测。(The invention discloses a method for detecting similar codes, which comprises the following steps: when a detection instruction is received, extracting a first effective function segment from a first code file, and extracting a second effective function segment from a second code file; performing picture conversion on the first effective function fragment and the second effective function fragment to generate a first picture and a second picture; calculating the picture similarity of the first picture and the second picture; and when the image similarity is larger than a preset threshold value, judging that the first code file is similar to the second code file. The invention also discloses a similar code detection device, equipment and a computer storage medium, which realize the similar code detection which is generally used for various development language codes.)

相似代码检测方法、装置、设备和计算机存储介质

技术领域

本发明涉及相似度检测领域,尤其涉及相似代码检测方法、装置、设备和计算机存储介质。

背景技术

在软件工程领域,通过拷贝代码以提升代码复用率进而提升开发效率和缩短开发周期是众多开发人员认同的观点,但拷贝代码的行为也给软件版权的保护带来了巨大的困难,开发人员通常在拷贝代码后对代码进行部分修改,导致抄袭检测的难度增加。

相似代码检测是检测代码抄袭的常用方法,现有相似代码检测方法往往只具有针对某一种开发语言进行检测的能力,针对不同开发语言进行相似度检测时则要准备多种不同的检测工具或方法,当前相似代码检测方法通用性差成了亟待解决的问题。

发明内容

本发明的主要目的在于提供一种相似代码检测方法、装置、设备和计算机存储介质,旨在解决当前相似代码检测方法通用性差的技术问题。

为实现上述目的,本发明提供相似代码检测方法,所述相似代码检测方法包括以下步骤:

在接收到检测指令时,从第一代码文件中抽取第一有效函数片段,从第二代码文件中抽取第二有效函数片段;

将所述第一有效函数片段与所述第二有效函数片段进行图片转换生成第一图片与第二图片;

计算所述第一图片与所述第二图片的图片相似度;

当所述图片相似度大于预设阈值时,则判定所述第一代码文件与所述第二代码文件相似。

在一实施例中,所述在接收到检测指令时,从第一代码文件中抽取第一有效函数片段,从第二代码文件中抽取第二有效函数片段的步骤,包括:

在接收到指令时,从第一代码文件中抽取第一函数片段,从第二代码文件中抽取第二函数片段;

对所述第一函数片段与所述第二函数片段进行代码预处理,生成第一有效函数片段与第二有效函数片段。

在一实施例中,所述对所述第一函数片段与所述第二函数片段进行代码预处理的步骤,包括:

对所述第一函数片段与所述第二函数片段进行代码凸显、代码过滤、代码格式化、代码抽象化中的至少一个或多个代码预处理。

在一实施例中,所述对所述第一函数片段与所述第二函数片段进行代码预处理的步骤,包括:

对所述第一函数片段与所述第二函数片段进行代码凸显、代码过滤、代码格式化、代码抽象化中的至少一个或多个代码预处理。

在一实施例中,所述对所述第一函数片段与所述第二函数片段使用代码凸显进行处理的步骤,包括:

将所述第一函数片段与所述第二函数片段中的各代码组成部分根据预设规则表分别使用不同颜色高亮显示。

在一实施例中,所述对所述第一函数片段与所述第二函数片段进行代码过滤的代码预处理的步骤,包括:

分别定位第一函数片段和第二函数片段中的冗余片段;

将所述冗余片段从所述第一函数片段与所述第二函数片段中过滤删除。

在一实施例中,所述对所述第一函数片段与所述第二函数片段进行代码格式化的代码预处理的步骤,包括:

读取第一函数片段和第二函数片段的代码格式;

将所述第一函数片段与所述第二函数片段的代码格式进行标准化处理。

在一实施例中,所述对所述第一函数片段与所述第二函数片段进行代码抽象化的代码预处理的步骤,包括:

定位第一函数片段和第二函数片段中的关键词;

将所述第一函数片段和第二函数片段中的关键词替换为标准关键词。

在一实施例中,所述将所述第一有效函数片段与所述第二有效函数片段进行图片转换生成第一图片与第二图片的步骤,包括:

将所述第一有效函数片段与所述第二有效函数片段使用预设编码规则进行编码依次生成第一图片与第二图片,所述第一图片与第二图片的图片格式相同。

在一实施例中,所述计算所述第一图片与所述第二图片的图片相似度的步骤之前,包括:

将所述第一图片与第二图片进行归一化处理。

在一实施例中,所述计算所述第一图片与所述第二图片的图片相似度的步骤,包括:

对所述第一图片与第二图片进行图片预处理,计算所述进行图片预处理后的第一图片与所述进行图片预处理后的第二图片的图片相似度。

在一实施例中,所述对所述第一图片与第二图片进行图片预处理的步骤,包括:

对所述第一图片与所述第二图片进行灰度处理、反相处理、模糊处理中的至少一个或多个图片预处理。

在一实施例中,所述对所述第一图片与所述第二图片进行灰度处理的图片预处理的步骤,包括:

将所述第一图片与所述第二图片中的各像素点色值进行均值处理;

将所述均值处理后的色值作为对应像素点处理后的色值。

在一实施例中,所述对所述第一图片与所述第二图片进行反相处理的图片预处理的步骤,包括:

读取所述第一图片与所述第二图片中各像素点色值;

基于当前色域对所述各像素点色值进行差值处理,将所述差值处理后的色值作为对应像素点处理后的色值。

在一实施例中,所述对所述第一图片与所述第二图片进行模糊处理的图片预处理的步骤,包括:

以所述第一图片与所述第二图片中的各像素点作为中心像素点;

将所述中心像素点预设半径内的像素点的色值进行均值处理,将所述均值处理后的色值作为中心像素点处理后的色值。

在一实施例中,所述计算所述第一图片与所述第二图片的图片相似度的步骤,包括:

将所述第一图片与所述第二图片分别进行向量化处理,生成第一向量与第二向量;

计算所述第一向量与所述第二向量的余弦距离,将所述余弦距离作为所述第一图片与所述第二图片的相似度。

在一实施例中,所述将所述第一图片与所述第二图片分别进行向量化处理的步骤,包括:

将所述第一图片与所述第二图片分别划分为预设数量个图片单元;

将各像素色值均为色域极值的所述图片单元,从所述第一图片与所述第二图片剔除;

对剔除后的所述第一图片与所述第二图片,进行向量化处理,依次生成第一向量与第二向量。

在一实施例中,所述当所述图片相似度大于预设阈值时,则判定所述第一代码文件与所述第二代码文件相似的步骤之后,包括:

生成相似代码检测报告,所述报告包含代码预处理步骤、图片预处理步骤、所述图片相似度和所述预设阈值。

此外,为实现上述目的,本发明还提供一种相似代码检测装置,所述相似代码检测装置包括:

抽取模块:用于在接收到检测指令时,从第一代码文件中抽取第一有效函数片段,从第二代码文件中抽取第二有效函数片段;

转换模块:用于将所述第一有效函数片段与所述第二有效函数片段进行图片转换生成第一图片与第二图片;

计算模块:用于计算所述第一图片与所述第二图片的图片相似度;

判定模块:用于当所述图片相似度大于预设阈值时,则判定所述第一代码文件与所述第二代码文件相似。

此外,为实现上述目的,本发明还提供一种相似代码检测设备;

所述相似代码检测设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中:

所述计算机程序被所述处理器执行时实现如上所述的相似代码检测方法的步骤。

此外,为实现上述目的,本发明还提供计算机存储介质;

所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的相似代码检测方法的步骤。

本发明实施例提出的一种相似代码检测方法、装置、设备和计算机存储介质,通过在接收到检测指令时,从两个代码文件中抽取函数片段,并将所述函数片段进行代码凸显、代码过滤、代码格式化、代码抽象化等预处理手段后使用相同编码格式转换成为格式相同的图片,并将所述图片进行灰度处理、反相处理、模糊处理等处理后,计算两代码文件对应图片的相似度,并将所述相似度作为两代码文件的相似度,通过本发明的方法,将现有的基于本文和结构的相似代码检测的方法进一步拓展,通过将代码转换成为图片后再进行比对,使得该相似度比对方法适用于多种开发语言编写的代码。

附图说明

图1是本发明实施例方案涉及的硬件运行环境的装置结构示意图;

图2为本发明相似代码检测方法第一实施例的流程示意图;

图3为本发明相似代码检测方法第二实施例的流程示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

由于现有相似代码检测方法往往只具有针对某一种开发语言进行检测的能力,针对不同开发语言进行相似度检测时则要准备多种不同的检测工具,为相似代码检测工作,针对不同开发语言进行相似度检测时则要准备多种不同的检测工具。

本发明提供一种解决方案,通过在接收到检测指令时,从两个代码文件中抽取函数片段,并将所述函数片段进行代码凸显、代码过滤、代码格式化、代码抽象化等预处理手段后使用相同编码格式转换成为格式相同的图片,并将所述图片进行灰度处理、反相处理、模糊处理等处理后,计算两代码文件对应图片的相似度,并将所述相似度作为两代码文件的相似度,通过本发明的方法,将现有的基于本文和结构的相似代码检测的方法进一步拓展,通过将代码转换成为图片后再进行比对,使得该相似度比对方法适用于多种开发语言编写的代码。

如图1所示,图1是本发明实施例方案涉及的硬件运行环境的终端(又叫相似代码检测设备,其中,相似代码检测设备可以是由单独的相似代码检测装置构成,也可以是由其他装置与相似代码检测装置组合形成)结构示意图。

本发明实施例终端可以固定终端,也可以是移动终端,如,带联网功能的智能空调、智能电灯、智能电源、智能音箱、自动驾驶汽车、PC(personal computer)个人计算机、智能手机、平板电脑、电子书阅读器、便携计算机等。

如图1所示,该终端可以包括:处理器1001,例如,中央处理器Central ProcessingUnit,CPU),网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真WIreless-FIdelity,WIFI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如,磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

可选地,终端还可以包括摄像头、RF(Radio Frequency,射频)电路,传感器、音频电路、WiFi模块;输入单元,比显示屏,触摸屏;网络接口可选除无线接口中除WiFi外,蓝牙、探针等等。其中,传感器比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器;当然,移动终端还可配置陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。

本领域技术人员可以理解,图1中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,该计算机软件产品存储在一个存储介质(存储介质:又叫计算机存储介质、计算机介质、可读介质、可读存储介质、计算机可读存储介质或者直接叫介质等,存储介质可以是非易失性可读存储介质,如RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及计算机程序。

在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端(用户端),与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的计算机程序,并执行本发明以下实施例提供的相似代码检测方法中的步骤。

参照图2,本发明一种相似代码检测方法的第一实施例中,所述相似代码检测方法包括:

步骤S10,在接收到检测指令时,从第一代码文件中抽取第一有效函数片段,从第二代码文件中抽取第二有效函数片段。

相似代码检测设备在接收到检测指令时,从第一代码文件中抽取第一有效函数片段,从第二代码文件中抽取第二有效函数片段。所述相似代码检测设备可为PC、平板电脑等设备,本实施例中不做具体限定,所述检测指令可为相似代码检测设备在一定条件下自动触发,也可为通过用户点击屏幕、按下按键等操作输入至相似代码检测设备的指令。在相似代码检测设备接收到检测指令时,使用预先设置的正则表达式,从第一代码文件和第二代码文件中匹配并抽取函数片段,所述正则表达式是用事先定义的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑,除此之外,还可使用其他现有方法进行函数片段抽取,所述第一代码文件和第二代码文件为进行相似度比对的目标对象,在本实施例中,不具体区分两者为待比对代码文件或是参考代码文件,所述第一代码文件与第二代码文件均使用相同的代码提取手段和相同的函数片段处理手段。

抽取后的函数片段通常包含多余的字符,或者在代码格式上存在差异,进行以上都将对相似代码检测结果造成影响,因此,需要对抽取后的函数片段进行代码预处理降低上述原因带来的影响,所述代码预处理方法将在后续实施例进行详细说明,从第一代码文件中抽取的函数片段称为第一函数片段,从第二代码文件中抽取的函数片段称为第二函数片段,所述第一函数片段与所述第二函数片段经过代码预处理后,形成对应的第一有效函数片段和第二有效函数片段。

步骤S20,将所述第一有效函数片段与所述第二有效函数片段进行图片转换生成第一图片与第二图片。

相似代码检测设备将所述第一有效函数片段与所述第二有效函数片段进行图片转换生成第一图片与第二图片。现有相似代码检测方法通常是基于文本或结构进行,存在一种开发语言对应一种相似度检测方法的情况,即现有的相似度检测方法并不通用,本实施例提出的相似度检测方法通过将前述步骤中抽取的第一有效函数片段和第二有效函数片段转换层对应的第一图片和第二图片,再基于图片进行相似度检查,因此不受第一代码文件和第二代码文件所使用的开发语言的影响,更加通用。将所述第一有效函数片段与所述第二有效函数片段转换至第一图片和第二图片时,使用相同的编码规则,以使所述第一图片和第二图片具有相同的图片格式,在进行图片相似度检测时降低由于图片格式带来的影响。

步骤S30,计算所述第一图片与所述第二图片的图片相似度。

相似代码检测设备计算所述第一图片与所述第二图片的图片相似度。可以理解的是,为提升图片相似度检测的准确性,使图片函数片段内容凸显和降低图片生成时的误差,需对所述第一图片与第二图片进行归一化及图片预处理,所述归一化为将第一图片与第二图片裁剪至相同的大小,如均归一化为500*500的图片,所述图片预处理包含灰度处理、反相处理、模糊处理中的至少一个或多个,所述图片预处理各方法将在后续实施例中详细说明,此处不进行赘述,对于所述第一图片与所述第二图片的图片相似度计算方式,可通过将两图片表示为两个向量,通过计算所述两个向量之间的余弦距离以表征图片相似度,此外,还可根据实际应用使用如Jaccard Distance(杰卡德距离)、EMD(Earth Mover'sDistance,搬土距离)等方式计算两图片相似度。

步骤S40,当所述图片相似度大于预设阈值时,则判定所述第一代码文件与所述第二代码文件相似。

当所述图片相似度大于预设阈值时,相似代码检测设备则判定所述第一代码文件与所述第二代码文件相似。前述步骤计算得到第一图片和第二图片的图片相似度,所述图片相似度用于表征两代码文件的相似度,所述预设阈值为一可调整阈值,使用者可根据实际使用场景进行设置,如在开发比赛中规定相似度大于80%即为相似,则将所述80%作为预设阈值。

在本实施例中,通过从两代码文件中抽取并进行代码预处理得到相应的有效函数片段,后将所述两个有效函数片段转换为图片并进行图片预处理后计算图片相似度,并将所述图片相似度作为两代码文件的相似度,实现了通用于各种开发语言代码的相似代码检测。

进一步的,在本发明第一实施例的基础上,进一步提出了本发明相似代码检测方法的第二实施例,第二实施例为第一实施例中步骤S10的细化步骤,所述相似代码检测方法包括:

步骤S11,在接收到指令时,从第一代码文件中抽取第一函数片段,从第二代码文件中抽取第二函数片段。

步骤S12,对所述第一函数片段与所述第二函数片段进行代码预处理,生成第一有效函数片段与第二有效函数片段。

相似代码检测设备在接收到指令时,从第一代码文件中抽取第一函数片段,从第二代码文件中抽取第二函数片段。关于从代码文件中抽取函数片段的具体实现方式在前述实施例中作说明,所述第一函数片段和所述第二函数片段均为从代码文件中抽取的未经处理的原始函数片段。

相似代码检测设备对所述第一函数片段与所述第二函数片段进行代码预处理,生成第一有效函数片段与第二有效函数片段。抽取后的函数片段通常包含有注释、空函数以及空格、大括号等,此外,由于受开发人员代码习惯影响,所述函数片段中格式可能存在差异,或开发人员使用变量替换等手段处理,可以理解的是,以上都将对相似代码检测结果造成影响,因此,需要对抽取后的函数片段进行代码预处理降低上述原因带来的影响,所述代码预处理包含有代码凸显、代码过滤、代码格式化、代码抽象化中至少一个或多个,即可根据实际的函数片段情况选择需要需要的处理方法,可使用其中一个单独处理或多个组合处理。

在本实施例中,通过对从代码文件中抽取的函数片段进行预处理,生成格式更加统一的有效函数片段,实现了降低与函数片段无关内容对相似代码检测的影响。

进一步的,在本发明第二实施例的基础上,进一步提出了本发明相似代码检测方法的第三实施例,所述代码预处理中代码凸显的步骤包括:

步骤a1,将所述第一函数片段与所述第二函数片段中的各代码组成部分根据预设规则表分别使用不同颜色高亮显示。

相似代码检测设备将所述第一函数片段与所述第二函数片段中的各代码组成部分根据预设规则表分别使用不同颜色高亮显示。可以理解的是,若仅将代码文本转换成图片进行图片相似度检测,图片中除文本特征外将缺乏其他其特征,过少的图片特征会使得图片相似度比对准确性降低,所述预设规则表为预先建立的包含有函数片段中各代码组成部分与对应颜色的表,如函数名、参数、返回值等分别使用高亮度的不同颜色高亮显示。

在本实施例中,通过将函数片段中各代码组成部分使用预设规则高亮显示,以在后续将函数片段转换成图片时增加图片特征,提升图片相似度检测的准确性。

进一步的,在本发明第二实施例的基础上,进一步提出了本发明相似代码检测方法的第四实施例,所述代码预处理中代码过滤的步骤包括:

步骤b1,分别定位第一函数片段和第二函数片段中的冗余片段。

步骤b2,将所述冗余片段从所述第一函数片段与所述第二函数片段中过滤删除。

相似代码检测设备分别定位第一函数片段和第二函数片段中的冗余片段。所述冗余片段指代码注释、空函数等在函数片段中无实际作用的片段,在基于文本的相似代码检测方法中,抄袭者为降低代码相似度,往往会在函数片段中加入大量注释或空函数以混淆判断,使用如正则表达式对上述冗余内容进行定位,并将所述冗余片段从所述第一函数片段与所述第二函数片段中过滤删除。

在本实施例中,通过将函数片段中无实际作用的冗余片段删除,提升了后续将函数片段转换为图片进行相似度检测的准确性。

进一步的,在本发明第二实施例的基础上,进一步提出了本发明相似代码检测方法的第五实施例,所述代码预处理中代码格式化的步骤包括:

步骤c1,读取第一函数片段和第二函数片段的代码格式;

步骤c2,将所述第一函数片段与所述第二函数片段的代码格式进行标准化处理。

在众多开发语言中,如空格等字符不影响实际代码执行,因此存在滥用情况,又由于各开发者代码习惯的差异,因此两进行相似度检测的函数片段代码格式可能存在较大差异,若不进行标准化处理可能对相似代码检测结果造成影响。相似代码检测设备读取第一函数片段和第二函数片段的代码格式,所述代码格式包含空格、缩进和大括号等,再将所述代码格式进行标准化处理,如所述函数片段因为仅用于相似度比对而无关人的观感,因此可将函数片段中的非必要空格删除,并进行单侧对齐等处理。

在本实施例中,通过将函数片段中的代码格式进行标准化处理,提升了后续将函数片段转换为图片进行相似度检测的准确性。

进一步的,在本发明第二实施例的基础上,进一步提出了本发明相似代码检测方法的第六实施例,所述代码预处理中代码抽象化的步骤包括:

步骤d1,定位第一函数片段和第二函数片段中的关键词;

步骤d2,将所述第一函数片段和第二函数片段中的关键词替换为标准关键词。

抄袭者为降低代码相似度,往往会对函数片段中的自定义变量等关键词进行全局替换,相似代码检测设备定位第一函数片段和第二函数片段中的关键词,并将所述第一函数片段和第二函数片段中的关键词替换为标准关键词,例如将函数片段中自定义变量name、age分别替换为X、Y。

在本实施例中,通过将函数片段中的自定义变量等关键词替换为标准关键词,实现了仅修改代码的相似度比对,进一步提升了后续将函数片段转换为图片进行相似度检测的准确性。

进一步的,在本发明前述实施例的基础上,进一步提出了本发明相似代码检测方法的第七实施例,所述相似代码检测的方法,包括:

相似代码检测设备分别从第一代码文件和第二代码文件抽取的第一代码文件中抽取第一函数片段和第二函数片段,将所述第一函数片段和第二函数片段使用多个代码预处理方法根据第一预设顺序进行代码预处理,生成第一有效函数片段和第二有效函数片段,具体的,如对所述第一函数片段和第二函数片段以代码过滤、代码格式化、代码抽象化、代码凸显的顺序依次进行代码预处理,则可实现通过代码过滤删除函数片段中的冗余片段,降低后续代码预处理的复杂度,提升代码预处理效率,而代码格式化则将函数片段中多余空行、空格等处理至统一格式,进一步提升后续步骤的处理效率,代码抽象化则将繁复的自定义变量等转化为简洁的字符如X、Y表示,后续进行代码凸显时进行的自定义变量等参数的检测则可实现通用,而非在每次进行代码凸显前将自定义变量等参数提前设置,所述第一预设顺序可进行调整,即对代码预处理方法进行组合、排序后执行以实现整体相似代码检测的处理速度加快和效率提升。

在本实施例中,通过将代码预处理的多种方法进行组合后按一定顺序执行,逐步简化后续步骤中的数据量,实现了代码预处理效率的提升进而提升了相似代码检测方法的效率。

进一步的,在本发明第一实施例的基础上,进一步提出了本发明相似代码检测方法的第八实施例,本实施例为第一实施例中步骤S20的细化步骤,所述相似代码检测的方法,包括:

步骤e1,将所述第一有效函数片段与所述第二有效函数片段使用预设编码规则进行编码依次生成第一图片与第二图片,所述第一图片与第二图片的图片格式相同。

相似代码检测设备将所述第一有效函数片段与所述第二有效函数片段使用预设编码规则进行编码依次生成第一图片与第二图片,所述第一图片与第二图片的图片格式相同,所述预设编码规则为将第一有效函数片段和第二有效函数片段转换至图片的编码规则,如8位编码规则,则将有效函数片段进行编码后,生成各像素点色域为0-255的图片,此外,还可选择如24位编码规则、32位编码规则,可以理解的是,越高位的编码规则对应着生成的图片包含更多的图片特征也对应着相似代码检测设备计算量的提升,可根据实际需要选择编码规则,以对检测准确性和检测速度进行调整,在本实施例中,所述编码生成的第一图片与第二图片具有相同的格式,以在后续图片相似度检测中排除由于图片编码方式不同、图片格式不同造成的差异。

在本实施例中,使用预设编码规则将第一有效函数片段和第二有效函数片段进行转换至格式相同的第一图片和第二图片,将相似代码检测转化为相似图片检测,使得相似代码检测方法更加通用,也进一步提升了后续将函数片段转换为图片进行相似度检测的准确性。

进一步的,在本发明第一实施例的基础上,进一步提出了本发明相似代码检测方法的第九实施例,本实施例为第一实施例中步骤S30的细化步骤,所述相似代码检测的方法,包括:

步骤f1,对所述第一图片与第二图片进行图片预处理,计算所述进行图片预处理后的第一图片与所述进行图片预处理后的第二图片的图片相似度。

相似代码检测设备对所述第一图片与第二图片进行图片预处理,计算所述进行图片预处理后的第一图片与所述进行图片预处理后的第二图片的图片相似度,可选地,在本步骤之前还可对第一图片和第二图片进行归一化处理,所述归一化处理为将图片裁剪至相同尺寸的处理方法,如500*500又如600*900等,以在进行图片相似度检测时实现基于像素的点对点比对。可以理解的是,为了将图片中的有效函数片段更加凸显和减小图片数据量,仍需对第一图片和第二图片进行图片预处理,所述图片预处理包含灰度处理、反相处理、模糊处理中的至少一个或多个,即根据图片实际情况,可选择上述处理方法中的一个单独处理,或者选择多个进行组合处理,关于上述处理方法的具体实现,将在后续实施例中进行说明。

在本实施例中,通过将第一图片和第二图片进行归一化、图片预处理,生成更加统一的第一图片和第二图片,将相似代码检测转化为相似图片检测,使得相似代码检测方法更加通用,也进一步提升了基于图片的相似代码检测准确性。

进一步的,在本发明第九实施例的基础上,进一步提出了本发明相似代码检测方法的第十实施例,所述图片预处理中灰度处理的步骤,包括:

步骤g1,将所述第一图片与所述第二图片中的各像素点色值进行均值处理。

步骤g2,将所述均值处理后的色值作为对应像素点处理后的色值。

相似代码检测设备将所述第一图片与所述第二图片中的各像素点色值进行均值处理,并将所述均值处理后的色值作为对应像素点处理后的色值,本实施例以第一图片和第二图片均为256色位图为例进行处理,在256色位图中,各像素点色值使用(R(Red,红),G(Green,緑),B(Blue,蓝))所述R,G,B的取值范围处于0-255区间,对第一图片和第二图片进行灰度处理即将各像素点的R,G,B值取平均值后再赋于R,G,B,即处理后的第一图片和第二图片的各像素点的色值为(r,g,b),其中r=g=b=(R+G+B)/3。

在本实施例中,将第一图片与第二图片进行灰度处理,在保留图片细节的同时减少图片信息量,进一步提升了基于图片的相似代码检测准确性。

进一步的,在本发明第九实施例的基础上,进一步提出了本发明相似代码检测方法的第十一实施例,所述图片预处理中反相处理的步骤,包括:

步骤h1,读取所述第一图片与所述第二图片中各像素点色值。

步骤h2,基于当前色域对所述各像素点色值进行差值处理,将所述差值处理后的色值作为对应像素点处理后的色值。

相似代码检测设备读取所述第一图片与所述第二图片中各像素点色值,并基于当前色域对所述各像素点色值进行差值处理,将所述差值处理后的色值作为对应像素点处理后的色值。在前述实施例中已对所述当前色域进行说明,即当前色域取决于将有效函数片段转换至图片时的选择的预设编码方式,本实施例以8位编码方式为例进行说明,在该编码方式下,当前色域为0-255,若像素点a的色值为(125,210,183),则进行差值处理后,a的色值为(130,45,72),第一图片与第二图片中像素点均使用此处理方法进行处理。

在本实施例中,通过将第一图片与第二图片进行反相处理,使得函数片段更加凸显,进一步提升了基于图片的相似代码检测准确性。

进一步的,在本发明第九实施例的基础上,进一步提出了本发明相似代码检测方法的第十二实施例,所述图片预处理中模糊处理的步骤,包括:

步骤i1,以所述第一图片与所述第二图片中的各像素点作为中心像素点;

步骤i2,将所述中心像素点预设半径内的像素点的色值进行均值处理,将所述均值处理后的色值作为中心像素点处理后的色值。

相似代码检测设备以所述第一图片与所述第二图片中的各像素点作为中心像素点,将所述中心像素点的预设半径内的像素点的色值进行均值处理,将所述均值处理后的色值作为中心像素点处理后的色值。为降低图像生成过程中的一些误差,提高计算准确性,对第一图片与第二图片进行模糊处理,所述预设半径为模糊半径,如所述预设半径为1时,则将中心像素点各向1距离为1的像素点色值进行均值处理,并将所述均值处理后的色值作为中心像素点处理后的色值,可以理解的是,所述预设半径越大,模糊度越高,具体实现时可对所述预设半径进行调整。

在本实施例中,通过对第一图片和第二图片进行模糊化处理,降低图像生成过程中的误差,进一步提升了基于图片的相似代码检测准确性。

进一步的,在本发明前述实施例的基础上,进一步提出了本发明相似代码检测方法的第十三实施例,所述相似代码检测的方法,包括:

相似代码检测设备对第一图片和第二图片使用多个图片预处理方法根据第二预设顺序进行图片预处理,具体的,如对所述第一图片和第二图片以灰度处理、反相处理、模糊处理的第二预设顺序进行图片预处理,则可实现灰度处理将图片各像素点的色值处理为原色值的均值,保留图片细节同时减少图片数据量,而进行反相处理时,得益于各像素点色值均为原色值的均值,因此计算量大幅下降,在8位编码方式下,若第一图片与第二图片背景为白色即色值为0,反相处理后背景则为黑色即色值为255,0值减少为后续模糊处理的计算提供了方便,可见,依据一定顺序对多个图片预处理方法进行组合实施,有效地降低了图片预处理复杂度提升了处理效率。

在本实施例中,通过将图片预处理的多种方法进行组合后按一定顺序执行,保留图片细节同时减少图片数据量降低复杂度,实现了图片预处理效率的提升进而提升了相似代码检测方法的效率。

进一步的,在本发明第一实施例的基础上,进一步提出了本发明相似代码检测方法的第十四实施例,第十四实施例为第一实施例中步骤S30的细化步骤,所述相似代码检测的方法,包括:

步骤j1,将所述第一图片与所述第二图片分别进行向量化处理,生成第一向量与第二向量;

步骤j2,计算所述第一向量与所述第二向量的余弦距离,将所述余弦距离作为所述第一图片与所述第二图片的相似度。

相似代码检测设备将所述第一图片与所述第二图片分别进行向量化处理,生成第一向量与第二向量,计算所述第一向量与所述第二向量的余弦距离,将所述余弦距离作为第一图片与第二图片的相似度。所述向量化处理可为基于每个像素点的处理,也可为基于图片全局像素点的处理,当基于每个像素点处理时,将第一图片和第二的图片对应像素点的色值转化成为向量,并计算相似度,后将所述各像素点的相似度均值处理后作为图片相似度,所述基于图片全局像素点的处理则一般在对图片进行灰度处理后进行,将第一图片与第二图片转化像素阵,像素阵中各值为灰度处理后各像素点RGB值中的任意一个,后计算第一图片与第二图片对应像素阵的余弦距离,将所述余弦距离作为第一图片与所述第二图片的相似度。

此外,可将所述第一图片与所述第二图片划分为预设数量个图片单元,所述预设数量可自行设置,如将800*800的第一图片与第二图片分别划分为64个100*100的图片单元,第一图片的图片单元与第二图片的图片单元一一对应,若第一图片与第二图片中对应的图片单元的各像素值均为色域极值,即均为黑色或白色,则从第一图片和第二图片中剔除对应的图片单元,使用所述第一图片与所述第二图片保留的图片单元进行向量化处理,生成第一向量与第二向量。

在本实施例中,通过将第一图片与第二图片分别转化为向量并计算两向量余弦距离,实现了图片的相似度检测,此外,将第一图片和第二图片划分成图片单元并剔除各像素值均为色域极值的图片单元,实现了剔除图片背景以简化计算难度提升计算效率的目的。

进一步的,在本发明前述实施例的基础上,进一步提出了本发明相似代码检测方法的第十五实施例,第十五实施例为第一实施例中步骤S40的后置步骤,所述相似代码检测的方法,包括:

步骤k1,生成相似代码检测报告,所述报告包含代码预处理步骤、图片预处理步骤、所述图片相似度和所述预设阈值。

相似代码检测设备生成相似代码检测报告,所述报告包含代码预处理步骤、图片预处理步骤、所述图片相似度和所述预设阈值。有前述实施例可知,代码预处理和图片预处理分别包含有多个子方法,根据实际需要选择子方法进行处理,由于选取的子方法将对代码相似度检测结果存在一定影响,因此在出具相似代码检测报告时将选取的代码预处理步骤、图片预处理步骤加入,在检测人员进行检测结果分析时有据可依。

在本实施例中,通过在代码相似度检测完成后生成包含多项内容的相似代码检测报告,使得测人员进行检测结果分析时有据可依。

此外,本发明实施例还提出一种相似代码检测装置,所述相似代码检测装置包括:

抽取模块:用于在接收到检测指令时,从第一代码文件中抽取第一有效函数片段,从第二代码文件中抽取第二有效函数片段;

转换模块:用于将所述第一有效函数片段与所述第二有效函数片段进行图片转换生成第一图片与第二图片;

计算模块:用于计算所述第一图片与所述第二图片的图片相似度;

判定模块:用于当所述图片相似度大于预设阈值时,则判定所述第一代码文件与所述第二代码文件相似。

在一实施例中,所述抽取模块包含:

抽取子模块,用于在接收到指令时,从第一代码文件中抽取第一函数片段,从第二代码文件中抽取第二函数片段;

代码预理子模块,用于对所述第一函数片段与所述第二函数片段进行代码预处理,生成第一有效函数片段与第二有效函数片段。

在一实施例中,所述代码预处理子模块包括代码凸显单元、代码过滤单元、代码格式化单元、代码抽象化单元。

在一实施例中,所述代码凸显单元,用于将所述第一函数片段与所述第二函数片段中的各代码组成部分根据预设规则表分别使用不同颜色高亮显示。

在一实施例中,所述代码过滤单元包含:

第一定位子单元:用于分别定位第一函数片段和第二函数片段中的冗余片段;

过滤子单元:用于将所述冗余片段从所述第一函数片段与所述第二函数片段中过滤删除。

在一实施例中,所述代码格式化单元包含:

第一读取子单元:用于读取第一函数片段和第二函数片段的代码格式;

标准化子单元:用于将所述第一函数片段与所述第二函数片段的代码格式进行标准化处理。

在一实施例中,所述代码抽象化单元包含:

第二定位子单元:用于定位第一函数片段和第二函数片段中的关键词;

替换子单元:用于将所述第一函数片段和第二函数片段中的关键词替换为标准关键词。

在一实施例中,所述转换模块包含:

编码子模块:用于将所述第一有效函数片段与所述第二有效函数片段使用预设编码规则进行编码依次生成第一图片与第二图片,所述第一图片与第二图片的图片格式相同。

在一实施例中,所述相似代码检测装置包含:

归一化模块:用于将所述第一图片与第二图片进行归一化处理。

在一实施例中,所述计算模块包含:

图片预处理子模块,用于对所述第一图片与第二图片进行图片预处理,计算所述进行图片预处理后的第一图片与所述进行图片预处理后的第二图片的图片相似度。

在一实施例中,所述图片预处理子模块包含灰度处理单元、反相处理单元、模糊处理单元至少一个或多。

在一实施例中,所述灰度处理单元包含:

均值处理子单元:将所述第一图片与所述第二图片中的各像素点色值进行均值处理;

替换子单元:将所述均值处理后的色值作为对应像素点处理后的色值。

在一实施例中,所述反相处理单元包含:

第二读取子单元,用于读取所述第一图片与所述第二图片中各像素点色值;

差值子单元,用于基于当前色域对所述各像素点色值进行差值处理,将所述差值处理后的色值作为对应像素点处理后的色值。

在一实施例中,所述模糊处理单元包含:

选取子单元,用于以所述第一图片与所述第二图片中的各像素点作为中心像素点;

均值处理子单元,用于将所述中心像素点预设半径内的像素点的色值进行均值处理,将所述均值处理后的色值作为中心像素点处理后的色值。

在一实施例中,所述计算模块包含:

向量化子模块,用于将所述第一图片与所述第二图片分别进行向量化处理,生成第一向量与第二向量;

计算子模块,用于计算所述第一向量与所述第二向量的余弦距离,将所述余弦距离作为所述第一图片与所述第二图片的相似度。

在一实施例中,所述向量化子模块包含:

划分单元,用于将所述第一图片与所述第二图片分别划分为预设数量个图片单元;

剔除单元,用于将各像素色值均为色域极值的所述图片单元,从所述第一图片与所述第二图片剔除;

向量化单元,用于对剔除后的所述第一图片与所述第二图片,进行向量化处理,依次生成第一向量与第二向量。

在一实施例中,相似代码检测装置包含:

报告生成模块,用于生成相似代码检测报告,所述报告包含代码预处理步骤、图片预处理步骤、所述图片相似度和所述预设阈值。

其中,相似代码检测装置的各个功能模块实现的步骤可参照本发明相似代码检测方法的各个实施例,此处不再赘述。

此外,本发明实施例还提出一种相似代码检测设备,其特征在于,所述相似代码检测设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中:

所述计算机程序被所述处理器执行时实现上述实施例提供的相似代码检测方法中的操作。

此外,本发明实施例还提出一种计算机存储介质。

所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例提供的相似代码检测方法中的操作。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体/操作/对象与另一个实体/操作/对象区分开来,而不一定要求或者暗示这些实体/操作/对象之间存在任何这种实际的关系或者顺序;术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的。可以根据实际的需要选择中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所做的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

18页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:数据处理方法及装置以及相关产品

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!