Page 54 - 《软件学报》2021年第11期
P. 54
3380 Journal of Software 软件学报 Vol.32, No.11, November 2021
业内领先的代码评审人推荐算法,并被很多研究所引用.
ReviewFinder 的主要思想是:假设大多数大型项目中,目录结构组织良好,具有相似文件路径的文件实现的
功能是相似的或紧密关联的.该方法通过计算文件相似度获得两次代码评审的相似度得分,对于一个新的代码
评审任务,计算每个历史评审的相似度得分,并将得分分配给参与过相应历史评审的候选人,候选人中按累积分
数高低推荐给新的代码评审任务.
IR+CN 是一个结合了信息检索和社交网络的混合推荐方法,一方面,该方法从历史评论记录中提取每一位
候选评审人的兴趣信息,对于一个新的代码评审,与这个代码评审发起者具有相同兴趣的评审人被认为是合适
的代码评审人;同时,结合信息检索算法对两个合并请求的相似度进行比较,得到最终的推荐结果.
3.3 实验数据采集和预处理
为了采集实验数据,我们在 GitHub 中综合考虑 Star 个数和合并请求个数,选择了 6 个开源项目,包括
facebook/react、tensorflow/tensorflow、twbs/bootstrap、ohmyzsh/ohmyzsh、flutter/flutter 和 electron/electron.这
6 个开源项目已关闭的合并请求个数均在 5 000 以上,平均每个项目获得了 5K+的 Watch、114.35K+的 Star 和
35.7K+的 Fork.其中,Watch 表示关注,只要项目发生变动,关注的人都会收到通知消息;Star 表示点赞,表示对项
目的支持和喜欢;Fork 表示创建项目代码库的分支,并拷贝到自己账号中.3 个指标从不同角度反映了项目的受
欢迎程度,值越大,说明项目越受欢迎.此外,这些开源项目中的每一个都得到了广泛的应用,并在各自的技术领
域发挥着重要的作用.我们通过 GitHub REST API v3(https://developer.github.com/v3/)抓取这 6 个开源项目的相
关数据.采集完成后数据信息见表 3.
Table 3 Data set
表 3 数据集
项目名称 合并请求 贡献者 开始时间 结束时间 文件个数 主要语言 Watch Star Fork
Facebook/react 8 361 1 348 2013/5/29 2019/8/1 1 646 JavaScript 6.3K 141K 27K
tensorflow/tensorflow 11 815 2 343 2015/11/9 2019/8/1 19 116 C++ 8.2K 139K 79K
twbs/bootstrap 9 603 1 103 2011/8/19 2019/9/16 457 JavaScript 7K 138K 67K
ohmyzsh/ohmyzsh 5 106 1 476 2010/8/31 2019/8/1 814 Zsh 2.5K 101K 18K
flutter/flutter 14 300 501 2015/11/10 2019/9/16 3 812 Dart 2.3K 82K 11K
electron/electron 8 618 907 2013/6/19 2019/9/16 1 762 C++ 2.6K 80K 10K
在本实验中,对收集到的合并请求进行了如下过滤.
a) 去掉了少于两个评审人员参与的合并请求.因为当一次代码评审过程中评审人数大于 2 次时,这次代
码评审才是可信的 [27,28] .
b) 按基线算法 IR+CN [10] 的数据要求,对合并请求中标题和描述信息进行了去除停留词和词干还原,并将
标题和描述信息中单词总数少于 5 个词的合并请求去掉.
和已有评审推荐方法 [5,12] 的实验设置类似,我们取各项目中最新的 1 000 个合并请求作为测试集,其他合并
请求作为训练集.
对于方法中的活跃性时间范围参数 t thres ,我们在训练集上采用十折交叉验证的方式,分别评估 t thres 为 1d、
3d、7d、15d、30d 的推荐效果,结果发现,t thres 为 3d 时,各个项目均能取得较好的效果.因此,时间范围参数 t thres
设置为 3d.
3.4 评价指标
为了评估我们的方法,我们使用时间窗约束的 Top-k 准确率和时间窗约束的平均倒数排名(mean reciprocal
rank,简称 MRR)这两个度量指标.这两个度量指标经常被应用于软件工程领域推荐系统的评估工作中 [6,22,29] .
1) 时间窗约束的 Top-k 准确率计算的是方法推荐的 Top-k 个评审人,至少一人在约定时间内出现在实际评
审人列表中的合并请求的个数和合并请求总个数的百分比.给出一系列能够在响应时间阈值ϕ内响应的合并请
求(PR@ϕ),时间窗约束的 Top-k 准确率可以根据公式(8)进行计算: