CN114238124A - 一种基于图神经网络的重复Pull Request检测方法 - Google Patents

一种基于图神经网络的重复Pull Request检测方法 Download PDF

Info

Publication number
CN114238124A
CN114238124A CN202111566438.2A CN202111566438A CN114238124A CN 114238124 A CN114238124 A CN 114238124A CN 202111566438 A CN202111566438 A CN 202111566438A CN 114238124 A CN114238124 A CN 114238124A
Authority
CN
China
Prior art keywords
similarity
changed
code
change
pull
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.)
Pending
Application number
CN202111566438.2A
Other languages
English (en)
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.)
Nanjing University of Posts and Telecommunications
Original Assignee
Nanjing University of Posts and Telecommunications
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 Nanjing University of Posts and Telecommunications filed Critical Nanjing University of Posts and Telecommunications
Priority to CN202111566438.2A priority Critical patent/CN114238124A/zh
Publication of CN114238124A publication Critical patent/CN114238124A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • Biophysics (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于图神经网络的重复Pull Request检测方法,包括以下步骤:1)数据集的处理以及对于数据的获取,根据数据集中的Pull Request编号,通过GitHub API的调用,获取Pull Request的标题、描述、commit信息、变更文件信息、变更代码信息。对于变更文件超过50或者变更代码增加和删除超过10000行的Pull Request进行过滤。2)使用自然语言处理方法结合余弦相似度计算出标题、描述、commit信息的相似性;使用最长公共子路径算法,计算出变更文件的路径相似;计算变更代码位置相似性,通过求出两个PullRequest中变更代码的具体位置,计算出重叠变更位置的长度,除上总的重叠快的长度求出变更代码相似。3)基于大型的代码克隆数据仓库,使用增加流抽象语法树、图匹配网络以及均方误差损失来训练一个图神经网络模型,计算出变更代码的相似性。4)基于求出的标题相似性、描述相似性、commit信息相似性、变更文件路径相似性、变更代码位置相似性、变更代码相似性作为特征值,以及对应的是否重复的标签,利用机器学习中的AdaBoost算法来训练一个重复Pull Request的检测模型。

Description

一种基于图神经网络的重复Pull Request检测方法
技术领域
本发明属于软件工程的开发和维护领域,具体涉及一种基于图神经网络的重复Pull Request检测方法。
背景技术
近年来,随着协同开发的流行,越来越多的开发人员通过提交Pull Request来为开源项目做贡献。GitHub上典型的Pull Request包括以下步骤:首先贡献者跟随一些著名的开发人员来参与具有吸引力的项目;然后克隆该项目到本地,开展添加新功能或者修复bug等工作;接着贡献者发起Pull Request到原存储库;然后原存储库的审核人员审核PullRequest,讨论该Pull Request是否符合要求、是否需要进一步提高质量等问题,并会给出一些建议;接下来,贡献者根据审阅者的建议来改进和更新Pull Request;最后审核人员会再次讨论该Pull Request,做出合并或者拒绝的决定。
协同开发模式能大大提升开发效率,但是当多个开发人员没有协调好时,会导致重复Pull Request的出现。所谓重复Pull Request,是指多个开发人员对于同一个功能或者修复同一个bug而发起的Pull Request。尽管GitHub中每个提交的Pull Request都必须经过严格的手动代码审查过程,但是大量Pull Request传入时,不可能立即检测到重复的Pull Request。重复的Pull Request不仅会导致提交前的初始工作重复,还会导致审阅者工作量的增加。
目前在重复的Pull Request检测方面,有一些已有工作。工作主要分为两类,一类是基于Pull request标题和描述来计算相似性,但是考虑的特征比较少,对于Pullrequest重复检测还有更多的特征需要考虑。第二类是通过标题,描述,变更文件,变更代码求出相似性,利用机器学习训练模型,虽然特征考虑比较充分,但是对于变更代码相似性的检测方法比较落后,不能很好的检测出代码的语义相似度。为此本发明基于第二类方法,增加commit信息特征值并对于变更代码相似性采用图神经网络加FA-AST来计算。
发明内容
为解决重复Pull Request问题,本发明提出一种基于图神经网络的重复PullRequest检测方法。方法的主要工作分为三个部分:第一部分是数据集的获取以及对于数据的预处理;第二部分是对于Pull Request标题信息、描述信息、commit信息、变更文件信息、变更代码信息计算相似性;第三部分是基于图神经网络的机器学习算法来训练一个精准的代码相似性检测模型,利用该模型计算Pull Request变更代码相似性;第四部分基于标题,描述,commit信息,变更文件,变更代码的相似性来训练一个检测重复Pull Request的精准模型。
基于图神经网络的重复Pull Request检测方法,包括以下步骤:
1.数据集处理以及数据的获取,数据集M包括重复Pull Request以及不重复的Pull Request,是以一对的形式出现,获取每个仓库下所有的Pull Request,包括open以及closed状态。将数据集分为训练集和测试集,分别包含重复Pull Request集和不重复PullRequest集。数据集N是用来训练图神经网络模型,获取的是Google Code Jam和BigCloneBench。然后通过GitHubAPI来获取每个仓库的所有Pull Request并且提取想要的标题信息、描述信息、commit信息、变更文件信息、变更代码信息。最后对于变更文件超过50或者变更代码增加和删除超过10000行的Pull Request进行过滤。
2.基于获取到的Pull Request信息,计算Pull Request标题、描述、commit信息的相似性,采用的是NLP自然语言处中比较典型的余弦相似度的计算方法,先对文本进行分词,词干化,去除停止词操作,然后对于提出的文本建立语料库、tf-idf模型来计算每个词的tf-idf值,并向量化,使用余弦相似度来求出相似性;计算变更文件路径相似度,获取一对Pull Request的变更文件列表。将其url用”/”进行分割,找到两个文件路径的最长公共子路径,再除以两个路径分割后集合的最大长度,作为路径相似性;计算变更代码位置相似性,通过求出两个Pull Request中变更文件的变更代码位置,计算出重叠变更位置的长度,除上总的重叠块的长度求出变更代码相似性。
3.训练图神经网络模型,计算Pull Request变更代码相似性。基于数据集N,首先将代码文件解析为AST抽象语法树;进而添加不同类型的边Child,Parent,NextSib,NextToken,NextUse得到增强流抽象语法树FA-AST;将一对矢量化的FA-AST共同送至图匹配网络中,图匹配网络计算两个FA-AST的向量表示。然后计算余弦相似度,超过阈值就是相似的代码文件。最后通过均方误差损失来训练模型。利用该模型来计算出每对PullRequest的变更代码相似性。
4.训练检测重复Pull Request的模型,对于数据集中的每对Pull Request计算需要的特征值,包括标题以及描述的相似性、commit信息的相似性、变更文件的路径相似性、变更代码位置的相似性以及变更代码的相似性。将上述的相似性特征值集合以及对应的标签作为输入,结合AdaBoost算法来训练一个精准的重复Pull Request检测模型。
发明所达到的有益效果:本发明是一种基于图神经网络的重复Pull Request检测方法,基于大量的Pull Request数据。可以在开发人员发起Pull Request时就与当前代码仓库存在的Pull Request进行一个重复性的检测,识别出当前Pull Request是否是重复的,大大减少了审阅者的工作量。
附图说明
图1是本发明实施例中总体设计流程图;
图2是本发明实施例中文本相似性计算流程图;
图3是本发明实施例中变更文件相似度计算流程图;
图4是本发明实施例中变更代码相似度计算流程图;
具体实施方案
下面根据附图并结合实施例对本发明的技术方案作进一步阐述。在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
本发明具体步骤如下:
1)针对获取到的数据集,通过GitHub API的调用,获取想要的特征Pull Request信息,包括标题信息、描述信息、commit信息、变更文件信息、变更代码信息。对于变更文件超过50或者变更代码增加和删除超过10000行的Pull Request进行过滤。
2)基于自然语言处理相关技术求出标题、描述、commit信息相似性,利用最长公共子路径算法求出变更文件路径的相似性。
3)为了解决语义相似问题,基于大型的代码克隆数据仓库,使用增强流抽象语法树,图匹配网络以及均方误差损失进行图神经网络模型的训练,得到模型计算变更代码相似性。
4)基于求出的标题相似性、描述相似性、commit信息相似性、变更文件路径相似性、变更代码位置相似性、变更代码相似性作为特征值,以及对应的是否重复的标签,利用机器学习中的AdaBoost算法来训练一个重复Pull Request的检测模型。
步骤1)中数据获取以及过滤流程如下:通过数据集中给出的仓库地址,以及PullRequest编号,通过GitHub API进行调用,获取每个仓库对应的所有Pull Request,包括open以及closed状态的。然后从返回的json数据中得到想要的标题信息、描述信息、commit信息、变更文件信息、变更代码信息。对于变更文件超过50或者变更代码增加和删除超过10000行的Pull Request进行过滤。
步骤2)中基于自然语言处理计算出标题、描述、commit信息相似性的具体流程如下:首先基于步骤1)中获取到的标题、描述、commit信息建立相应的语料库,接着对于每对Pull Request进行分词,去除停止词,词干化操作。通过tf-idf模型结合余弦相似性公式计算出标题、描述、commit信息的相似性。余弦相似度公式如下:
Figure BSA0000261274330000041
其中TextVec表示通过tf-idf计算后的向量表示,对于变更文件相似性,首先获取变更文件列表,求出两个Pull Request重叠的变更文件,然后将其文件地址通过”/”分隔,最后通过最长公共子路径算法求出变更文件相似性;对于计算变更代码位置相似性,通过求出两个Pull Request中变更文件的变更代码位置,计算出重叠变更位置的长度,除上总的重叠块的长度求出变更代码相似性。
步骤3)中训练图神经网络模型的具体流程如下:基于Google Code Jam和BigCloneBench两个大型的代码克隆数据仓库,首先将代码文件解析为AST抽象语法树;进而添加不同类型的边Child,Parent,NextSib,NextToken,NextUse得到增强的抽象语法树;将一对矢量化的FA-AST共同送至图匹配网络中,图匹配网络计算两个FA-AST的向量表示。然后计算余弦相似度,超过阈值就是相似的代码文件。最后通过均方误差损失来训练模型。使用图神经网络来计算代码相似性,能更好的处理语义相似性的问题。训练好模型之后计算出两个变更文件代码的相似性。
步骤4)中训练重复Pull Request检测模型的具体流程如下:对于训练数据集和测试数据集打上标签,重复的数据集打上标签1,不重复的数据集打上标签0。将步骤2)和步骤3)中获取到的特征值集合,以及对应的标签值,作为机器学习算法输入的X,Y值。(X_Train为重复Pull Request数据集特征值集合,Y_Train为重复的标签集合,全部是l。X_Test为不重复的Pull Request数据集特征值集合,Y_Test为不重复的标签集合,全部是0)。选择机器学习中的AdaBoost算法来训练模型,算法采用的Adaboost算法,该算法通过调整样本权重和弱分类器权值,从训练出的弱分类器中筛选出权值系数最小的弱分类器组合成一个最终强分类器。将获取到的X_Train,Y_Train,X_Test,Y_Test作为算法的输入,来训练模型。

Claims (6)

1.基于图神经网络的重复Pull Request检测方法,其特征是对于基于数据集中的PullRequest,计算数据集中每对Pull Request的标题、描述、commit信息、变更文件路径、变更代码位置、变更代码相关信息;接着利用自然语言处理相关技术来计算标题、描述、commit信息的相似性,利用最长公共子路径求出变更文件路径的相似性;其中对于变更代码的相似性,考虑到语义相似性,需要使用增强流抽象语法树、图匹配网络、均方误差损失来训练一个图神经网络模型;然后基于求出的相似性作为特征值,以及对应的是否重复的标签,利用机器学习中的AdaBoost算法来训练模型。
2.根据权利要求1所描述的基于图神经网络的重复Pull Request检测方法,其特征包括以下几个步骤:
1)基于GitHub API,提取出每对Pull Request中标题、描述、commit信息、变更文件路径、变更代码位置、变更代码相关信息,对于变更文件超过50或者变更代码增加和删除超过10000行的Pull Request进行过滤;
2)基于自然语言处理相关技术求出标题、描述、commit信息相似性,利用最长公共子路径算法求出变更文件路径的相似性;
3)对于语义相似性,基于大型的代码克隆数据仓库,使用增加流抽象语法树、图匹配网络以及均方误差损失来训练一个图神经网络模型,计算出变更代码的相似性;
4)基于求出的标题相似性、描述相似性、commit信息相似性、变更文件路径相似性、变更代码位置相似性、变更代码相似性作为特征值,以及对应的是否重复的标签,利用机器学习中的AdaBoost算法来训练一个重复Pull Request的检测模型。
3.根据权利要求2所描述的基于图神经网络的重复Pull Request检测方法,其特征是步骤1)中基于GitHub API,提取出每对Pull Request中标题、描述、commit信息、变更文件路径、变更代码相关信息,对于变更文件超过50或者变更代码增加和删除超过10000行的进行过滤。
4.根据权利要求2所描述的基于图神经网络的重复Pull Request检测方法,其特征值是步骤2)中基于自然语言处理相关技术求出标题、描述、commit信息相似性;计算PullRequest标题、描述、commit信息的相似性,采用的是NLP自然语言处中比较典型的余弦相似度的计算方法,先对文本进行分词,词干化,去除停止词操作,然后对于提出的文本建立语料库、tf-idf模型来计算每个词的tf-idf值,并向量化,使用余弦相似度来求出相似性;计算变更文件路径相似度,获取一对Pull Request的变更文件列表,将其url用”/”进行分割,找到两个文件路径的最长公共子路径,再除以两个路径分割后集合的最大长度,作为路径相似性;计算变更代码位置相似性,通过求出两个Pull Request中变更文件的变更代码位置,计算出重叠变更位置的长度,除上总的重叠块的长度求出变更代码相似性。
5.根据权利要求2所描述的基于图神经网络的重复Pull Request检测方法,其特征是步骤3)中解决代码语义问题训练一个图神经网络模型;先将代码文件解析为AST抽象语法树,进而添加不同类型的边Child,Parent,NextSib,NextToken,NextUse得到增强流抽象语法树,将一对矢量化的增强流抽象语法树共同送至图匹配网络中,图匹配网络计算两个增强流抽象语法树的向量表示,然后计算余弦相似度,超过阈值就是相似的代码文件;最后通过均方误差损失来训练模型,通过该模型计算出两个变更文件的代码相似性。
6.根据权利要求2所描述的基于图神经网络的重复Pull Request检测方法,其特征是步骤4)中基于求出的Pull Request相关信息的相似性来训练一个重复Pull Request的检测模型;将计算出的相似性作为特征值,结合是否是重复的标签,作为机器学习算法的输入;算法采用的Adaboost算法,该算法通过调整样本权重和弱分类器权值,从训练出的弱分类器中筛选出权值系数最小的弱分类器组合成一个最终强分类器,最终预测出输入的PullRequest是否存在重复的Pull Request。
CN202111566438.2A 2021-12-20 2021-12-20 一种基于图神经网络的重复Pull Request检测方法 Pending CN114238124A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111566438.2A CN114238124A (zh) 2021-12-20 2021-12-20 一种基于图神经网络的重复Pull Request检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111566438.2A CN114238124A (zh) 2021-12-20 2021-12-20 一种基于图神经网络的重复Pull Request检测方法

Publications (1)

Publication Number Publication Date
CN114238124A true CN114238124A (zh) 2022-03-25

Family

ID=80759870

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111566438.2A Pending CN114238124A (zh) 2021-12-20 2021-12-20 一种基于图神经网络的重复Pull Request检测方法

Country Status (1)

Country Link
CN (1) CN114238124A (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
CN109697162A (zh) * 2018-11-15 2019-04-30 西北大学 一种基于开源代码库的软件缺陷自动检测方法
CN110502361A (zh) * 2019-08-29 2019-11-26 扬州大学 面向bug报告的细粒度缺陷定位方法
US20210141863A1 (en) * 2019-11-08 2021-05-13 International Business Machines Corporation Multi-perspective, multi-task neural network model for matching text to program code
CN113127339A (zh) * 2021-03-24 2021-07-16 西北大学 一种Github开源平台数据的获取方法及源代码缺陷修复系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
CN109697162A (zh) * 2018-11-15 2019-04-30 西北大学 一种基于开源代码库的软件缺陷自动检测方法
CN110502361A (zh) * 2019-08-29 2019-11-26 扬州大学 面向bug报告的细粒度缺陷定位方法
US20210141863A1 (en) * 2019-11-08 2021-05-13 International Business Machines Corporation Multi-perspective, multi-task neural network model for matching text to program code
CN113127339A (zh) * 2021-03-24 2021-07-16 西北大学 一种Github开源平台数据的获取方法及源代码缺陷修复系统

Similar Documents

Publication Publication Date Title
CN112699377B (zh) 基于切片属性图表示学习的函数级代码漏洞检测方法
CN107451126B (zh) 一种近义词筛选方法及系统
CN110263166A (zh) 基于深度学习的舆情文本分类方法
CN105378731A (zh) 从被回答问题关联语料库/语料值
CN103995876A (zh) 一种基于卡方统计和smo算法的文本分类方法
CN107844533A (zh) 一种智能问答系统及分析方法
CN109902179A (zh) 基于自然语言处理的筛选电商垃圾评论的方法
CN113780007A (zh) 语料筛选方法、意图识别模型优化方法、设备及存储介质
CN111831824A (zh) 一种舆情正负面分类方法
CN113590764B (zh) 训练样本构建方法、装置、电子设备和存储介质
CN112307153A (zh) 一种产业知识库自动构建方法、装置及存储介质
CN114816497B (zh) 基于bert预训练模型的链接生成方法
CN103678318B (zh) 多词单元提取方法和设备及人工神经网络训练方法和设备
CN111078979A (zh) 一种基于ocr和文本处理技术识别网贷网站的方法及系统
CN110134777A (zh) 问题去重方法、装置、电子设备和计算机可读存储介质
CN107818173B (zh) 一种基于向量空间模型的中文虚假评论过滤方法
CN111160027A (zh) 基于语义注意力的循环神经网络事件时序关系识别方法
CN111462752A (zh) 基于注意力机制、特征嵌入及bi-lstm的客户意图识别方法
CN112966708A (zh) 一种基于语义相似度的中文众包测试报告聚类方法
CN110825642B (zh) 一种基于深度学习的软件代码行级缺陷检测方法
Song Sentiment analysis of Japanese text and vocabulary learning based on natural language processing and SVM
CN115099310A (zh) 训练模型、对企业进行行业分类的方法和装置
CN110830291A (zh) 一种基于元路径的异质信息网络的节点分类方法
CN111984790B (zh) 一种实体关系抽取方法
CN113742396A (zh) 一种对象学习行为模式的挖掘方法及装置

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