Specification-Based Code-Text-Code Reengineering for LLM-Mediated Software Evolution
本文提出了一种基于规范的 Code2Text2Code 重构框架,通过将源代码转换为中立的文本规范以进行迭代验证,随后再生成目标代码,从而减轻大语言模型介导的软件演进中的语义漂移和行为不一致问题。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正试图将一份来自 20 世纪 50 年代乌克兰祖父母厨房的复杂手写食谱,翻译成 2024 年智能烤箱现代数字食谱应用中的格式。
如果你只是让翻译者(人工智能)“把这份旧食谱变成新食谱”,他们可能会译对文字,却搞砸了烹饪。他们可能会在需要“数字传感器”的新烤箱中保留“木勺”的指令,或者不小心添加原食谱中不存在的“秘密配料”。结果看起来像食谱,却可能把你的蛋糕烤焦。
本文提出了一种更聪明的翻译方法,不仅适用于食谱,也适用于计算机软件。他们称之为代码–文本–代码重构。
以下是其工作原理,分解为简单步骤:
1. 问题:“直接翻译”的陷阱
通常,当人们使用人工智能将软件从一种语言转换为另一种语言(例如从 Python 迁移到 Java)时,他们进行的是代码到代码的翻译。
- 风险:人工智能可能会复制旧代码的风格,而非其含义。这就像逐字翻译一首诗而丢失了情感。新代码看起来可能正确,但行为却不同,或者可能遗漏旧代码所依赖的隐藏规则。
2. 解决方案:“中立翻译者”(中间人)
作者没有直接从旧代码跳到新代码,而是插入了一个中间步骤:中立文本规范。
这可以想象成一份详细的、纯英文的蓝图,它描述软件做什么,而不提及它是如何在旧语言中构建的。
- 步骤 1(代码到文本):人工智能读取旧代码并撰写中立描述。它会说:“此函数接收一个数字列表,将它们相加,并将结果保存到数据库。”它忽略了旧代码中使用的特定编程技巧。
- 步骤 2(检查):人类或其他工具检查此描述,确保其与原始内容完全匹配。我们是否遗漏了某一步?是否凭空创造了一个新步骤?
- 步骤 3(文本到代码):人工智能阅读这份干净、中立的描述,并用目标语言编写新代码。由于人工智能不再查看旧代码,它就不会无意中复制旧风格。它会严格按照蓝图描述构建新代码。
3. “安全网”工具
本文指出,这不仅仅是撰写文本,而是围绕该过程构建一个安全系统:
- “事实核查员”(检索):在人工智能撰写任何内容之前,它会在文档、图表和代码片段的库中查找事实,以确保它不是在猜测。这就像厨师在加盐之前查阅食谱。
- “分块”策略:你不能一口吞下整本图书馆的书。系统将代码分解为小的、逻辑性的“块”(像章节一样),这样人工智能就不会感到困惑或遗漏关联。
- “蓝图”(图与本体):系统构建一张地图(图),显示软件不同部分之间的连接方式。如果旧软件在两个岛屿之间有一座桥,新软件也必须拥有这座相同的桥。这张地图有助于衡量翻译是否成功。
4. 衡量成功:我们是否丢失了什么?
你怎么知道新软件与旧软件相同?作者创建了一个**“损耗计算器”**。
想象一下,你正将家具从老房子搬到新房子。
- 结构保留:你是否搬走了所有房间?(是/否)
- 接口稳定性:你还能以同样的方式打开前门吗?(是/否)
- 总体相似度:一个分数,告诉你原始“房子”在搬迁中保留了多少。
5. 他们的发现
研究人员在多种类型的代码(SQL 数据库、Web 脚本、通用编程)上测试了这种方法。
- 结果:使用“中立文本”作为中间人,比直接翻译代码效果更好。它减少了错误,并使新代码的行为更符合原始意图。
- 局限:有时,人工智能需要人类介入,以澄清旧代码中令人困惑的部分。它尚未完全自动化;这是一个“人在回路”的过程。
大局观
本文认为,我们不应将软件更新视为简单的“复制 - 粘贴”工作。相反,我们应将其视为重构。
- 旧方式:“这是旧代码;给我新代码。”(风险高,不透明)。
- 新方式:“这是旧代码。首先,用通俗易懂的英语解释它的功能。检查该解释。然后,基于该解释构建新代码。”(安全、透明且可控)。
简而言之,他们正在教导人工智能停止翻译文字,开始翻译含义,利用清晰、中立的蓝图,确保在转换过程中没有任何东西丢失。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。