一句话:提出 MDfixer,通过识别 Makefile 的依赖声明风格并生成同风格补丁,自动修复缺失构建依赖错误。
许多构建系统(如 Make)依赖用户编写的构建脚本声明依赖,而 Makefile 中的缺失依赖(Missing Dependencies, MDs)会导致增量构建编译或链接过时产物,阻碍项目更新。已有研究多关注 MD 检测,自动修复仍具挑战,原因在于 Makefile 语义复杂且项目维护者声明依赖的方式多样。本文提出 MDfixer:根据错误报告定位出错目标的依赖声明,为每个出错构建目标构建声明图,并基于目标与依赖之间的距离度量识别其声明风格;随后结合声明图与自动提示生成,为需补充的依赖生成同风格补丁。作者在 35 个知名项目上评估,结果显示 MDfixer 能修复所有 MDs;向 17 个项目提交了 2,786 个依赖问题修复,其中 11 个项目合并了 pull request,共修复 2,099 个错误;修复一个项目平均耗时 3.31 分钟,中位数为 62.999 秒。
Many build systems, such as Make, rely on build scripts that are written by users to specify dependencies. As a serious dependency error in Makefiles, Missing Dependencies (MDs) can result in compiling and linking outdated artifacts in incremental builds, preventing software project updates from being applied correctly. Many studies have explored the detection of MDs. Automatically fixing those missing build dependency errors has become an apparent but challenging task. The challenges mainly result from Makefiles having complex semantics and project maintainers declaring dependencies in a variety of ways. To address these challenges, we propose a new approach to fixing MDs called MDfixer. The core idea of MDfixer is to identify the dependency declaration style in a Makefile and generate patches for the same declaration style based on declaration graphs and automatic prompt generation. Specifically, MDfixer locates dependency declarations for targets that have errors in the Makefile based on error reports, and then builds a declaration graph for each build target with errors and identifies the target’s declaration style based on a distance metric between the target and the dependencies. Based on the declaration graph and automatic prompt generation, MDfixer generates patches with the same style for the dependencies that need to be added. We evaluated the effectiveness and efficiency of MDfixer with 35 well-known projects. The evaluation results show that MDfixer can fix all MDs. We submitted fixes for 2,786 individual dependency issues across 17 projects, with 11 of them merging our pull requests, resulting in a total of 2,099 errors being fixed. MDfixer consumes an average time of 3.31 min for fixing a project, with a median of 62.999s. It can assist practitioners in the effective and efficient fixing of MDs.
DOI 原文 ·
@inproceedings{paperbot9233,
title = {Automatic Fixing of Missing Dependency Errors},
author = {Jun Lyu and He Zhang and Lanxin Yang and Yue Li and Chenxing Zhong and Manuel Rigger},
booktitle = {ASE},
year = {2025},
doi = {10.1109/ase63991.2025.00056}
}