克服偏差:软件演进过程中 Dockerfile 偏差的上下文感知修复
Taming the Drift: Context-aware Repair of Dockerfile Drift during Software Evolution
摘要
Docker 广泛用于创建可重现的构建环境,但 Dockerfile 漂移(Dockerfile 与其不断发展的源代码之间的差异)可能会导致 CI/CD 构建失败。现有的基于规则和基于检索的修复方法单独分析 Dockerfile,因此难以应对与上下文相关的故障。我们推出了 Cadre,一个用于自动化 Dockerfile 漂移修复的上下文感知框架。 Cadre 使用静态分析来构建上下文感知依赖关系图 (CDG),它将每个 Dockerfile 指令映射到其文件级和指令间依赖关系。在 CDG 的指导下,Cadre 首先选择与故障因果相关的上下文,然后从该上下文生成目标补丁。我们还介绍了 DodeX,这是一个从 GitHub Actions CI 日志中挖掘真实世界 Dockerfile 漂移实例的管道,同时保留静态快照数据集省略的完整构建配置。使用 DodeX,我们构建了 $D^3$,这是一个可使用原始 CI 参数在本地重现的 1,040 个漂移实例的基准。在 $D^3$ 范围内,Cadre 实现了 35.22% 的修复率,是基于规则的基线的 2.78$\times$,是基于最佳 LLM 基线的 1.24$\times$。其两步工作流程使 95.25\% 的提示低于 30k 词元,并避免提示溢出故障,从而阻止基于 LLM 的竞争方法在每个方法 41 到 58 个案例中生成补丁。消融结果证实 CDG 和两步工作流程均可提高修复性能。随着提交之间的漂移老化,Cadre 相对于仅差异方法的优势也随之增加,支持显式依赖关系建模以进行上下文感知的基础设施即代码维护。代码和数据可在 https://github.com/dw763j/Cadre 获取。