GitHub社区中Pull Request的重复检测
作者单位:大连理工大学
学位级别:硕士
导师姓名:朴勇
授予年度:2020年
学科分类:081203[工学-计算机应用技术] 08[工学] 0835[工学-软件工程] 0812[工学-计算机科学与技术(可授工学、理学学位)]
主 题:Pull Request 重复检测 软件维护 主题模型 抽象语法树
摘 要:GitHub以大众参与的开发模式对软件开发技术产生了深远影响,但由于其项目管理模式高度精简导致项目管理混乱的现象。Pull Request模块为记录用户对代码功能的更改,提交后需人工审核是否接受更改活动。对于关注度较高的项目,提交的大量Pull Request之间存在重复的问题,现有研究表明Pull Request在GitHub重复关系中占比约40%。重复的Pull Request人工检测难度很大,也会延缓软件的开发与维护工作。本研究提出了两种对重复的Pull Request自动检测的方法。首先针对Pull Request的文本说明部分,提出了基于文本显性特征以及隐含主题模型的文本相似度重复检测。使用BM25方法表征文本中的显示特征,由于语言表达的丰富性,本文结合了文本隐含主题特征的LDA算法挖掘文本语义信息。其次针对Pull Request的提交代码部分,提出了基于Java及Python的代码相似度重复检测,使用抽象语法树对代码的语法结构等信息进行特征表示,并对抽象子树进行特征向量构建,为降低向量间线性检索时间,使用局部敏感哈希算法近似最近邻检索,对提交代码中相似代码片段进行统计得到代码的相似度。最后本文提出结合Pull Request的文本相似度及代码相似度模型进行对重复的检测。基于本文提出的方法,对Rails,***以及Elasticsearch三个项目进行文本显性特征以及隐含主题模型的文本相似度重复检测,该方法相对于现有方法在Recallrate@20上提升了1.36%。基于Java,Python语言,对Scikit-learn以及Elasticsearch两个项目分别进行代码相似度重复检测以及结合文本相似度及代码相似度的重复检测,发现结合文本相似度及代码相似度的重复检测的Recall-rate@20均值为63.63%,相对于现有方法提升了4.49%。