先到先得:文件位置对代码审查的影响

Fregnan, Braz, Çalikli, D'Ambros, Bacchelli - 2022

核心问题:排序的“隐形之手”

主流代码审查工具(如 GitHub 和 Gerrit)普遍按字母顺序对需要审查的文件进行排序。 [1] 研究者们提出了一个关键问题:这种看似无害的默认设置,或者更广泛地说,文件在列表中的相对位置,是否会影响代码审查的最终结果? [1] 本研究假设,由于注意力衰减工作记忆耗尽等认知因素,开发者可能会对列表中靠后的文件投入更少的精力。 [2]

研究方法:双管齐下

为了验证假设,研究采用了互补的双重证据 triangulation 方法。

第一步:观察性研究

分析了 138个 流行的Java项目中的 219,476个 拉取请求(Pull Requests)。 [1] 研究人员量化了文件的相对位置与它收到的审查评论数量之间的关系,同时控制了代码行数等混杂变量。 [6]

第二步:受控实验

招募了 106名 开发者参与一个在线实验。 [1] 参与者审查一个包含5个文件的代码变更,其中研究者预先植入了两个不同的缺陷(“边角案例”和“缺失Break”)。 [4] 通过调换这两个缺陷文件在列表中的位置(一个在最前,一个在最后),来衡量文件位置对缺陷检出率的影响。 [4, 5]

核心发现:位置确实重要

研究结果为“文件位置影响审查结果”这一假说提供了有力证据。请点击下方卡片查看详细发现。

发现 1: 评论数量递减

事实: 在拉取请求中,位置越靠后的文件,收到的审查评论越少。 [6] 这种负相关关系在统计上非常显著,即使在排除了代码大小、是否为测试文件等因素的干扰后依然存在。 [7]

发现 2: 缺陷检出率受影响

事实: 文件位置对缺陷发现有显著影响,但并非对所有类型的缺陷都有效。对于“边角案例”缺陷,当其所在文件被置于列表最后时,开发者发现它的几率比文件在最前低了64%。 [1, 8] 然而,对于“缺失Break”这个更易于模式识别的缺陷,位置效应则不明显。 [8]

发现 3: 注意力显著差异

事实: 实验数据表明,参与者花在第一个文件上的平均审查时间为 8.58分钟,而花在最后一个文件上的时间仅为 6.09分钟。 [9] 这种时间投入上的差异具有统计学意义。

发现 4: 认知与现实脱节

事实: 尽管数据显示了位置的显著影响,但超过 72% 的参与者在事后问卷中认为文件位置并不会影响他们发现缺陷的能力。 [8] 这揭示了开发者在代码审查中对其自身认知偏见的感知与实际行为之间存在偏差。 [11]

结论与启示:重新思考审查工具设计

观点: 当前代码审查工具普遍采用的按字母排序文件的方式存在缺陷,因为它会无意中引入认知偏差,可能导致审查不充分。 [10]

研究者建议,未来的工具可以采用更智能的排序策略来支持审查者,例如:

注:[INDEX] 格式的引用编号对应于原始论文中的章节或发现。

原文

源链接