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)进行计算:
   49   50   51   52   53   54   55   56   57   58   59