Inspectable Control for Structure-Preserving Software Regeneration
面向结构保持软件再生成的可检查控制方法
利用分层离散潜在表示实现可控的局部代码再生成。
- ITMO University, Saint Petersburg, Russian Federation
- AXXX, Moscow, Russian Federation
发表于 Proceedings of the 34th ACM International Conference on the Foundations of Software Engineering
贡献类型 潜在空间控制方法
第 1406–1407 页会议附属海报
英文作者定稿,包含最终作者名单与 DOI。该作者稿采用 CC BY 4.0;ACM DOI 页面仍为正式记录版本。
30 秒读懂论文
研究问题生成模型如何只修改程序的选定部分,同时保留指定的粗粒度结构?
问题
AI 辅助代码修改通常只需要完成一个有界改动,同时保持指定程序结构不变。重新生成整个程序可能扰动无关区域,而 token 级约束又缺少粗粒度控制界面。
方法
研究使用分层 VQ-VAE 编码 64-token 的 Python 函数,锁定选定的粗粒度离散代码,并通过掩码离散生成重生成其余潜在位置。
主要结果
锁定 4 个顶层代码后,解析通过率从 0.453 提升到 0.591;未锁定位置的改动率仍为 0.936,条件样本唯一性为 0.998。
研究意义
结果展示了可控代码编辑中的结构稳定性—编辑自由度权衡,并为可检查的潜在控制层提供初步证据;它并不证明语义等价或功能正确。
摘要
受约束修复、分阶段细化和结构保持修改等软件工程流程,需要明确控制哪些内容发生变化、哪些内容保持不变。逐 token 生成只能约束局部表面文本,难以表达软件工程中希望保留的粗粒度结构不变量。本文研究将分层离散潜变量作为一种可检查的软件工件中间表示:分层 VQ-VAE 将一个 64-token 的 Python 函数压缩为粗粒度与细粒度离散代码,掩码离散生成则在部分约束下仅重生成选定位置。在 2,000 个预处理 Python 函数上,锁定 4 个顶层代码将解析通过率从 0.453 提升到 0.591,同时未锁定位置仍保持较高改动自由度(0.936),样本唯一性接近最大值(0.998)。在固定粗粒度上下文时,低层细化较弱但呈单调变化,支持对该层次结构作由粗到细的解释。总体上,这些结果为一种位于 token 层之上的、可支持有界且保持结构的软件工件再生成控制层提供了初步证据。
方法
该方法先把短 Python 函数压缩为两层离散代码,冻结选定的粗粒度位置,再重生成其余位置并解码回源代码。
编码
使用分层 VQ-VAE,把一个 64-token 的 Python 函数压缩为 16 个顶层代码和 32 个低层代码。
锁定
选择表示待保留结构的粗粒度代码位置,例如覆盖函数签名区域的前缀。
重生成
仅在未锁定位置执行掩码离散生成,并把完成后的层次代码解码回源代码。
检查
在接受重生成结果前,检查解析通过率、结构代理指标、未锁定位置改动率和样本唯一性。
关键结果
| 设置 | 解析通过率 | 骨架保持率 | 签名保持率 | 未锁定位置改动率 |
|---|---|---|---|---|
| 截断输入 | 0.994 | 0.994 | 0.994 | — |
| 编解码器重构 | 0.857 | 0.848 | 0.493 | 0 |
| 无条件生成 | 0.453 | 0.08 | 0 | 0.995 |
| 条件生成,前缀 k=4 | 0.591 | 0.295 | 0.061 | 0.936 |
| 条件生成,签名区域 | 0.6 | 0.302 | 0.063 | 未报告 |
核心结论。锁定粗粒度潜在代码可以提高句法稳定性,同时不会使可编辑区域的改动消失。该结果表明存在结构控制能力,但不等同于功能等价保证。
- 数据集
- 来自 CodeParrot Clean 子集的 2,000 个预处理 Python 函数
- 样本量
- 2,000 个预处理 Python 函数;条件样本唯一性为 0.998。
- 指标
- 解析通过率;骨架与签名保持代理指标;未锁定位置改动率;样本唯一性与熵
- 不确定性
- 这项两页研究仅报告点估计,未提供置信区间或多随机种子统计分析。
- 实验条件
- 64-token 函数、argmax 解码、16 个顶层代码和 32 个低层代码;全部锁定时恰好恢复编解码器重构结果。
常见问题
以下回答均以论文报告的实验为依据;更严格的证据边界见“局限性”。
AI 如何在不重写整个程序的情况下编辑代码?
论文研究 token 层之上的局部代码再生成。分层 VQ-VAE 把短 Python 函数映射为粗粒度和细粒度离散代码;选定的粗粒度位置被锁定,掩码离散生成只改变其余潜在位置,然后再解码。这提供了明确的保持边界,而不是重新生成整个函数。
哪些方法可以在代码生成时保留程序结构?
本文测试分层离散潜在控制:固定粗粒度潜在位置,重生成未锁定位置,再测量解析通过率和结构代理指标。证据只涉及短 Python 函数上的概率性结构稳定性,并未证明精确 AST 保持、语义等价或功能正确。
分层离散潜变量能否实现局部代码控制?
在 2,000 个函数的实验中,锁定 4 个顶层代码把解析通过率从 0.453 提升到 0.591;与此同时,未锁定位置的改动率为 0.936,条件样本唯一性为 0.998。这是粗粒度潜在约束能够在保留部分结构的同时维持局部编辑自由度和样本多样性的初步证据。
代码生成如何平衡结构稳定性与多样性?
论文同时评估稳定性和自由度,而不是只优化有效性。锁定粗粒度代码后,句法有效性提高,未锁定位置仍有较高改动率,条件样本也几乎全部唯一。这说明在当前配置下存在可测量的稳定性—自由度权衡,但并不意味着找到了普适最优点。
这项工作与 LLM 辅助代码编辑有什么关系?
实验模型是带掩码离散生成的分层 VQ-VAE,而不是大语言模型。不过,避免请求区域之外的无关改动也是 LLM 辅助编辑中的实际问题。本文贡献的是互补的潜在空间控制机制和评估框架,而不是 LLM 编辑基准。
何时引用本文
当研究需要明确控制 AI 辅助代码变换可以修改什么、哪些程序结构应保持稳定时,可以引用本文。
可控且保持结构的代码生成
局部程序修复与有界重构
面向源代码的分层离散表示
用于源代码的掩码离散生成
软件工件的潜在空间控制
局限性
- 研究仅覆盖截断到 64 个 token 的短 Python 函数。
- 评估使用 argmax 解码以及句法或结构代理指标,而不是功能等价测试。
- 精确的函数签名保持能力仍然较弱。
- 低层控制弱于顶层控制。
- 潜在位置尚未与 AST 区域、函数签名或控制流结构等语义区域对齐。
- 现有结果不能证明该方法适用于实际程序修复、重构或仓库级修改的正确性。
学术元数据与引用
引用记录保持正式英文题名、原始作者姓名与顺序、正式会议名称、DOI,并指向英文 PDF。
@inproceedings{Gavrilov2026InspectableControl,
title = {Inspectable Control for Structure-Preserving Software Regeneration},
author = {Gavrilov, Alexey and Gazzaev, Alan-Barsag and Mozikov, Mikhail and Makarov, Ilya and Muravyov, Sergey},
booktitle = {Proceedings of the 34th ACM International Conference on the Foundations of Software Engineering},
publisher = {ACM},
year = {2026},
pages = {1406--1407},
doi = {10.1145/3803437.3807386},
url = {https://doi.org/10.1145/3803437.3807386},
isbn = {979-8-4007-2636-1},
}