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

文档序号:33812872发布日期:2023-04-19 14:22阅读:81来源:国知局
基于可视化图像的代码克隆检测方法、系统、设备及介质与流程

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


背景技术:

1、近年来的代码克隆检测方法主要有两种:基于代码形状的检测和基于代码语法、语义图的检测。其中基于代码形状的检测是将整段代码转换为灰度图,以便于区分代码部分和非代码部分(非代码部分的灰度值为0,在灰度图上显示为黑色),通过比较代码部分在灰度图上显示的形状的来判断代码克隆。而基于代码语法、语义图的检测则是将代码转换为包含代码语法信息的图,如抽象语法树ast(abstract syntax tree),或包含代码语义信息的图,如控制流图cfg(control flow graph)、程序依赖图pdg(program dependencegraph),获取代码的语法、语义信息,再通过比较这些图的相似度来判断代码克隆。

2、基于代码形状图检测的缺点:通过比较代码形状的相似度,仅依靠代码的表面来做判断,没有深入到代码的细节部分,则无法检测到代码中的一个词语、一个字符或是一个符号发生的变化,这会导致这种方法无法区分type-1类型代码克隆与type-2类型代码克隆,同时,该方法也较难实现对type-3类型代码克隆的检测,在type-3类型的代码克隆中,增加或减少的代码行使代码的形状发生了改变,干扰了该方法对代码形状相似度的判断,从而导致检测错漏。

3、基于代码语法、语义图检测的缺点:这种方法虽能够深入到代码的语法、语义级别来检测代码相似度,但是需要使用子图同构来精确地匹配图,从而导致了np困难问题,使计算量以指数方式增长,花费较多的时间。同时,其过程涉及到图的中间形式转换,容易导致代码信息的丢失,出现漏检、错检的情况。


技术实现思路

1、本发明的主要目的在于克服现有技术的缺点与不足,提供一种基于可视化图像的代码克隆检测方法、系统、设备及介质,通过在代码的ascii编码层面上对代码进行检测,精确到代码的每一个字符,深入到代码的各处细节,从而更准确地判断代码克隆。

2、为了达到上述目的,本发明采用以下技术方案:

3、本发明一方面提供了一种基于可视化图像的代码克隆检测方法,包括下述步骤:

4、获取java代码数据,格式为.java文件;去除所述.java文件中代码的注释,再调用javaparser中的voidvisitoradapter,将每个.java文件中的代码函数分离出来,分离后的每一个代码函数各自存放在单独的.java文件中,得到代码函数文件;

5、将所述代码函数文件中的代码字符转为ascii码,再将ascii码的值填充为rgb三原色色值,获得rgb像素点,像素点组合成可视化彩色图像,得到代码可视化图像;

6、将所述代码可视化图像划分为克隆代码可视化图像和非克隆代码可视化图像,并通过smote算法合成新的克隆代码可视化图像;

7、将所述克隆代码可视化图像和非克隆代码可视化图像输入至预先设立的克隆检测模型中进行训练,得到训练好的克隆检测模型;

8、所述克隆检测模型包括两个transformer子网络,两个transformer子网络共享权值;所述transformer子网络包括transformer编码模块和稀疏注意力模块;所述transformer编码模块用于代码可视化图像的特征提取,所述稀疏注意力模块用于寻找代码可视化图像中的区分性像素块并将对应的隐含特征作为下一编码模块的输入;所述训练的过程为:将克隆代码可视化图像对或非克隆代码可视化图像对输入至两个transformer子网络中,transformer子网络将克隆代码可视化图像对或非克隆代码可视化图像对映射至高维特征空间,输出对应的表征,根据所述表征利用contrastive loss损失函数计算得到表征距离;

9、将待检测的代码可视化图像输入至训练好的克隆检测模型进行相似度检测,得到检测结果。

10、作为优选的技术方案,所述去除所述.java文件中代码的注释,包括单行注释、多行注释以及文档注释。

11、作为优选的技术方案,所述将所述代码函数文件中的代码字符转为ascii码,再将ascii码的值填充为rgb三原色色值,获得rgb像素点,像素点组合成可视化彩色图像,得到代码可视化图像;具体为:

12、所述三原色为红色r、绿色g和蓝色b;

13、生成的.java文件大小在0到30kb之间,依照3个字符转换为1个像素的转换规则,因此,转换后得到的像素点计数在0到10240之间;

14、同时,将红色r、绿色g、蓝色b,用多种不同的方式进行排序,每次采用不同的顺序将ascii码填充为三原色的颜色色值,得到多张不同的可视化彩色图像;

15、此外,由于源代码中的方法函数各不相同,所以每一个存放代码函数的.java文件所转换成的代码可视化图像大小也不一致,因此,将大于预设尺寸的代码可视化图像裁剪至预设尺寸;将小于预设尺寸的代码可视化图像使用0填充至预设尺寸,在一定程度上保证代码可视化图像靠近填充后图像的中心位置。

16、作为优选的技术方案,所述通过smote算法合成新的克隆代码可视化图像是指:如果克隆代码可视化图像的数量远小于非克隆代码可视化图像的数量,则采用smote算法,对克隆代码可视化图像中的每个样本x,从样本x近邻中随机选一个克隆代码可视化图像y,然后将x,y合成为新的克隆代码可视化图像,从而降低过拟合的风险;然后将克隆代码可视化图像标签为1,非克隆代码可视化图像标签为0。

17、作为优选的技术方案,所述transformer编码模块,具体的:在transformer子网络中包括若干个结构相同的transformer编码模块;其中,transformer编码模块包括多头自注意模块和多层感知机模块;

18、所述多头自注意模块包括若干个自注意力模块,不同的自注意力模块在相互独立的特征子空间中学习相关特征,最终由多头自注意模块输出的结果进行拼接,再经过线性变换得到多头自注意模块的输出;该输出与输入矩阵进行残差连接即矩阵相加,最后经过层标准化作为下一个多层感知机模块的输入;

19、所述多层感知机模块包括两个全连接层,第一层的激活函数为relu,第二层不使用激活函数,通过多层感知机模块加深对复杂过程的拟合程度,增强克隆检测模型的能力。

20、作为优选的技术方案,所述稀疏注意力模块,具体的:若transformer子网络包含l个transformer编码模块,稀疏注意力模块利用前l-1个transformer编码模块学习到的权重对最后的transformer编码模块输入的隐含特征进行筛选;由于高层次特征的抽象性,注意力图难以表示对应输入可视化图像块的特征信息;因此,使用先前所有transformer编码模块学习到的注意力图信息,结合压缩激励模块,自主学习每个注意力图的权重,即稀疏注意力模块首先将先前得到的注意力图信息通过平均池化融合为二维矩阵,然后使用两个全连接层来建模注意力图信息之间的相关性,获得每个注意力图的权重值;最后,将权重值归一化后与注意力图加权求和,以获得最终的注意力权重。

21、作为优选的技术方案,所述transformer子网络将克隆代码可视化图像对或非克隆代码可视化图像对映射至高维特征空间,输出对应的表征,根据所述表征利用contrastive loss损失函数计算得到表征距离;具体为:

22、首先,将克隆代码可视化图像对或非克隆代码可视化图像对的图像分割成大小相同的n个图像块,接着将图像块线性映射成串行化的嵌入向量,再添加可学习的分类向量和位置编码信息;其次,将嵌入向量组合成矩阵,并输入到多个transformer编码模块中进行特征提取;在最后一个transformer编码模块之前,将相应的隐藏特征输入到稀疏注意力模块中,以找到克隆代码可视化图像对或非克隆代码可视化图像对的辨识性像素块;最后,transformer编码模块输出的分类特征经过全连接层处理得到克隆代码可视化图像对或非克隆代码可视化图像对的类别信息;

23、其次,借助contrastive loss损失函数,基于克隆代码可视化图像表征距离小,非克隆代码可视化图像表征距离大进行计算,计算过程为:

24、首先,选择一对样本(xa,xb),该样本的欧式距离为:

25、

26、其中,xa表示的是可视化图像样本a的表征,xb表示的是可视化图像样本b的表征;

27、则contrastive loss损失函数表示为:

28、

29、其中,y表示标签,y=0代表非克隆对或者y=1代表克隆对,d表示欧式距离,m表示样本的距离阈值;当(xa,xb)的距离小于m时,contrasive loss将变成0,使得xa与xb相似而非相同,一定程度上保证算法的泛化能力;

30、最后,训练好的克隆检测模型输出的是基于生成特征的样本表征距离,如果表征距离的值低于0.5,则输入的两个可视化图像的源代码是一对克隆代码。

31、本发明又一方面提供了一种基于可视化图像的代码克隆检测系统,应用于所述的基于可视化图像的代码克隆检测方法,包括数据集制作模块、代码可视化模块、数据预处理模块、克隆检测模型构建模块以及克隆检测模块;

32、所述数据集制作模块,用于获取java代码数据,格式为.java文件;去除所述.java文件中代码的注释,再调用javaparser中的voidvisitoradapter,将每个.java文件中的代码函数分离出来,分离后的每一个代码函数各自存放在单独的.java文件中,得到代码函数文件;

33、所述代码可视化模块,用于将所述代码函数文件中的代码字符转为ascii码,再将ascii码的值填充为rgb三原色色值,获得rgb像素点,像素点组合成可视化彩色图像,得到代码可视化图像;

34、所述数据预处理模块,用于将所述可视化代码图像划分为克隆代码可视化图像和非克隆代码可视化图像,并通过smote算法合成新的克隆代码可视化图像;

35、所述克隆检测模型构建模块,用于将所述克隆代码可视化图像和非克隆代码可视化图像输入至预先设立的克隆检测模型中进行训练,得到训练好的克隆检测模型;

36、所述克隆检测模型包括两个transformer子网络,两个transformer子网络共享权值;所述transformer子网络包括transformer编码模块和稀疏注意力模块;所述transformer编码模块用于代码可视化图像的特征提取,所述稀疏注意力模块用于寻找代码可视化图像中的区分性像素块并将对应的隐含特征作为下一编码模块的输入;所述训练的过程为:将克隆代码可视化图像对或非克隆代码可视化图像对输入至两个transformer子网络中,transformer子网络将克隆代码可视化图像对或非克隆代码可视化图像对映射至高维特征空间,输出对应的表征,根据所述表征利用contrastive loss损失函数计算得到表征距离;

37、所述克隆检测模块,用于将待检测的代码可视化图像输入至训练好的克隆检测模型进行相似度检测,得到检测结果。

38、本发明又一方面提供了一种电子设备,其特征在于,所述电子设备包括:

39、至少一个处理器;以及,

40、与所述至少一个处理器通信连接的存储器;其中,

41、所述存储器存储有可被所述至少一个处理器执行的计算机程序指令,所述计算机程序指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行所述的基于可视化图像的代码克隆检测方法。

42、本发明再一方面提供了一种计算机可读存储介质,存储有程序,所述程序被处理器执行时,实现所述的基于可视化图像的代码克隆检测方法。

43、本发明与现有技术相比,具有如下优点和有益效果:

44、1.本发明能够基于代码的ascii编码层面进行克隆检测,精确到代码的每一个字符,深入到代码的各处细节,避免了因简单判断代码的表面而导致的代码克隆类型混淆,或因简单地以代码的形状作为检测依据而导致的检测错漏,从而更准确地判断代码克隆。

45、2.使用代码的ascii编码填充为像素点的三原色色值,形成的可视化图像能够较为完整地保留源代码信息,不会造成代码信息的丢失。

46、3.将代码转化为图像,再通过比较图像的相似度来判断代码的相似度,过程简洁,通俗易懂。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1