中文

识别 Make 与面向 JVM 构建中的缺陷

软件工程 2023-12-05 v1

摘要

增量构建与并行构建是现代构建系统的关键特性。并行性通过同时运行独立任务来实现快速构建,而增量性则通过处理受特定代码变更影响的构建操作来节省时间与计算资源。编写能够产生无错误的增量与并行构建的构建定义是一项具有挑战性的任务。这主要是因为开发者往往无法预测构建操作对文件系统的影响,以及不同构建操作之间如何相互作用。有缺陷的构建脚本会严重降低自动化构建的可靠性,因为它们会导致构建失败,以及非确定性和不正确的构建结果。为了对任意构建执行进行推理,我们提出 buildfs——一个普遍适用的模型,该模型考虑了构建操作的定义(如构建脚本中所声明)与实际行为(底层文件系统操作)。随后,我们根据文件系统操作违反构建操作定义的条件,正式定义了与增量及并行构建相关的各类故障。我们依赖所提模型的测试方法,分析单次完整构建的执行,将其转换为 buildfs,并通过检查相应的违规来发现故障。我们通过检查数百个 Make 和 Gradle 项目来评估方法的有效性、效率与适用性。值得注意的是,我们的方法是首个处理面向 Java 的构建系统的方法。结果表明,我们的方法(1)能够发现若干重要问题(在 45 个开源项目中发现的 245 个问题已被上游开发者确认并修复),且(2)比针对 Make 构建的最先进工具快数个数量级。

关键词

引用

@article{arxiv.2005.06881,
  title  = {Identifying Bugs in Make and JVM-Oriented Builds},
  author = {Thodoris Sotiropoulos and Stefanos Chaliasos and Dimitris Mitropoulos and Diomidis Spinellis},
  journal= {arXiv preprint arXiv:2005.06881},
  year   = {2023}
}