[Paper] 从重构到稳定化:使用大语言模型进行迭代代码可读性重构的大规模实验
发布: (2026年2月25日 GMT+8 20:05)
7 分钟阅读
原文: arXiv
Source: arXiv - 2602.21833v1
概述
本文研究了如何利用大型语言模型(LLM)自动重构 Java 代码以提升可读性。通过在 230 个代码片段上使用 GPT‑5.1 进行大规模、多轮实验,作者揭示了 LLM 驱动的重构如何从混乱的重组演变为稳定的“最佳可读”形式。
关键贡献
- 大规模实证研究:使用最先进的 LLM(GPT‑5.1)对迭代的可读性聚焦重构进行研究。
- 三阶段分类法:对代码变更(实现层面、语法层面、注释层面)进行分类,捕捉重构过程中的细粒度转变。
- 发现收敛模式:早期迭代积极重构代码,后期迭代趋于稳定,形成一致且可读的版本。
- 证据表明 收敛在不同代码变体之间具有鲁棒性,且仅受到提示风格的轻微影响。
- 开放数据集与实验流水线,供其他研究者和工具开发者用于对比研究。
方法论
- 代码片段选择与变体 – 从开源项目收集了 230 个 Java 代码片段。每个代码片段都会自动变异,生成多个“变体”(例如,重命名变量、重新排序语句),用于测试鲁棒性。
- 提示策略 – 对比了三种提示设计:
- 基线:“重构此代码以提高可读性。”
- 因素特定:“改进命名和注释。”
- 迭代:“再次应用之前的重构。”
- 迭代重构循环 – 对每个代码片段变体,连续调用 LLM 五次,并将前一次的输出作为输入反馈。
- 变更分类 – 作者对连续版本进行差异比较,并将编辑标记为:
- 实现层面(逻辑重构、方法抽取)
- 语法层面(格式、空白、顺序)
- 注释层面(添加/修改文档)。
- 正确性检查 – 在每次迭代后运行随代码片段提供的单元测试,以确保功能行为保持不变。
- 泛化测试 – 对一组未见过的“新颖”代码片段进行处理,以检验观察到的模式是否在训练数据之外仍然成立。
结果与发现
| 观察 | 数据显示 |
|---|---|
| 重构 → 稳定 | 前 2‑3 次迭代产生了大量且常常具有破坏性的编辑(例如方法抽取、变量重命名)。到第 4‑5 次迭代时,改动缩小为轻微的格式或注释微调,表明趋于收敛。 |
| 不同变体的一致性 | 即使输入代码被大量扰动,LLM 仍遵循相同的收敛曲线,暗示存在内部的“可读性最优”。 |
| 提示影响 | 明确要求特定的可读性因素会促使 LLM 进行更多注释层面的编辑,但并未显著改变整体收敛时间线。 |
| 功能安全性 | 超过 96 % 的重构代码片段在每次迭代后仍通过原始单元测试,表明可读性提升很少破坏功能。 |
| 对新代码的鲁棒性 | 在未见过的代码片段上出现相同的收敛模式,进一步证明该行为是模型整体的,而非特定数据集的。 |
实际影响
- 工具信心 – 开发者可以将基于 LLM 的重构助手集成到 CI 流水线中,确信经过几次迭代后模型会收敛到一个稳定、可读的版本,而不会反复破坏代码。
- 迭代工作流 – 与一次性“运行即完成”的重构不同,迭代 方法(例如 3‑4 次遍历)能够产生更好、更可预测的结果。
- 提示设计指南 – 简单的“让代码更易读”提示效果良好;添加显式因素只会对结果进行微调,因此团队可以保持提示的轻量化。
- 质量门 – 由于功能正确性基本保持不变,团队可以加入一个“可读性收敛”门,当模型的改动幅度低于某个阈值时即停止。
- 跨模型基准测试 – 已发布的数据集使开发者能够在相同的可读性任务上比较不同 LLM(Claude、Gemini 等),帮助选择最具性价比的模型来适配自己的技术栈。
限制与未来工作
- 模型特异性 – 实验仅限于 GPT‑5.1;其他架构可能表现出不同的收敛速度或质量。
- 语言范围 – 仅检查了 Java 代码片段;结果可能无法直接迁移到动态类型语言或具有不同惯用法的语言(例如 Python、JavaScript)。
- 可读性度量 – 本研究依赖人工解释的可读性提升;未来工作可以整合客观度量(例如圈复杂度、Halstead 指标)来量化收益。
- 长期维护 – LLM 重构代码对未来手动编辑或下游工具(静态分析、代码审查机器人)的影响仍是未解之谜。
结论:研究表明,LLM 能够通过几次迭代可靠地“清理”代码,为开发团队提供一种实用、低风险的方式来提升可读性,同时不牺牲正确性。
作者
- Norman Peitek
- Julia Hess
- Sven Apel
论文信息
- arXiv ID: 2602.21833v1
- 分类: cs.SE
- 发布时间: 2026年2月25日
- PDF: 下载 PDF