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

3374                                Journal of Software  软件学报 Vol.32, No.11, November 2021

                 对于评审人推荐的贡献,发现 3 个目标缺一不可,其中,约定时间内的响应概率目标对于人员推荐的贡献最大.
                    本文贡献在于:
                    1)   我们基于真实开源项目数据分析了当前代码评审响应时间的现状,提出了响应时间约束的代码评审
                        人推荐问题.
                    2)   我们提出了基于多目标优化的代码评审人推荐算法,可以最大化代码评审人经验、最大化在约定时
                        间内的响应概率、最大化人员最近时间内的活跃性.
                    3)   我们在 GitHub 的 6 个大型项目评估了方法的效果,并得到了很好结果.
                    本文第 1 节进行问题分析.第 2 节提出基于多目标优化的代码评审人推荐算法.第 3 节和第 4 节给出相关
                 实验的设计方法和实验结果分析.第 5 节作进一步讨论.第 6 节回顾代码评审人推荐的相关研究工作.最后,在第
                 7 节进行总结.

                 1    问题分析
                    本节基于真实的开源项目数据,分析当前代码评审响应时间的现状以及代码评审的人员属性.

                 1.1   合并请求响应时间分析
                    我们基于 GitHubd 的 6 个流行的开源项目(详见第 3.3 节),对历史合并请求的响应时间进行了统计,结果见
                 表 1.
                                               Table 1  Pull request response time
                                                  表 1   合并请求响应时间
                                         响应时间      响应时间      响应时间      响应时间      响应时间      响应时间
                            Project
                                          大于 2h     大于 4h     大于 8h    大于 16h    大于 24h    大于 72h
                          Facebook/react  58.9%     51.7%     44.2%     35.4%     29.8%     20.2%
                        tensorflow/tensorflow  79.8%  72.8%   63.8%     52.7%     46.3%     32.1%
                          twbs/bootstrap  78.9%     68.5%     56.5%     44.4%     40.0%     26.8%
                         ohmyzsh/ohmyzsh  89.6%     85.9%     81.5%     75.8%     68.4%     63.2%
                          flutter/flutter  48.0%    42.3%     37.0%     30.4%     24.0%     15.3%
                         electron/electron  77.8%   69.8%     58.3%     44.0%     36.9%     20.7%
                    6 个项目中,平均有 15.3%~63.2%的合并请求在 72h 内没有响应,24%~68.4%的合并请求在 24h 内没有响应.
                 其中,flutter/flutter 是合并请求响应时间最快的项目,有 52%的合并请求在 2h 内得到响应.而 ohmyzsh/ohmyzsh
                 是合并请求响应时间最慢的项目,超过 60%的合并请求在 24h 内不能得到回复.进一步地,我们统计了
                 flutter/flutter 和 ohmyzsh/ohmyzsh 两个项目在 2015 年~2019 年中每年 3 月 1 日的文件个数(NOF)和代码行数
                 (LOC),见表 2.flutter/flutter 代码规模增长速度明显领先于 ohmyzsh/ohmyzsh.其在 2018 年 3 月~2019 年 3 月代
                 码规模增长了近 1 倍(33 万行代码增长至近 60 万行代码),而 ohmyzsh/ohmyzsh 在 5 年时间内代码规模增长不
                 足 1 倍(1.7 万行增长至 2.9 万行).
                                            Table 2    Code size in flutter and ohmyzsh
                                               表 2   Flutter 与 ohmyzsh 代码规模
                                        2015.3      2016.3      2017.3       2018.3       2019.3
                           Project
                                      NOF  LOC   NOF   LOC   NOF    LOC   NOF    LOC   NOF   LOC
                         flutter/flutter   30   5 508   598  93 921  1 105  197 776  1 572  331 626  2235   599 059
                        ohmyzsh/ohmyzsh   244   17 518   283  21 676  356   25 881  381   26 591  476   29 566
                    根据谷歌工程实践文档,代码评审最长需要在一个工作日进行反馈                        [15] .以上数据和分析说明,在开源社区的
                 代码评审实践中,存在很多的合并请求不能及时得到响应的情况.这种情况存在的原因有很多,例如,由于每日
                 提交的合并请求数量过多,导致部分请求难以得到及时处理                     [16] ,像 flutter/flutter 项目平均每周接收到 85 个合并
                 请求;再如,由于不知道谁是合适的代码评审人,使得合并请求停留在评审人分派阶段,没有在预期的时间内处
                  [5]
                 理 ;或者即使已经分派给某个代码评审人后,由于不合适的分派导致的评审时间过长,例如评审人经验不匹
   43   44   45   46   47   48   49   50   51   52   53