论文部分内容阅读
在GitHub社区,越来越多的项目开始使用基于Pull-request(PR)的协同开发模式,这种开发模式激发了大众的创造力和贡献热情,任何一个开发者都可以通过向项目主版本库提交PR的方式为他们感兴趣的项目贡献代码。由于大众贡献者的编程水平层次不齐,为了保证他们所贡献代码的质量,每一个PR在被接受前都要经过审查。不同于传统的代码审查模式,GitHub上的贡献审查是一种社会化、轻量级的审查模式,它的执行过程更透明、开放、自由,任何社区成员均可以参与到一个PR的审查讨论中。这些特性方便了贡献审查过程中参与者之间的交流,提高了审查者的工作效率,因此这种模式被GitHub项目广泛采用。然而,由于缺乏统一的协调管理机制以及严格的执行步骤和规范,这种贡献审查模式的效率和质量难以得到保证,容易导致重复的大众贡献不能被及时地发现、大众贡献中所隐含的缺陷不能被完全发现等问题。因此,探索高效、可靠的大众贡献审查技术是当前大众化协同软件开发亟待解决的问题。本论文立足于GitHub开源社区中的大众贡献数据,围绕大众贡献审查的效率和质量问题,在不同角度展开了分析和研究。主要工作与贡献总结如下:第一,在大众贡献审查的重复性方面,提出了重复PR检测的问题,并提出了自动化检测方法。对于一个新提交的PR,我们通过综合利用它所包含的文本信息和变更信息,计算它与历史PR的相似度,返回一组与它最相似的PR列表,从而避免贡献审查者对实现相同功能的重复PR执行额外冗余的审查工作,第二,在大众贡献审查的全面性方面,提出了能够自动化识别PR审查过程所涵盖审查点的模型。我们首先通过人工调研的方式构建了一个针对审查点的二级分类体系,进而,我们提出的两阶段混合分类模型在人工标注数据集的训练下,能够自动地识别审查评论所涉及到的审查点,以实时地展示一个PR都经受了哪些方面的审查。这种方法可以辅助审查者判断某个PR的贡献审查是否全面,以便做出更有针对性的审查评论。第三,在大众贡献审查的兼容性方面,我们提出了为大众贡献推荐跨项目的审查者。首先,我们利用Stack Overflow社区中用户的群体标记行为以及GitHub社区中贡献之间的引用关系构建了软件关联库。基于此关联库,我们推荐相关项目的核心开发者和活跃贡献者参与到该项目的贡献审查中,从而让审查者更广泛地了解来自各个利益相关方的意见,做出更能兼容各方需求的决定。