CN114880023B - 面向技术特征的源代码对比方法、***与程序产品 - Google Patents

面向技术特征的源代码对比方法、***与程序产品 Download PDF

Info

Publication number
CN114880023B
CN114880023B CN202210808406.7A CN202210808406A CN114880023B CN 114880023 B CN114880023 B CN 114880023B CN 202210808406 A CN202210808406 A CN 202210808406A CN 114880023 B CN114880023 B CN 114880023B
Authority
CN
China
Prior art keywords
function
vector
built
code
class
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210808406.7A
Other languages
English (en)
Other versions
CN114880023A (zh
Inventor
龚斌
宁祥东
孙宇清
万林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong University
Original Assignee
Shandong University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shandong University filed Critical Shandong University
Priority to CN202210808406.7A priority Critical patent/CN114880023B/zh
Publication of CN114880023A publication Critical patent/CN114880023A/zh
Application granted granted Critical
Publication of CN114880023B publication Critical patent/CN114880023B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种面向技术特征的源代码对比方法、***与程序产品,属于自然语言处理的技术领域。本发明包括:使用了基于函数调用结构的语义编码方法,从函数调用结构、函数名称和内置类等方面分析代码相似性;采用基于图卷积神经网络的自编码器方法进行图语义编码,基于语义向量对比代码结构语义;基于函数和内置类名称的调用信息向量进行函数相似性和内置类的相似性对比;最后将结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量,比对代码相似度。本发明综合考虑了函数名、调用结构和内置类等技术特征信息,能够更好地依据技术特征进行代码对比。

Description

面向技术特征的源代码对比方法、***与程序产品
技术领域
本发明公开一种面向技术特征的源代码对比方法、***与程序产品,属于自然语言处理的技术领域。
背景技术
开源平台为科研人员提供了分享和交流代码的环境,越来越多的深度学***台分享,营造了可复用代码的生态环境,因此,针对特定问题,研究人员有必要查找相关解决方案。现代算法设计思想是模块化构建代码,通常包含大量的基础性功能函数,其函数名、调用结构和内置类等信息提供了重要的代码技术特征。针对相同问题的多种解决方案,例如在文本分类中,可以使用不同的神经网络结构:卷积神经网络、循环神经网络、注意力机制等,其性能也有差异,因此,需要进一步分析代码结构和执行效率等性能问题,并将自己新设计的代码与可复用代码进行对比。
代码的相似度是代码对比分析中的重要指标,目前主流的代码相似性计算方法可以分为三类:基于调用结构、基于静态特征、基于二进制代码的代码相似性计算方法。
基于调用结构的代码相似性计算方法主要是依据代码的逻辑结构来计算代码之间的相似度,逻辑结构一般包括抽象语法树和程序调用图等,例如:公开号为CN110737469A的发明专利公开一种功能粒度上基于语义信息的源代码相似度评估方法,通过计算功能对应的标识符和控制流图的嵌入向量,该方法考虑了控制流图的结构和节点信息,但是该方法没有考虑代码导入的内置类等技术特征的语义信息。
基于静态特征的代码相似性计算方法是通过对源代码抽取一些度量值形成特征向量,然后将代码特征向量之间的相似度作为代码的相似度,例如:公开号为CN111290784A的发明专利公开了适用于大规模样本的程序源代码相似度检测方法,对各待检测样本的文本特征序列和特征权重序列计算局部敏感哈希值,将该值作为样本特征向量,这类方法一般适用于大部分程序代码,但是这类方法一般没有考虑代码技术特征的调用信息和结构语义。
基于二进制的代码相似性计算方法,一般是对二进制代码进行反汇编后得到每个函数的指令序列,然后对指令特征进行向量化,最后通过特征向量来计算代码相似度,例如:公开号为CN113554101A的中国专利公开一种基于深度学习的二进制代码相似度检测方法,使用Structure2Vec来生成二进制函数的控制流图的图嵌入,引入CNN来处理控制流图基本块间的顺序结构信息,从而更好的明确函数内部块间的先后关系,该方法能够很好的适应跨架构和跨版本相似度检测工作,但是没有考虑代码的函数名等技术特征的语义信息。
针对上述问题,本发明方法综合考虑技术特征的语义信息,使用了基于函数调用结构的语义编码方法,从函数调用结构、函数名称和内置类等方面分析代码相似性;采用基于图卷积神经网络的自编码器方法进行图语义编码,基于语义向量对比代码结构语义;基于函数和内置类名称的调用信息向量进行函数相似性和内置类的相似性对比;最后将结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量,比对代码相似度。
发明内容
针对现有技术存在的技术问题,本发明公开一种面向技术特征的源代码对比方法。
本发明还公开实现上述对比方法的***。
本发明还公开一种加载有上述方法的程序产品。
本发明还公开一种加载有上述方法的计算机可读存储介质。
本发明公开一种利用上述方法的应用方法。
发明概述:
本发明所述一种面向技术特征的源代码对比方法,现代算法设计思想是模块化构建代码,通常包含大量的基础性功能函数,其函数名、调用结构和内置类等信息提供了重要的代码技术特征,旨在:综合考虑技术特征的语义信息,从函数调用结构、函数名和内置类等方面分析代码结构和执行效率等性能问题。
术语解释:
1、技术特征:包括描述代码实现功能和使用技术的关键词;函数调用结构;函数名;内置类名称;损失函数等信息。
2、函数调用结构相似性:面向对象的编程具有封装、继承和多态三大特征,大部分代码是基于模块化设计的思想,即以功能为单位进行代码设计,利用函数可以实现代码的模块化,如果代码实现的功能相似,那么代码技术特征中函数调用结构是类似的。
3、函数相似性:具有特定功能的函数通常采用函数,函数具有明确的功能、入口调用参数和返回值,如果代码实现的功能相似,那么代码技术特征中函数命名也类似。
4、内置类相似性:函数一般都封装在内置类中,如果代码实现的功能相似,那么代码技术特征中导入的内置类也类似。
本发明详细的技术方案如下:
一种面向技术特征的源代码对比方法,其特征在于,包括:
代码文件预处理阶段,用于输出代码的函数调用结构、函数名称和内置类名称;
对所述函数调用结构语义编码阶段:采用基于图卷积神经网络的自编码器方法对函数调用结构进行语义编码,得到函数调用结构向量,用于基于语义向量对比代码结构语义;
对所述函数名称和内置类名称的调用信息使用TF-IDF算法编码阶段,分别得到函数向量和内置类向量,用于基于函数名称和内置类名称的调用信息向量进行函数相似性和内置类的相似性对比;
最后将函数调用结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量,以比对代码相似度。
根据本发明优选的,所述代码文件预处理阶段包括:
使用函数调用结构生成工具得到代码技术特征中函数调用结构的DOT文件,其中,DOT文件用于描述函数调用结构的图表示中节点以及节点之间的关系。例如Pycallgraph工具可以生成Python应用程序的函数调用结构的图表示,使用Graphviz工具可以将DOT文件转化为函数调用结构图片,将DOT文件经过预处理后得到函数调用结构的图表示
Figure 572047DEST_PATH_IMAGE001
Figure 268871DEST_PATH_IMAGE002
在公式(I)中,V表示函数名称的集合;A V 表示函数属性的集合;E表示存在函数调用边的集合;A E 表示边属性的集合;根据函数调用结构的图表示
Figure 540977DEST_PATH_IMAGE001
,进而得到函数调用结构的图表示的邻接矩阵A
根据本发明优选的,所述函数调用结构语义编码阶段包括:
代码文件经过上述预处理后得到函数调用结构的图表示
Figure 727589DEST_PATH_IMAGE001
、函数名称和内置类名称,使用基于图卷积神经网络(Graph Convolutional Neural Networks,GCN)的自编码器方法对函数调用结构的图表示
Figure 899244DEST_PATH_IMAGE001
进行语义编码,结构语义向量h s 包含函数属性和存在函数调用边的信息,编码器的计算如公式(II)至(IV)所示:
Figure 909182DEST_PATH_IMAGE003
Figure 521779DEST_PATH_IMAGE004
Figure 531247DEST_PATH_IMAGE005
在公式(II)(III)(IV)中,h s 是函数调用结构语义向量;A V 是函数属性的集合;A是函数调用结构的图表示的邻接矩阵;
Figure 941762DEST_PATH_IMAGE006
是对称归一化的邻接矩阵;
Relu是激活函数;W 0 W 1 是待学习的参数,对图自编码器进行训练后得到的;所述图自编码器包括编码器和解码器,所述编码器的计算如公式(II)至(IV)所示;
D是度矩阵,度矩阵是对角阵,对角上的元素为各个顶点的度;
所述图自编码器采用sigmoid函数作为解码器来重构原始的图,所述解码器的计算如公式(V)所示:
Figure 851163DEST_PATH_IMAGE007
在公式(V)中,
Figure 222494DEST_PATH_IMAGE008
是重构原始图的邻接矩阵;σ是sigmoid函数。
根据本发明优选的,为了使结构语义向量中包含丰富的节点和边的信息,使重构出的邻接矩阵与原始的邻接矩阵尽可能的相似,使用重构图的邻接矩阵与原始图的邻接矩阵的交叉熵作为损失函数,损失函数的计算如公式(VI)所示:
Figure 887262DEST_PATH_IMAGE009
在公式(VI)中,N表示函数调用边集合的数量;
Figure 21790DEST_PATH_IMAGE010
表示原始图的邻接矩阵A中的元素;
Figure 107951DEST_PATH_IMAGE011
表示重构原始图的邻接矩阵
Figure 824367DEST_PATH_IMAGE012
中的元素。
根据本发明优选的,所述函数名称和内置类名称的调用信息编码阶段包括:在函数相似性部分,基于函数名称的调用信息向量进行函数相似性对比,算法代码包含大量提供基础性功能的函数,函数具有明确的功能、入口调用参数和返回值,所以功能相似的代码采用的函数也是相似的,根据函数名称的TF-IDF计算模块得到函数调用信息向量,函数向量h f 的计算如公式(VII)所示:
Figure 281106DEST_PATH_IMAGE013
在公式(VII)中,h f 表示函数向量;f(fun i )表示代码中第i个调用的函数的TFIDF值;
在内置类相似性部分,基于内置类名称的调用信息向量进行内置类的相似性对比,函数一般都封装在内置类中,如果代码实现的功能相似,那么代码导入的内置类也是相似的,根据内置类的TF-IDF计算模块得到内置类调用信息向量,内置类向量h c 的计算如公式(VIII)所示:
Figure 276001DEST_PATH_IMAGE014
在公式(VIII)中,h c 表示内置类向量;f(cls i )表示代码中导入的第i个内置类的TFIDF值。
根据本发明优选的,将函数调用结构向量、函数向量和内置类向量拼接作为技术特征向量,技术特征向量h的计算如公式(IX)所示:
Figure 804502DEST_PATH_IMAGE015
在公式(IX)中,h表示技术特征向量,⊕是向量拼接符,由于函数调用结构向量、函数向量和内置类向量的长度均受到代码中调用函数的数量和导入内置类的数量影响,所以将函数调用结构向量、函数向量和内置类向量均线性变换为一定维度的向量;
最后,将技术特征向量的余弦相似度值sim α 作为检索出的可复用代码和新设计代码的相似度,代码相似度的计算如公式(X)所示:
Figure 878987DEST_PATH_IMAGE016
在公式(X)中,sim α 是检索出的可复用代码和新设计代码的相似度值;cos是余弦相似度函数;h sea 是检索出可复用代码的技术特征向量;h des 是新设计代码的技术特征向量。
一种加载有上述方法的***,包括:
代码文件预处理阶段处理模块;函数调用结构语义编码阶段处理模块;函数和内置类名称的调用信息编码阶段处理模块;最后将结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量;基于技术特征向量的代码对比功能。
一种加载有上述方法的程序产品,包括:所述计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令用于执行上述的方法。
一种加载有上述方法的计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现本发明记载的任一项所述方法的步骤。
本发明公开一种利用上述方法的应用方法:采用基于图卷积神经网络的自编码器方法进行图语义编码,基于语义向量对比代码结构语义;基于函数和内置类名称的调用信息向量进行函数相似性和内置类的相似性对比;最后将结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量,比对代码相似度。本发明无需标记语料库,提取代码之间的相关性和差异性信息,依据技术特征进行代码对比。
本发明的技术效果:
1、相较于传统方法,本发明所使用的代码对比方法,不需要标记语料库,综合考虑了函数名、调用结构和内置类等技术特征的语义信息,能够有效地提取代码之间的相关性和差异性信息。
2、相较于传统方法,本发明在函数调用结构语义编码阶段采用基于图卷积神经网络的自编码器方法进行图语义编码,可以捕获函数调用结构的语义信息。
3、相较于传统方法,本发明基于函数和内置类名称的调用信息向量进行函数相似性和内置类的相似性对比,保留了代码的逻辑调用信息,进而提高了本发明方法的精准率。
附图说明
图1是本发明一种面向技术特征的源代码对比方法流程图;
图2是本发明面向技术特征的代码对比模型框架图。
具体实施方式
下面结合实施例和说明书附图做详细的说明,但不限于此。
实施例1
如图1、图2所示,一种面向技术特征的源代码对比方法,包括:
代码文件预处理阶段,用于输出代码的函数调用结构、函数名称和内置类名称;
对所述函数调用结构语义编码阶段:采用基于图卷积神经网络的自编码器方法对函数调用结构进行语义编码,得到函数调用结构向量,用于基于语义向量对比代码结构语义,其中,优选的,所述图语义编码具体按照以下文献实现:William L. Hamilton, RexYing, Jure Leskovec. Inductive representation learning on large graphs[C].Proceedings of the 31st International Conference on Neural InformationProcessing Systems. 2017: 1025-1035;
对所述函数名称和内置类名称的调用信息使用TF-IDF算法编码阶段,分别得到函数向量和内置类向量,用于基于函数名称和内置类名称的调用信息向量进行函数相似性和内置类的相似性对比;
最后将函数调用结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量,以比对代码相似度。
所述代码文件预处理阶段包括:
使用函数调用结构生成工具得到代码技术特征中函数调用结构的DOT文件,其中,DOT文件用于描述函数调用结构的图表示中节点以及节点之间的关系。例如Pycallgraph工具可以生成Python应用程序的函数调用结构的图表示,使用Graphviz工具可以将DOT文件转化为函数调用结构图片,将DOT文件经过预处理后得到函数调用结构的图表示
Figure 879698DEST_PATH_IMAGE001
Figure 852466DEST_PATH_IMAGE002
在公式(I)中,V表示函数名称的集合;A V 表示函数属性的集合;E表示存在函数调用边的集合;A E 表示边属性的集合;根据函数调用结构的图表示
Figure 274570DEST_PATH_IMAGE001
,进而得到函数调用结构的图表示的邻接矩阵A
所述函数调用结构语义编码阶段包括:
代码文件经过上述预处理后得到函数调用结构的图表示
Figure 842211DEST_PATH_IMAGE001
、函数名称和内置类名称,使用基于图卷积神经网络(Graph Convolutional Neural Networks,GCN)的自编码器方法对函数调用结构的图表示
Figure 652472DEST_PATH_IMAGE001
进行语义编码,结构语义向量h s 包含函数属性和存在函数调用边的信息,编码器的计算如公式(II)至(IV)所示:
Figure 740732DEST_PATH_IMAGE003
Figure 401914DEST_PATH_IMAGE017
Figure 517902DEST_PATH_IMAGE018
在公式(II)(III)(IV)中,h s 是函数调用结构语义向量;A V 是函数属性的集合;A是函数调用结构的图表示的邻接矩阵;
Figure 854555DEST_PATH_IMAGE006
是对称归一化的邻接矩阵;
Relu是激活函数;W 0 W 1 是待学习的参数,对图自编码器进行训练后得到的;所述图自编码器包括编码器和解码器,所述编码器的计算如公式(II)至(IV)所示;
D是度矩阵,度矩阵是对角阵,对角上的元素为各个顶点的度;
所述图自编码器采用sigmoid函数作为解码器来重构原始的图,所述解码器的计算如公式(V)所示:
Figure 678548DEST_PATH_IMAGE007
在公式(V)中,
Figure 719753DEST_PATH_IMAGE008
是重构原始图的邻接矩阵;σ是sigmoid函数。
实施例2
如实施例1所述一种面向技术特征的源代码对比方法,为了使结构语义向量中包含丰富的节点和边的信息,使重构出的邻接矩阵与原始的邻接矩阵尽可能的相似,使用重构图的邻接矩阵与原始图的邻接矩阵的交叉熵作为损失函数,损失函数的计算如公式(VI)所示:
Figure 996407DEST_PATH_IMAGE009
在公式(VI)中,N表示函数调用边集合的数量;
Figure 199069DEST_PATH_IMAGE010
表示原始图的邻接矩阵A中的元素;
Figure 891423DEST_PATH_IMAGE011
表示重构原始图的邻接矩阵
Figure 284620DEST_PATH_IMAGE012
中的元素。
实施例3
如实施例1所述一种面向技术特征的源代码对比方法,
所述函数名称和内置类名称的调用信息编码阶段包括:在函数相似性部分,基于函数名称的调用信息向量进行函数相似性对比,算法代码包含大量提供基础性功能的函数,函数具有明确的功能、入口调用参数和返回值,所以功能相似的代码采用的函数也是相似的,根据函数名称的TF-IDF计算模块得到函数调用信息向量,函数向量h f 的计算如公式(VII)所示:
Figure 245973DEST_PATH_IMAGE013
在公式(VII)中,h f 表示函数向量;f(fun i )表示代码中第i个调用的函数的TFIDF值;
在内置类相似性部分,基于内置类名称的调用信息向量进行内置类的相似性对比,函数一般都封装在内置类中,如果代码实现的功能相似,那么代码导入的内置类也是相似的,根据内置类的TF-IDF计算模块得到内置类调用信息向量,内置类向量h c 的计算如公式(VIII)所示:
Figure 998465DEST_PATH_IMAGE014
在公式(VIII)中,h c 表示内置类向量;f(cls i )表示代码中导入的第i个内置类的TFIDF值。
实施例4
如实施例1所述一种面向技术特征的源代码对比方法,将函数调用结构向量、函数向量和内置类向量拼接作为技术特征向量,技术特征向量h的计算如公式(IX)所示:
Figure 734734DEST_PATH_IMAGE015
在公式(IX)中,h表示技术特征向量,⊕是向量拼接符,由于函数调用结构向量、函数向量和内置类向量的长度均受到代码中调用函数的数量和导入内置类的数量影响,所以将函数调用结构向量、函数向量和内置类向量均线性变换为一定维度的向量;
最后,将技术特征向量的余弦相似度值sim α 作为检索出的可复用代码和新设计代码的相似度,代码相似度的计算如公式(X)所示:
Figure 168339DEST_PATH_IMAGE016
在公式(X)中,sim α 是检索出的可复用代码和新设计代码的相似度值;cos是余弦相似度函数;h sea 是检索出可复用代码的技术特征向量;h des 是新设计代码的技术特征向量。
实施例5
一种加载有如实施例1-4所述方法的***,包括:
代码文件预处理阶段处理模块;函数调用结构语义编码阶段处理模块;函数和内置类名称的调用信息编码阶段处理模块;最后将结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量;基于技术特征向量的代码对比功能。
实施例6
一种加载有如实施例1-4所述方法的程序产品,包括:所述计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令用于执行上述的方法。
实施例7
一种加载有如实施例1-4所述方法的计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现本发明记载的任一项所述方法的步骤。
实施例8
一种利用如实施例1-4所述方法的应用方法:采用基于图卷积神经网络的自编码器方法进行图语义编码,基于语义向量对比代码结构语义;基于函数和内置类名称的调用信息向量进行函数相似性和内置类的相似性对比;最后将结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量,比对代码相似度。
利用如实施例1-5、8所述方法,以“句法分析”的代码为例,其将检索出的可复用代码和新设计代码如下:
首先进行代码文件的输入:
新设计代码为code 1 ,检索出的可复用代码为code 2
对代码code 1 文件进行预处理得到函数调用结构的图表示
Figure 357268DEST_PATH_IMAGE019
,函数名称和内置类名称:
其中,
Figure 30959DEST_PATH_IMAGE020
函数名称集合V={main,nextInt,for,print,while,if}
函数属性集合A V ={[0.32,0.41],[0.85,0.20],[0.17,0.66]…}
存在函数调用边的集合E={(main,nextInt),(main,for),(for,print)…}
边属性的集合A E ={1,1,1…}
内置类名称集合为{java.io.BufferedReader,java.util.HashMap,java.io.IOException…}
进而可以得到函数的邻接矩阵
Figure 615874DEST_PATH_IMAGE021
函数调用结构语义编码阶段:
使用基于图卷积神经网络(Graph Convolutional Neural Networks,GCN)的自编码器方法进行函数调用结构语义编码。
Figure 232100DEST_PATH_IMAGE022
=[0.24,0.56,0.46,0.89…]
函数和内置类名称的调用信息编码阶段:
根据函数名称的TF-IDF计算模块可以得到函数调用信息向量h f =[0.61,0.73,0.82,0.53…]
根据内置类名称的TF-IDF计算模块可以得到内置类调用信息向量h c =[0.86,0.62,0.45,0.72…]
拼接:
将结构语义向量、函数向量和内置类向量拼接作为技术特征向量h des =[0.24,0.56,0.46,0.89…,0.61,0.73,0.82,0.53…,0.86,0.62,0.45,0.72…]
将检索出的可复用代码code 2 和新设计代码code 1 对比:
根据拼接后的结果得到新设计代码code 1 的技术特征向量为h des ,同理可以得到可复用代码code 2 的技术特征向量h sea ,将技术特征向量的余弦相似度值作为代码相似度,sim α =cos(h sea h des )=0.75。

Claims (7)

1.一种面向技术特征的源代码对比方法,其特征在于,包括:
代码文件预处理阶段,用于输出代码的函数调用结构、函数名称和内置类名称;
对所述函数调用结构语义编码阶段:采用基于图卷积神经网络的自编码器方法对函数调用结构进行语义编码,得到函数调用结构向量;
对所述函数名称和内置类名称的调用信息使用TF-IDF算法编码阶段,分别得到函数向量和内置类向量;
最后将函数调用结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量,以比对代码相似度;
所述代码文件预处理阶段包括:
使用函数调用结构生成工具得到代码技术特征中函数调用结构的DOT文件,其中,DOT文件用于描述函数调用结构的图表示中节点以及节点之间的关系,将DOT文件经过预处理后得到函数调用结构的图表示
Figure 624018DEST_PATH_IMAGE001
Figure 788283DEST_PATH_IMAGE002
在公式(I)中,V表示函数名称的集合;A V 表示函数属性的集合;E表示存在函数调用边的集合;A E 表示边属性的集合;根据函数调用结构的图表示
Figure 498750DEST_PATH_IMAGE001
,进而得到函数调用结构的图表示的邻接矩阵A;
所述函数调用结构语义编码阶段包括:
代码文件经过上述预处理后得到函数调用结构的图表示
Figure 508294DEST_PATH_IMAGE001
、函数名称和内置类名称,使用基于图卷积神经网络GCN的自编码器方法对函数调用结构的图表示
Figure 869874DEST_PATH_IMAGE001
进行语义编码,结构语义向量h s 包含函数属性和存在函数调用边的信息,编码器的计算如公式(II)至(IV)所示:
Figure 939461DEST_PATH_IMAGE003
Figure 137224DEST_PATH_IMAGE004
Figure 684880DEST_PATH_IMAGE005
在公式(II)(III)(IV)中,h s 是函数调用结构语义向量;A V 是函数属性的集合;A是函数调用结构的图表示的邻接矩阵;
Figure 651699DEST_PATH_IMAGE006
是对称归一化的邻接矩阵;
Relu是激活函数;W 0 W 1 是待学习的参数,对图自编码器进行训练后得到的;所述图自编码器包括编码器和解码器,所述编码器的计算如公式(II)至(IV)所示;
D是度矩阵,度矩阵是对角阵,对角上的元素为各个顶点的度;
所述图自编码器采用sigmoid函数作为解码器来重构原始的图,所述解码器的计算如公式(V)所示:
Figure 141456DEST_PATH_IMAGE007
在公式(V)中,
Figure 560936DEST_PATH_IMAGE008
是重构原始图的邻接矩阵;σ是sigmoid函数;
使用重构图的邻接矩阵与原始图的邻接矩阵的交叉熵作为损失函数,损失函数的计算如公式(VI)所示:
Figure 177862DEST_PATH_IMAGE009
在公式(VI)中,N表示函数调用边集合的数量;
Figure 999187DEST_PATH_IMAGE010
表示原始图的邻接矩阵A中的元素;
Figure 676156DEST_PATH_IMAGE011
表示重构原始图的邻接矩阵
Figure 832200DEST_PATH_IMAGE012
中的元素。
2.根据权利要求1所述一种面向技术特征的源代码对比方法,其特征在于,所述函数名称和内置类名称的调用信息编码阶段包括:根据函数名称的TF-IDF计算模块得到函数调用信息向量,函数向量h f 的计算如公式(VII)所示:
Figure 721658DEST_PATH_IMAGE013
在公式(VII)中,h f 表示函数向量;f(fun i )表示代码中第i个调用的函数的TFIDF值;
根据内置类的TF-IDF计算模块得到内置类调用信息向量,内置类向量h c 的计算如公式(VIII)所示:
Figure 663070DEST_PATH_IMAGE014
在公式(VIII)中,h c 表示内置类向量;f(cls i )表示代码中导入的第i个内置类的TFIDF值。
3.根据权利要求1所述一种面向技术特征的源代码对比方法,其特征在于,将函数调用结构向量、函数向量和内置类向量拼接作为技术特征向量,技术特征向量h的计算如公式(IX)所示:
Figure 229049DEST_PATH_IMAGE015
在公式(IX)中,h表示技术特征向量,⊕是向量拼接符;
最后,将技术特征向量的余弦相似度值sim α 作为检索出的可复用代码和新设计代码的相似度,代码相似度的计算如公式(X)所示:
Figure 888701DEST_PATH_IMAGE016
在公式(X)中,sim α 是检索出的可复用代码和新设计代码的相似度值;cos是余弦相似度函数;h sea 是检索出可复用代码的技术特征向量;h des 是新设计代码的技术特征向量。
4.一种加载有如权利要求1-3任意一项所述方法的***,其特征在于,包括:
代码文件预处理阶段处理模块;函数调用结构语义编码阶段处理模块;函数和内置类名称的调用信息编码阶段处理模块;最后将结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量;基于技术特征向量的代码对比功能。
5.一种加载有如权利要求1-3任意一项所述方法的程序产品,其特征在于,包括:其中,程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令用于执行上述的方法。
6.一种加载有如权利要求1-3任意一项所述方法的计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现上述方法的步骤。
7.一种利用如权利要求1-3任意一项所述方法的应用方法,其特征在于,包括:采用基于图卷积神经网络的自编码器方法进行图语义编码,基于语义向量对比代码结构语义;基于函数和内置类名称的调用信息向量进行函数相似性和内置类的相似性对比;最后将结构向量、函数向量和内置类向量进行拼接作为整体技术特征向量,比对代码相似度。
CN202210808406.7A 2022-07-11 2022-07-11 面向技术特征的源代码对比方法、***与程序产品 Active CN114880023B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210808406.7A CN114880023B (zh) 2022-07-11 2022-07-11 面向技术特征的源代码对比方法、***与程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210808406.7A CN114880023B (zh) 2022-07-11 2022-07-11 面向技术特征的源代码对比方法、***与程序产品

Publications (2)

Publication Number Publication Date
CN114880023A CN114880023A (zh) 2022-08-09
CN114880023B true CN114880023B (zh) 2022-09-30

Family

ID=82683640

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210808406.7A Active CN114880023B (zh) 2022-07-11 2022-07-11 面向技术特征的源代码对比方法、***与程序产品

Country Status (1)

Country Link
CN (1) CN114880023B (zh)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101976318A (zh) * 2010-11-15 2011-02-16 北京理工大学 一种基于数字指纹的代码相似度检测方法
CN110147235B (zh) * 2019-03-29 2021-01-01 中国科学院信息工程研究所 一种源代码与二进制代码间的语义比对方法和装置
CN110502361B (zh) * 2019-08-29 2023-05-30 扬州大学 面向bug报告的细粒度缺陷定位方法
CN111897970B (zh) * 2020-07-27 2024-05-10 平安科技(深圳)有限公司 基于知识图谱的文本比对方法、装置、设备及存储介质
CN112286575A (zh) * 2020-10-20 2021-01-29 杭州云象网络技术有限公司 基于图匹配模型的智能合约相似度检测方法及***
CN112800172B (zh) * 2021-02-07 2022-07-12 重庆大学 一种基于两阶段注意力机制的代码搜索方法

Also Published As

Publication number Publication date
CN114880023A (zh) 2022-08-09

Similar Documents

Publication Publication Date Title
US11256487B2 (en) Vectorized representation method of software source code
Perez-Martin et al. Improving video captioning with temporal composition of a visual-syntactic embedding
CN110532554A (zh) 一种中文摘要生成方法、***及存储介质
CN112487812B (zh) 一种基于边界识别的嵌套实体识别方法及***
CN109871955A (zh) 一种航空安全事故因果关系抽取方法
CN111124487B (zh) 代码克隆检测方法、装置以及电子设备
CN109840322A (zh) 一种基于强化学习的完形填空型阅读理解分析模型及方法
CN113743119B (zh) 中文命名实体识别模块、方法、装置及电子设备
CN112100401B (zh) 面向科技服务的知识图谱构建方法、装置、设备及存储介质
CN112052684A (zh) 电力计量的命名实体识别方法、装置、设备和存储介质
CN110555305A (zh) 基于深度学习的恶意应用溯源方法及相关装置
CN110019653B (zh) 一种融合文本和标签网络的社交内容表征方法和***
CN116661805B (zh) 代码表示的生成方法和装置、存储介质及电子设备
CN115357904B (zh) 一种基于程序切片和图神经网络的多类漏洞检测方法
CN114329225A (zh) 基于搜索语句的搜索方法、装置、设备及存储介质
CN114881043B (zh) 基于深度学习模型的法律文书语义相似度评估方法及***
CN112925904A (zh) 一种基于Tucker分解的轻量级文本分类方法
CN111831624A (zh) 数据表创建方法、装置、计算机设备及存储介质
CN109446299A (zh) 基于事件识别的搜索电子邮件内容的方法及***
CN117574898A (zh) 基于电网设备的领域知识图谱更新方法及***
CN108875024B (zh) 文本分类方法、***、可读存储介质及电子设备
CN113704473A (zh) 基于长文本特征提取优化的媒体假新闻检测方法及***
CN114880023B (zh) 面向技术特征的源代码对比方法、***与程序产品
CN117312559A (zh) 基于树结构信息感知的方面级情感四元组抽取方法及***
Zhou et al. Attending via both fine-tuning and compressing

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant