Page 47 - 《软件学报》2021年第11期
P. 47

胡渊喆 等:响应时间约束的代码评审人推荐                                                            3373


                 recommendation problem is proposed with response time constraint, and then the code reviewer recommendation method (MOC2R) is
                 proposed based on multi-objective optimization by maximizing the experience of code reviewers, maximizing the response probability
                 within the time window, and maximizing the activity of staff within the latest time. The experiments are conducted based on data from six
                 open source projects, and the results show that under different time window constraints (2h, 4h, 8h), Top-1 accuracy rate is 41.7%~61.5%,
                 Top-5  accuracy rate is 66.5%~77.7%, significantly better than the  two  commonly used  and  industry-leading baseline  methods,  and all
                 three objectives contributed to the recommendation among which the response probability within the time window contributes the most.
                 The proposed method can further enhance code review efficiency, improve the activity of the open source community.
                 Key words:    code review; response time constrained; multi-objective optimization

                    同行代码评审,即对提交代码进行人工评审,已被证明是减少软件缺陷和提高软件质量的有效手段.近年
                                               [1]
                 来,现代代码评审(modern code review) ,一种轻量级的同行代码评审实践,已经被业界各公司(如微软、谷歌)和
                 各大开源社区广泛采用.例如,GitHub 提供了一个在线评审流程:项目的贡献者(contributor)可以通过添加新特
                 性或修复某些 bug 来对源代码进行一定程度的更改,但是更改不能直接提交给项目基线库,而是以合并请求
                 (pull request)的形式提交给社区.每一个合并请求的创建就代表需要进行一次代码评审(code review),每个贡献
                 者都可以是潜在的评审人员,可以在代码风格、新特性的必要性、代码逻辑的正确性等方面对该合并请求留下
                 评论(comment).最后,项目集成人员在综合考虑所有评审人员的意见后,做出是否接受合并的决定,以确保来自
                 贡献者的代码质量.该评审流程是 GitHub 社区 pull-based 软件开发模型的重要组成部分,确保了来自贡献者的
                 代码质量   [2,3] .
                    对于一些受欢迎的 GitHub 项目,贡献者数量常常会达到千人以上规模,并因此提交了大量的合并请求,然
                                              [3]
                 而大多数合并请求不能及时得到评审 .根据 Gousios 等人的调查结果,15%的贡献者抱怨合并请求没有在他们
                               [4]
                 预期时间内被处理 .进一步,Thongtanunam 等人的研究表明,没有找到合适代码评审人的合并请求比其他合并
                                        [5]
                 请求需要多 12d 才能被批准 .此外,在一个项目中有成百上千个候选评审人员,这更加剧了代码评审人推荐问
                 题的难度.因此,为了提高代码评审的质量和效率,迫切需要有效的评审人员推荐方法.
                    近年来,代码评审人推荐的研究备受关注.Balachandrany、Thongtanunam、Hannebauer 等人设计启发式规
                 则,基于历史提交和评审信息抽取得到的评审人修改经验和评审经验来进行人员推荐                              [5−7] ;Jeoung、Lipcak 等人
                 通过抽取代码修改内容等提取特征,使用机器学习和信息检索方法来推荐评审人员                              [8,9] ;Yu 等人基于开发者在
                 代码提交和评论中的交互,通过社会网络方法进行人员推荐                     [10] ;Xia 等人混合以上两种或多种方法,进一步优化
                 评审人推荐的效果      [11−13] .以上研究均以能否找到合适的评审人为目标,忽略了评审响应时间这个重要因素.评审
                 响应时间是指代码评审创建与评审人来参加评审(表现为在评审中留下评论)的时间间隔.
                    由于开源项目的社会自治性,实际的项目开发实践中,评审人的响应时间过长是制约项目进展和代码提交
                 者积极性的重要因素       [3,4,14] .当一次提交经过相当长的时间后依然没有收到任何回复信息,该提交的贡献者会有
                 更大的可能性脱离该项目贡献者团队.我们基于 6 个开源项目的数据统计发现,平均 15.3%~63.2%的合并请求
                 在 72h 内没有响应,平均 24%~68.4%的合并请求在 24h 内没有响应.已有的仅以寻找合适评审人为目标的代码
                 评审人推荐方法      [5−7,8−13] 并不能解决响应时间的问题.
                    为此,本文提出响应时间约束的代码评审人推荐问题,即推荐的评审人能否在约定时间内进行评审,目标是
                 推荐合适的代码评审人在更短的时间内完成代码评审,从而进一步提升代码评审的效能,促进开源社区参与人
                 员的积极性.“合适的代码评审人”是沿用已有研究                [5,8,10,11] 的说法,仅指该评审人是否进行代码评审,不考虑评审
                 的响应时间.
                    进一步,我们提出了基于多目标优化的代码评审人推荐算法(MOC2R).该方法通过最大化代码评审人经
                 验、最大化在约定时间内的响应概率、最大化人员最近时间内的活跃性这 3 个目标,使用多目标优化算法来推
                 荐代码评审人员.我们基于 6 个开源项目的数据进行实验验证,结果表明,在不同时间窗约束下(2h、4h、8h),Top-1
                 准确率为 41.7%~61.5%,Top-3 准确率为 58.4%~74.9%,Top-5 准确率为 66.5%~77.7%,MRR 为 0.53~ 0.58.与基线
                 方法相比,平均 Top-1 准确性提高了 81%~143%,平均 MRR 提升了 56%~97%.此外,我们还实验评估了每个目标
   42   43   44   45   46   47   48   49   50   51   52