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] 两种代码评审人推荐算法作为基线.这两种算法均是