[发明专利]一种基于属性图聚类的复合代码提交分解方法在审
申请号: | 202310464002.5 | 申请日: | 2023-04-26 |
公开(公告)号: | CN116521214A | 公开(公告)日: | 2023-08-01 |
发明(设计)人: | 姚远;徐锋;陈思宇 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F8/70 | 分类号: | G06F8/70;G06F16/906;G06F16/901;G06N3/0464;G06N3/042;G06N3/045 |
代理公司: | 南京乐羽知行专利代理事务所(普通合伙) 32326 | 代理人: | 李玉平 |
地址: | 210023 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 属性 图聚类 复合 代码 提交 分解 方法 | ||
1.一种基于属性图聚类的复合代码提交分解方法,其特征在于,利用复合代码提交中代码语句的文本信息和代码之间的依赖关系,通过属性图聚类的方法对提交图进行聚类,从而完成分解;方法包括以下步骤:
(1)以复合代码提交中的代码语句为节点、代码间依赖关系为边构建提交图;
(2)使用高阶图卷积神经网络模型获取各个节点的属性特征;
(3)使用近邻传播聚类算法进行聚类,完成分解。
2.根据权利要求1所述的基于属性图聚类的复合代码提交分解方法,其特征在于,所述(1)中,为一个复合代码提交构建一个提交图;提交图被定义为G=(V,E);其中,V是节点的集合,每个节点对应一个代码语句,具体表现形式为一个三元组代码、函数、符号;E是边的集合,每条边都以(vi,r,vj)的形式出现,其中r代表节点vi和vj之间的边类型;具体来说,对于所述复合代码提交的前后版本,首先分别为它们构建控制流图;在每个控制流图的基础上,使用四种代码间依赖关系的信息来对控制流图进行扩充,所述四种代码间依赖关系指:函数调用图、数据流、名称流和共有子标志;扩充后得到的图称为提交图;
函数调用图表示程序中函数之间的调用关系;数据流表示在程序的整个执行过程中的数据流动情况;名称流建立在数据流之上,收集了流入给定变量的名称;如果两个不同节点的代码语句中包含具有相同子标志的变量或函数,则会在两个节点之间插入一条子标志边;
在获得前后版本的两个提交图后,将两个提交图合并为一个图作为最终的提交图;如果两个图各自有一个节点的代码语句和函数都相同,就将其合并为一个节点,并保留两个图中剩下的节点;对于边来说,将两个图中那些具有相同源节点和目标节点,同时边的类型也相同的边进行合并;最终完成提交图的构建。
3.根据权利要求1所述的基于属性图聚类的复合代码提交分解方法,其特征在于,所述(2)中,首先假设每个代码更改在一开始都是原子的,再从提交图中更新每个节点的特征,然后根据更新后的节点特征计算出的相似度对已更改语句的节点进行聚类;采在图神经网络中的图卷积算法来对节点特征进行更新;具体的节点特征更新公式如下所示:
其中,X为节点的初始属性特征,将节点属性(即代码语句的文本)输入预训练模型BERT,得到节点的初始属性特征矩阵X;I为单元矩阵,L为图的归一化拉普拉斯矩阵。
4.根据权利要求1所述的基于属性图聚类的复合代码提交分解方法,其特征在于,所述(3)中,通过在不同点之间不断的传递信息,从而最终选出聚类中心,完成聚类;聚类算法通过图中各个节点间的消息传递计算出各节点的聚类中心;聚类过程中,共有两种消息在各节点间传递,分别是吸引度和归属度;近邻传播聚类通过迭代过程不断更新每一个点的吸引度和归属度,直到自动产生多个满足需求的聚类中心,同时将其余的节点分配到相应的聚类中,完成聚类。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202310464002.5/1.html,转载请声明来源钻瓜专利网。