你的依赖经过代码审查了吗?:度量依赖更新中的代码审查覆盖率
软件工程
2022-11-08 v2
摘要
由于现代软件广泛使用免费开源包作为依赖,开发者必须通过频繁的更新定期引入新的第三方代码。然而,如果不对每一处引入的更改进行适当的审查,脆弱和恶意的代码可能会通过这些依赖潜入代码库。本研究的目的是通过度量更新中的代码更改是否经过了代码审查过程,来帮助开发者安全地接受依赖更新。我们实现了 Depdive,一个用于 Crates.io、npm、PyPI 和 RubyGems 注册表中包的更新审计工具。Depdive 首先 (i) 识别更新中无法追溯至包源代码仓库的文件和代码更改,即 \textit{幽灵制品};然后 (ii) 度量排除幽灵制品后,更新中有多少比例的更改通过了代码审查过程,即 \textit{代码审查覆盖率}。使用 Depdive,我们对四个注册表中下载量最高的 1000 个包的最新十次更新进行了实证研究。我们进一步通过维护者同意调查评估了我们的结果。我们发现更新通常只被部分代码审查(52.5\% 的情况下)。此外,只有 9.0\% 的包在我们数据集中的所有更新都被完全代码审查,这表明即使是最常用的包也可能在软件供应链中引入未经审查的代码。我们还观察到,更新往往要么具有高 \textit{CRC},要么具有低 \textit{CRC},这表明处于频谱两端的包可能需要一套单独的处理方法。
引用
@article{arxiv.2206.09422,
title = {Are your dependencies code reviewed?: Measuring code review coverage in dependency updates},
author = {Nasif Imtiaz and Laurie Williams},
journal= {arXiv preprint arXiv:2206.09422},
year = {2022}
}