基于图嵌入的细粒度代码差异获取方法

文档序号:36204999发布日期:2023-11-30 04:33阅读:46来源:国知局
基于图嵌入的细粒度代码差异获取方法

本发明属于程序漏洞修复,尤其涉及基于图嵌入的细粒度代码差异获取方法。


背景技术:

1、在程序漏洞修复方面。在漏洞自动修复的工作中,代码差异抽取是数据收集过程重要的组成部分之一。需要利用代码差异获取算法从历史漏洞修复代码提交前后的两份程序中提取代码差异作为训练数据。随着机器学习方法在漏洞自动修复领域的逐渐应用,对作为训练数据的历史漏洞修复数据的标注质量也提出了更高的要求。

2、在软件演化方面。在协作环境中不同程序员对不同部分的代码进行提交,如果没有差异获取技术就会出现代码程序混乱无法管理的问题。获取的代码差异信息用于将软件系统的两个修改版本合并成包括来自两个较早版本的改变的新版本,编辑脚本帮助开发人员理解代码更改而无需深入了解详细的实现,代码差异分析技术在理解软件演化方面发挥着重要作用。大大减轻人工编写提交消息的负担,保证了开发工作顺利进行。

3、代码差异获取算法的研究为系统安全、软件安全提供强有力的理论支撑和技术手段。代码差异获取算法广泛应用于程序漏洞自动修复、代码仓库自动合并、代码相似度检测等下游工作中,上游代码差异获取算法的性能直接影响下游工作的性能。

4、代码差异获取算法包含两部分工作:一是程序元素映射算法,二是根据映射算法得到的节点匹配生成对应的编辑脚本。如何找到更准确更易理解的程序映射算法是目前现有的代码差异获取算法研究热点。

5、程序映射算法经历了从unix diff为代表只能分析插入和删除操作无法反映代码结构变化的文本行粒度方法到以gumtree、ijm(iterative java matcher)、mtdiff为代表可以分析更新和移动操作抽象语法树映射算法,以及针对程序语义图衍生出的基于图结构分析方法的发展历程,能识别越来越多种类的源代码编辑操作,差异分析结果也越来越准确、合理。基于抽象语法树(abstract syntax tree,ast)结构的程序映射算法是目前的研究热点。

6、而目前的程序映射算法存在如下缺陷:

7、1.不同的语法解析器划分抽象语法树节点时粒度可能不同,粒度过大会导致映射不准确。

8、2.现有的基于抽象语法树映射算法更多的是基于启发式规则,且所有的算法都基于节点间的单一特征计算节点相似度,整个过程没有将节点周围的结构信息考虑进去,算法精度不足。

9、3.目前应用最广的gumtree算法在进行自底向上节点匹配时,匹配结果的好坏依赖于参数设定是否合适,对于不同语言不同规模的代码文件,所需要的参数也不尽相同。

10、4.目前最好的抽象语法树映射算法仍存在至少20%的不准确映射。


技术实现思路

1、本发明目的在于提供一种基于图嵌入的细粒度代码差异获取方法,以解决上述的技术问题。

2、为解决上述技术问题,本发明的基于图嵌入的细粒度代码差异获取方法的具体技术方案如下:

3、一种基于图嵌入的细粒度代码差异获取方法,包括如下步骤:

4、步骤1:数据预处理:对不同版本的java代码进行预处理,包括针对java代码生成的抽象语法树进行处理,对抽象语法树中的节点进行特征提取;步骤2:图嵌入生成:利用处理后的抽象语法树以及节点特征向量,得到两棵抽象语法树的同构子树,将同构子树进行合并得到包含了两个版本代码的抽象语法树以及节点嵌入向量,最后将语法树和节点嵌入向量输入到图嵌入算法中。

5、进一步地,所述步骤1包括:

6、步骤1.1:对抽象语法树的预处理:

7、步骤1.2:对抽象语法树中节点的词嵌入向量生成。

8、进一步地,所述步骤1.1包括如下具体步骤:

9、抽象语法树生成部分选择使用eclipse自带的jdt作为语法解析器,随后对抽象语法树进行剪枝,删除所有注释和java文档。

10、进一步地,所述步骤1.2包括如下具体步骤:

11、使用词嵌入技术将抽象语法树节点中的类型和值信息转化为128维的特征向量,以便后续输入进深度神经网络。

12、进一步地,所述步骤2包括:

13、步骤2.1:同构子树搜索:采用gumtree自顶向下阶段的算法,寻找高度递减的同构子树,在这些同构子树之间建立锚映射;

14、步骤2.2:语法树合并:通过增设虚拟节点的方法,将两棵ast合并成一张抽象语法图;

15、步骤2.3:图嵌入算法:将图中节点属性的特征表示和合并后的抽象语法图g输入至tadw算法的深度神经网络中;

16、步骤2.4:图匹配生成:通过上一步获取的节点嵌入向量进行图匹配生成;

17、步骤2.5:编辑脚本生成:利用节点编辑脚本生成算法获取最终的编辑脚本。

18、进一步地,所述步骤2.1包括如下具体步骤:

19、将源树t1和目标树t2、最小高度minheight、一个空的候选映射列表a、两个空的高度索引优先级列表l1和l2、一个空的映射集m作为输入,将源树t1和目标树t2的根节点分别插入到列表l1和l2中,比较列表l1和l2的首个节点高度,如果l1中首个节点的高度大于l2中首个节点高度时,将l1列表中高度最大的节点移除,将它的子节点插入到列表l1中,直到列表l1和l2的首个节点高度相同,l2同理,遍历节点高度相同的子树t1、t2,如果t1、t2同构且给定一个节点可以有多个节点与之匹配则将其所有可能的映射加入到候选映射列表a中,如果t1、t2同构且唯一匹配则将t1、t2的所有同构节点对加入到映射集m中,如果t1、t2没有映射关系则将没有映射关系的节点的子节点插入到对应的高度优先级列表;

20、当列表l1和l2首个节点高度小于给定的最小高度时,算法映射过程结束,使用dice函数对候选映射列表a中节点对的父节点进行计算并对节点对进行排序dice系数越高优先级越高,dice函数如下:

21、

22、其中s(ti)是节点ti的后代集合,

23、将dice系数最高的节点对及s(ti)的所有同构节点对加入到映射集m中,直到候选映射列表a为空,算法结束,得到映射集m,m中的节点对即为同构子树的锚映射关系,即得到源树t1和目标树t2的所有同构子树。

24、进一步地,所述步骤2.2包括如下具体步骤:

25、首先遍历并搜索映射集m所有的锚定节点对,在锚定节点对中新增虚拟节点并连接。

26、进一步地,所述步骤2.3包括如下具体步骤:

27、tadw算法是用矩阵分解的方法模拟了deepwalk算法,将其等价的deepwalk矩阵分解模型进行扩展,使其支持对属性信息的嵌入;

28、deepwalk是以随机游走的方式生成游走序列,然后通过skip-gram和负采样来近似softmax的方法;deepwalk的训练目标是判断两个结点是否存在于t步上下文中,假设抽象语法树标准化后的邻接矩阵为a即存在边eij,那么aij=1/di,否则为0,di为结点i的度,它代表了以一个结点为起点与其他结点之间一步以内的共现概率,而两步的共现概率就为a2,邻居结点以相同的概率走向它的邻居结点,同样的,t步的共现概率为at,所以t步以内的共现概率矩阵为

29、m=(a+a2+a3+a4+...+at)/t

30、m是tadw所要重构的矩阵,因为最终tadw中没有使用softmax或者它的近似形式,故不需要重构m的对数矩阵,选择t=2,融入网络中节点的文本信息,即节点属性特征矩阵t,tadw把m向量进行矩阵分解,优化目标为:

31、

32、其中w与h分别是我们得到的结点向量以及上下文向量,由m分解得到,后一项为正则项,添加了网络节点的文本向量|v|×f的属性矩阵t,训练过程中交替优化w与h,而t则作为固定部分不做改变,最后将w矩阵与ht相乘得到的矩阵进行拼接,得到带有属性信息的网络表示向量embedding。

33、进一步地,所述步骤2.4包括如下具体步骤:

34、采用k阶贪心匹配也叫k-hop算法来获取节点之间的映射关系,k-hop算法的中心思想利用抽象语法图g中的图形结构信息并根据已经匹配节点对的k-阶邻居计算节点相似性来搜索匹配节点,随后,未访问到或者相似度较低的节点对将使用rted算法重新进行一次恢复匹配。

35、进一步地,所述步骤2.5包括如下具体步骤:

36、给定源树t1和目标树t2以及它们的节点之间的匹配m,生成符合m的最小成本编辑脚本并将t1变换为t2,在编辑操作的定义中,t1指的是对其应用操作的树,而t2指的是结果树,树上的四个编辑操作有update(n,v)用新值v替换节点n的旧值;add(n,p,i)将新的节点n添加到ast中,如果p不是null,则n节点是p的第i个子节点,否则n是新的根节点,并且将之前的根节点作为它唯一的子节点;delete(n)移除ast的一个叶节点;move(n,p,i)移动节点n并使其成为p的第i个子节点,n的子节点也会随之移动,这个操作会移动整个子树;

37、节点编辑脚本生成算法一共有五个阶段:更新阶段、对齐阶段、插入阶段、移动阶段、删除阶段,在该算法中,将更新阶段、对齐阶段、插入阶段、移动阶段组合成t2上的一个广度优先遍历,删除阶段需要t1的后序遍历,算法从一个空的编辑脚本e开始,并在e上追加编辑操作,将每个编辑操作应用于t1,当删除阶段结束时,t1与t2同构,e是最终编辑脚本,m是最终编辑脚本。

38、本发明的基于图嵌入的细粒度代码差异获取方法具有以下优点:

39、1.本发明将统一ast算法的粒度并在细粒度上进行节点映射,将ast的节点映射为语句级和词元级粒度,避免了不同语法解析器和ast预处理导致的ast中节点粒度和节点定义的不同。

40、2.本发明方法将借助现有的图嵌入技术,捕捉节点周围的邻居结构信息,结合邻居结构信息得到一个低维向量表示,该向量更完整地保留了节点的拓扑关系。

41、3.本发明提出了采用更灵活的图嵌入来进行节点匹配,匹配结果的好坏不依赖于参数是否合适。

42、4.本发明提出的方法生成更多的映射节点对,提高了映射算法准确率。

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