[发明专利]一种基于属性图聚类的复合代码提交分解方法在审
申请号: | 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 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 属性 图聚类 复合 代码 提交 分解 方法 | ||
本发明公开了一种基于属性图聚类的复合代码提交分解方法。本方法首先以复合代码提交中的代码语句为节点、代码间依赖关系为边构建提交图,然后使用高阶图卷积神经网络模型获取各个节点的属性特征,最后基于近邻传播聚类对节点进行聚类,完成分解。本方法相比于现有方法,结合了代码语句的文本内容和代码语句之间的依赖关系,实现了复合代码提交自动化分解。在已有的数据集上的实验结果表明,本方法较同类工作在复合代码提交分解问题上具有更好的效果。
技术领域
本发明涉及一种复合代码提交分解方法,具体是一种基于属性图聚类的复合代码提交分解方法,属于软件分析领域。
背景技术
在软件开发过程中,开发人员经常使用版本控制系统(例如,Git或SVN)来以提交的形式跟踪软件更改的历史。代码提交通常由两部分构成:第一个部分是代码变更段,这是前一个版本和当前版本之间代码的变更部分;第二个部分是提交辅助信息(commitmessage),通常是一个文本描述,简单地总结了代码更改的内容和意图。如果一个代码提交仅代表一个开发活动,例如修改一个错误或添加一个新功能,那么这个代码提交就被称为原子提交。大量研究表明原子提交在多个方面都具有优势,例如代码的重复使用、本次提交出现错误时的快速回滚,以及加快审查人员对本次提交的理解与评审。
然而,一些比较复杂的代码提交往往包含了多个开发活动。比如在一个提交中,开发人员既修复错误,又添加一个新功能。这类提交被称之为复合代码提交。现有的研究发现,在企业和开源项目中,包含多个开发活动的代码提交非常常见。现有的复合代码提交分解方法集中于将每个提交按照一定方法构建为一个图,然后采用一些图聚类算法来分解复合代码提交。已有的方法存在两个缺陷:只关注代码之间的依赖关系,忽略代码本身的语义信息;只关注图中节点的低阶邻居,忽略高阶邻居对节点属性的更新作用。
发明内容
发明目的:针对现有技术中存在的问题与不足,本发明提出了一种基于属性图聚类的复合代码提交分解方法。在构建提交图时,通过添加子标志边来获得代码的语义信息。另外,将代码语句的文本输入预训练语言模型BERT来获得节点的初始属性,充分利用代码的语义信息。在使用图卷积神经网络模型时,将卷积从二阶邻居扩展到高阶邻居,充分利用全图信息。
技术方案:一种基于属性图聚类的复合代码提交分解方法,利用复合代码提交中代码语句的文本信息和代码之间的依赖关系,通过属性图聚类的方法对提交图进行聚类,从而完成分解。方法包括以下步骤:
(1)以复合代码提交中的代码语句为节点、代码间依赖关系为边构建提交图。
(2)使用高阶图卷积神经网络模型获取各个节点的属性特征。假设每个代码更改在一开始都是原子的,再从提交图中更新每个节点的特征,然后根据更新后的节点特征计算出的相似度对已更改语句的节点进行聚类。
(3)使用近邻传播聚类算法进行聚类,完成分解。通过在不同点之间不断的传递信息,从而最终选出聚类中心,完成聚类。该聚类算法的基本思想是将全部样本看作图的节点,然后通过图中各条边的消息传递计算出各样本的聚类中心。聚类过程中,共有两种消息在各节点间传递,分别是吸引度和归属度。近邻传播聚类通过迭代过程不断更新每一个点的吸引度和归属度,直到产生m个满足需求的Exemplar(类似于质心),同时将其余的数据点分配到相应的聚类中,完成聚类。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202310464002.5/2.html,转载请声明来源钻瓜专利网。