基于可视化图像的代码克隆检测方法、系统、设备及介质技术方案

技术编号:37261573 阅读:6 留言:0更新日期:2023-04-20 23:35
本发明专利技术公开了一种基于可视化图像的代码克隆检测方法、系统、设备及介质,包括:去除Java代码中的注释,并调用javaparser中的VoidVisitorAdapter,将.java文件中的代码函数分离出来;将代码函数文件中的代码字符转为ASCII码,再将ASCII码的值填充为RGB三原色色值,获得RGB像素点,像素点组合成可视化彩色图像,得到代码的可视化图像;将代码可视化图像划分为克隆代码可视化图像和非克隆代码可视化图像;将代码可视化图像输入至预先设立的克隆检测模型进行训练,得到训练好的克隆检测模型;将待检测的代码可视化图像输入至训练好的克隆检测模型进行检测,得到检测结果。本发明专利技术将代码转换为可视化图像能够较为完整地保留代码信息,避免因图的中间形式转换而导致代码信息丢失。信息丢失。信息丢失。

【技术实现步骤摘要】
基于可视化图像的代码克隆检测方法、系统、设备及介质


[0001]本专利技术属于代码克隆和深度学习
,具体涉及一种基于可视化图像的代码克隆检测方法、系统、设备及介质。

技术介绍

[0002]近年来的代码克隆检测方法主要有两种:基于代码形状的检测和基于代码语法、语义图的检测。其中基于代码形状的检测是将整段代码转换为灰度图,以便于区分代码部分和非代码部分(非代码部分的灰度值为0,在灰度图上显示为黑色),通过比较代码部分在灰度图上显示的形状的来判断代码克隆。而基于代码语法、语义图的检测则是将代码转换为包含代码语法信息的图,如抽象语法树AST(Abstract Syntax Tree),或包含代码语义信息的图,如控制流图CFG(Control Flow Graph)、程序依赖图PDG(Program Dependence Graph),获取代码的语法、语义信息,再通过比较这些图的相似度来判断代码克隆。
[0003]基于代码形状图检测的缺点:通过比较代码形状的相似度,仅依靠代码的表面来做判断,没有深入到代码的细节部分,则无法检测到代码中的一个词语、一个字符或是一个符号发生的变化,这会导致这种方法无法区分Type

1类型代码克隆与Type

2类型代码克隆,同时,该方法也较难实现对Type

3类型代码克隆的检测,在Type

3类型的代码克隆中,增加或减少的代码行使代码的形状发生了改变,干扰了该方法对代码形状相似度的判断,从而导致检测错漏。<br/>[0004]基于代码语法、语义图检测的缺点:这种方法虽能够深入到代码的语法、语义级别来检测代码相似度,但是需要使用子图同构来精确地匹配图,从而导致了NP困难问题,使计算量以指数方式增长,花费较多的时间。同时,其过程涉及到图的中间形式转换,容易导致代码信息的丢失,出现漏检、错检的情况。

技术实现思路

[0005]本专利技术的主要目的在于克服现有技术的缺点与不足,提供一种基于可视化图像的代码克隆检测方法、系统、设备及介质,通过在代码的ASCII编码层面上对代码进行检测,精确到代码的每一个字符,深入到代码的各处细节,从而更准确地判断代码克隆。
[0006]为了达到上述目的,本专利技术采用以下技术方案:
[0007]本专利技术一方面提供了一种基于可视化图像的代码克隆检测方法,包括下述步骤:
[0008]获取Java代码数据,格式为.java文件;去除所述.java文件中代码的注释,再调用javaparser中的VoidVisitorAdapter,将每个.java文件中的代码函数分离出来,分离后的每一个代码函数各自存放在单独的.java文件中,得到代码函数文件;
[0009]将所述代码函数文件中的代码字符转为ASCII码,再将ASCII码的值填充为RGB三原色色值,获得RGB像素点,像素点组合成可视化彩色图像,得到代码可视化图像;
[0010]将所述代码可视化图像划分为克隆代码可视化图像和非克隆代码可视化图像,并通过SMOTE算法合成新的克隆代码可视化图像;
[0011]将所述克隆代码可视化图像和非克隆代码可视化图像输入至预先设立的克隆检测模型中进行训练,得到训练好的克隆检测模型;
[0012]所述克隆检测模型包括两个Transformer子网络,两个Transformer子网络共享权值;所述Transformer子网络包括Transformer编码模块和稀疏注意力模块;所述Transformer编码模块用于代码可视化图像的特征提取,所述稀疏注意力模块用于寻找代码可视化图像中的区分性像素块并将对应的隐含特征作为下一编码模块的输入;所述训练的过程为:将克隆代码可视化图像对或非克隆代码可视化图像对输入至两个Transformer子网络中,Transformer子网络将克隆代码可视化图像对或非克隆代码可视化图像对映射至高维特征空间,输出对应的表征,根据所述表征利用Contrastive Loss损失函数计算得到表征距离;
[0013]将待检测的代码可视化图像输入至训练好的克隆检测模型进行相似度检测,得到检测结果。
[0014]作为优选的技术方案,所述去除所述.java文件中代码的注释,包括单行注释、多行注释以及文档注释。
[0015]作为优选的技术方案,所述将所述代码函数文件中的代码字符转为ASCII码,再将ASCII码的值填充为RGB三原色色值,获得RGB像素点,像素点组合成可视化彩色图像,得到代码可视化图像;具体为:
[0016]所述三原色为红色R、绿色G和蓝色B;
[0017]生成的.java文件大小在0到30kB之间,依照3个字符转换为1个像素的转换规则,因此,转换后得到的像素点计数在0到10240之间;
[0018]同时,将红色R、绿色G、蓝色B,用多种不同的方式进行排序,每次采用不同的顺序将ASCII码填充为三原色的颜色色值,得到多张不同的可视化彩色图像;
[0019]此外,由于源代码中的方法函数各不相同,所以每一个存放代码函数的.java文件所转换成的代码可视化图像大小也不一致,因此,将大于预设尺寸的代码可视化图像裁剪至预设尺寸;将小于预设尺寸的代码可视化图像使用0填充至预设尺寸,在一定程度上保证代码可视化图像靠近填充后图像的中心位置。
[0020]作为优选的技术方案,所述通过SMOTE算法合成新的克隆代码可视化图像是指:如果克隆代码可视化图像的数量远小于非克隆代码可视化图像的数量,则采用SMOTE算法,对克隆代码可视化图像中的每个样本x,从样本x近邻中随机选一个克隆代码可视化图像y,然后将x,y合成为新的克隆代码可视化图像,从而降低过拟合的风险;然后将克隆代码可视化图像标签为1,非克隆代码可视化图像标签为0。
[0021]作为优选的技术方案,所述Transformer编码模块,具体的:在Transformer子网络中包括若干个结构相同的Transformer编码模块;其中,Transformer编码模块包括多头自注意模块和多层感知机模块;
[0022]所述多头自注意模块包括若干个自注意力模块,不同的自注意力模块在相互独立的特征子空间中学习相关特征,最终由多头自注意模块输出的结果进行拼接,再经过线性变换得到多头自注意模块的输出;该输出与输入矩阵进行残差连接即矩阵相加,最后经过层标准化作为下一个多层感知机模块的输入;
[0023]所述多层感知机模块包括两个全连接层,第一层的激活函数为ReLU,第二层不使
用激活函数,通过多层感知机模块加深对复杂过程的拟合程度,增强克隆检测模型的能力。
[0024]作为优选的技术方案,所述稀疏注意力模块,具体的:若Transformer子网络包含L个Transformer编码模块,稀疏注意力模块利用前L

1个Transformer编码模块学习到的权重对最后的Transformer编码模块输入的隐含特征进行筛选;由于高层次特本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于可视化图像的代码克隆检测方法,其特征在于,包括下述步骤:获取Java代码数据,格式为.java文件;去除所述.java文件中代码的注释,再调用javaparser中的VoidVisitorAdapter,将每个.java文件中的代码函数分离出来,分离后的每一个代码函数各自存放在单独的.java文件中,得到代码函数文件;将所述代码函数文件中的代码字符转为ASCII码,再将ASCII码的值填充为RGB三原色色值,获得RGB像素点,像素点组合成可视化彩色图像,得到代码可视化图像;将所述代码可视化图像划分为克隆代码可视化图像和非克隆代码可视化图像,并通过SMOTE算法合成新的克隆代码可视化图像;将所述克隆代码可视化图像和非克隆代码可视化图像输入至预先设立的克隆检测模型中进行训练,得到训练好的克隆检测模型;所述克隆检测模型包括两个Transformer子网络,两个Transformer子网络共享权值;所述Transformer子网络包括Transformer编码模块和稀疏注意力模块;所述Transformer编码模块用于代码可视化图像的特征提取,所述稀疏注意力模块用于寻找代码可视化图像中的区分性像素块并将对应的隐含特征作为下一编码模块的输入;所述训练的过程为:将克隆代码可视化图像对或非克隆代码可视化图像对输入至两个Transformer子网络中,Transformer子网络将克隆代码可视化图像对或非克隆代码可视化图像对映射至高维特征空间,输出对应的表征,根据所述表征利用Contrastive Loss损失函数计算得到表征距离;将待检测的代码可视化图像输入至训练好的克隆检测模型进行相似度检测,得到检测结果。2.根据权利要求1所述基于可视化图像的代码克隆检测方法,其特征在于,所述去除所述.java文件中代码的注释,包括单行注释、多行注释以及文档注释。3.根据权利要求1所述基于可视化图像的代码克隆检测方法,其特征在于,所述将所述代码函数文件中的代码字符转为ASCII码,再将ASCII码的值填充为RGB三原色色值,获得RGB像素点,像素点组合成可视化彩色图像,得到代码可视化图像;具体为:所述三原色为红色R、绿色G和蓝色B;生成的.java文件大小在0到30kB之间,依照3个字符转换为1个像素的转换规则,因此,转换后得到的像素点计数在0到10240之间;同时,将红色R、绿色G、蓝色B,用多种不同的方式进行排序,每次采用不同的顺序将ASCII码填充为三原色的颜色色值,得到多张不同的可视化彩色图像;此外,由于源代码中的方法函数各不相同,所以每一个存放代码函数的.java文件所转换成的代码可视化图像大小也不一致,因此,将大于预设尺寸的代码可视化图像裁剪至预设尺寸;将小于预设尺寸的代码可视化图像使用0填充至预设尺寸,在一定程度上保证代码可视化图像靠近填充后图像的中心位置。4.根据权利要求1所述基于可视化图像的代码克隆检测方法,其特征在于,所述通过SMOTE算法合成新的克隆代码可视化图像是指:如果克隆代码可视化图像的数量远小于非克隆代码可视化图像的数量,则采用SMOTE算法,对克隆代码可视化图像中的每个样本x,从样本x近邻中随机选一个克隆代码可视化图像y,然后将x,y合成为新的克隆代码可视化图像,从而降低过拟合的风险;然后将克隆代码可视化图像标签为1,非克隆代码可视化图像标签为0。
5.根据权利要求1所述基于可视化图像的代码克隆检测方法,其特征在于,所述Transformer编码模块,具体的:在Transformer子网络中包括若干个结构相同的Transformer编码模块;其中,Transformer编码模块包括多头自注意模块和多层感知机模块;所述多头自注意模块包括若干个自注意力模块,不同的自注意力模块在相互独立的特征子空间中学习相关特征,最终由多头自注意模块输出的结果进行拼接,再经过线性变换得到多头自注意模块的输出;该输出与输入矩阵进行残差连接即矩阵相加,最后经过层标准化作为下一个多层感知机模块的输入;所述多层感知机模块包括两个全连接层,第一层的激活函数为ReLU,第二层不使用激活函数,通过多层感知机模块加深对复杂过程的拟合程度,增强克隆检测模型的能力。6.根据权利要求1所述基于可视化图像的代码克隆检测方法,其特征在于,所述稀疏注意力模块,具体的:若Transformer子网络包含L个Transformer编码模块,稀疏注意力模块利用前L

1个Transformer编码模块学习到的权重对最后的Transformer编码模块输入的隐含特征进行筛选;由于高层次特征的抽象性,注意力图难以表示对应输入可视化图像块的特征信息;因此,使用先前所有Transformer编码模块学习到的注意力图信息,结合压缩激励模块,自主学习每个注意力图的权重,即稀疏注意力模块首先将先前得到的注意力图信息通过平均池化融合为二维矩阵,然...

【专利技术属性】
技术研发人员:邱少健彭梦晴胡叶红王劭晟黄梦阳黄晖豪李琦伟
申请(专利权)人:诺维艾创广州科技有限公司
类型:发明
国别省市:

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

1