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

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


                    活跃性度量候选人在最近时间内的活跃程度,即,在最近时间 t thres 内,候选人参与过的代码评审的累计次数.
                 累计次数越高,代表该候选人在最近时间 t thres 内的表现越活跃.活跃性得分计算公式如公式(6)所示.
                                                ActiveScore = ∑  active @t thres                      (6)
                                                           i rR∈  w
                                                      ⎧ 1,  if Now t−  ≤ t <  Now
                                           active @t thres  = ⎨  thres  i                             (7)
                                                      ⎩ 0, f i t <  Now t−  thres
                                                           i
                 其中,Now 表示当前时间;active@t thres 表示该候选人在代码评审 r i 中添加评论的时间 t i 是否在时间范围 t thres 内,
                 时间范围 t thres 是方法的输入参数.
                 2.3   多目标优化方法
                    前面提到,MOC2R 方法需要优化 3 个目标.很显然,同时在所有目标上达到最优是很困难的.MOC2R 方法希
                 望获得帕累托边界(Pareto front)   [17] 上的一组解(solution),这组解能够支配其他解,也就是说比其他解优越.
                    MOC2R 使用 NSGA-II 算法(non-dominated sorting  genetic algorithm-II) [18] 优化前面提到的 3 个目标.
                 NSGA-II 是在软件工程和其他领域均被广泛使用的多目标优化方法                     [19−21] .根据 Harman 等人的研究 [22] ,有超过
                 65%的软件分析相关的优化技术是基于遗传算法(对于单目标优化)和 NSGA-II(对于多目标优化).
                    在我们的评审人推荐场景中,帕累托边界表示 NSGA-II 得到的在 3 个目标之间的最佳权衡.管理人员可以
                 通过检查帕累托边界发现最合适的权衡解.
                    MOC2R 的多目标优化方法包括以下 4 个步骤.
                    1)   表示.像其他选择问题一样         [23−25] ,我们将每个候选评审人编码为一个二进制变量.如果评审人被选中,
                        值为 1;否则,值为 0.MOC2R 得到的解是一个二进制变量的向量,向量的长度是所有的候选评审人.评
                        审人推荐问题的解空间是所有候选评审人是否被选中的组合.
                    2)   初始化.MOC2R 随机产生初始种群,也就是说,在解空间中随机选择 K 个解.根据 Harman                     [22] 的建议,我
                        们将 K 设置为 200.
                    3)   遗传算子.对于二进制编码的解的演化,我们使用标准遗传算子                     [26] .我们使用单点交叉、按位变异的方
                        式产生下一代.我们使用二进制比赛方式进行选择操作,也就是说,随机选择两个解进行交叉和变异,
                        然后选择适应性最强的两个解进入下一代.
                    4)   适应性函数.由于我们希望优化 3 个目标,每个候选解都用第 2.2 节描述的 3 个目标函数进行衡量.对
                        于每个目标,我们首先得到每个解中评审人的目标值,然后将该解中所有选中人员的目标值求和.

                 3    实验设计


                 3.1   研究问题
                    我们通过以下 3 个问题,从方法的性能、各个目标的作用、参数的影响这 3 个方面验证方法的效果.
                    •   RQ1:MOC2R 方法在评审人推荐方面的效果如何?
                    •   RQ2:MOC2R 方法的 3 个优化目标对于评审人推荐的贡献是怎样的?
                    •   RQ3:MOC2R 在不同参数下的敏感度如何?
                    本方法主要希望推荐可以快速响应的合适评审人,一个工作日内反馈对开发者和项目管理者都是非常有
                 益的 [15] ,所以对于方法中的响应时间窗ϕ,我们分别取 2h、4h、8h 进行实验,并给出对比结果和分析.
                 3.2   GroundTruth和基线方法
                    响应时间约束的代码评审人推荐的 GroundTruth 是基于历史代码评审活动中评审人的参与记录得到的.具
                 体来说:我们首先获取测试集中每个代码评审实际参与的评审人,并计算他们留下第 1 条评论的时间与该代码
                 评审创建时间之间的间隔.此时间间隔即为该评审人在本次评审中的响应时间.
                                                   [5]
                    本次实验中,我们选择了 ReviewFinder 和 IR+CN        [10] 两种代码评审人推荐算法作为基线.这两种算法均是
   48   49   50   51   52   53   54   55   56   57   58