AlphaTrans: A Neuro-Symbolic Compositional Approach for Repository-Level Code Translation and Validation

📄 arXiv: 2410.24117v5 📥 PDF

作者: Ali Reza Ibrahimzada, Kaiyao Ke, Mrigank Pawagi, Muhammad Salman Abid, Rangeet Pan, Saurabh Sinha, Reyhaneh Jabbarvand

分类: cs.SE, cs.LG

发布日期: 2024-10-31 (更新: 2025-06-19)

备注: Published in FSE 2025

DOI: 10.1145/3729379


💡 一句话要点

AlphaTrans:一种神经符号组合方法,用于仓库级代码翻译与验证

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码翻译 神经符号方法 大型语言模型 程序分析 代码验证 软件工程 自动化 代码仓库

📋 核心要点

  1. 现有代码翻译方法难以应对真实世界项目的复杂性,大型语言模型在处理依赖关系、自定义类型和特定语言特性时表现不佳。
  2. AlphaTrans采用神经符号方法,结合程序分析和大型语言模型,将程序分解为片段并以逆序翻译,从而降低翻译难度。
  3. AlphaTrans在十个真实开源项目上进行了评估,实现了较高的语法正确率,并验证了部分片段的运行时行为和功能正确性。

📝 摘要(中文)

代码翻译是将程序从一种编程语言(PL)转换为另一种编程语言的过程。已经设计了几种基于规则的转换编译器来自动执行不同编程语言对之间的代码翻译。然而,随着编程语言的发展,这些规则可能会过时,并且无法推广到其他编程语言。最近的研究探索了使用大型语言模型(LLM)自动进行代码翻译。一个关键的观察结果是,这些技术可能在精心设计的基准测试中表现良好,但无法推广到具有依赖项、自定义类型、编程语言特定功能等的真实世界项目的规模和复杂性。我们提出了AlphaTrans,一种神经符号方法,用于自动进行仓库级代码翻译。AlphaTrans翻译源代码和测试代码,并采用多级验证来确保翻译保留源程序的功能。为了分解大型语言模型的问题,AlphaTrans利用程序分析将程序分解为片段,并以相反的调用顺序翻译它们。我们利用AlphaTrans翻译了十个真实的开源项目,这些项目包含<836, 8575, 2719>个类、方法和测试。AlphaTrans将这些项目分解为17874个片段,并翻译整个仓库。96.40%的翻译片段在语法上是正确的,AlphaTrans验证了27.03%和25.14%的片段的运行时行为和功能正确性。平均而言,集成的翻译和验证需要34小时来翻译一个项目,这表明了它在实践中的可扩展性。对于不正确的翻译,AlphaTrans生成一份报告,包括现有的翻译、堆栈跟踪、测试错误或断言失败。我们向两位开发人员提供了这些工件,以修复四个项目中的翻译错误。他们平均能够在20.1小时内修复这些问题,并使所有测试通过。

🔬 方法详解

问题定义:论文旨在解决将大型、复杂的真实世界代码仓库从一种编程语言自动翻译到另一种编程语言的问题。现有方法,如基于规则的转换编译器,难以维护和推广到新的编程语言。而直接使用大型语言模型进行翻译,在处理真实项目中的依赖关系、自定义类型和语言特性时,效果不佳。

核心思路:论文的核心思路是将大型代码翻译问题分解为更小的、更易于管理的部分,并利用程序分析来指导翻译过程。通过将程序分解为片段并以逆序翻译,可以减少依赖关系带来的复杂性,并提高翻译的准确性。同时,采用神经符号方法,结合大型语言模型的生成能力和符号验证的可靠性。

技术框架:AlphaTrans的技术框架主要包括以下几个阶段:1) 程序分析:将代码仓库分解为更小的代码片段,并分析它们之间的依赖关系。2) 翻译:使用大型语言模型将每个代码片段从源语言翻译到目标语言,按照逆向调用顺序进行翻译。3) 验证:对翻译后的代码进行多层次的验证,包括语法正确性检查、运行时行为验证和功能正确性验证。4) 错误报告:对于翻译不正确的代码片段,生成详细的错误报告,包括翻译结果、堆栈跟踪和测试错误信息。

关键创新:AlphaTrans的关键创新在于其神经符号组合方法,它将程序分析、大型语言模型和多层次验证相结合,从而能够有效地翻译大型、复杂的代码仓库。与现有方法相比,AlphaTrans能够更好地处理依赖关系、自定义类型和语言特性,并提供更可靠的翻译结果。

关键设计:AlphaTrans的关键设计包括:1) 代码片段的划分策略,需要平衡片段的大小和依赖关系的复杂性。2) 翻译顺序的选择,逆向调用顺序可以减少依赖关系带来的影响。3) 多层次验证的实现,包括静态分析、动态测试和形式化验证等方法。4) 错误报告的生成,需要提供足够的信息来帮助开发人员修复翻译错误。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

AlphaTrans在十个真实世界的开源项目上进行了评估,这些项目包含超过83万行代码。实验结果表明,AlphaTrans能够以96.40%的语法正确率翻译代码片段,并验证了27.03%的片段的运行时行为和25.14%的片段的功能正确性。整个仓库的翻译平均耗时34小时,展示了其良好的可扩展性。开发者利用AlphaTrans生成的错误报告,平均花费20.1小时即可修复翻译错误并使所有测试通过。

🎯 应用场景

AlphaTrans具有广泛的应用前景,可以用于遗留系统的现代化改造、跨平台应用开发和多语言软件开发等领域。通过自动将代码从一种语言翻译到另一种语言,可以降低开发成本、提高开发效率,并促进不同技术栈之间的互操作性。该研究的成果对于推动软件工程领域的自动化和智能化具有重要意义。

📄 摘要(原文)

Code translation transforms programs from one programming language (PL) to another. Several rule-based transpilers have been designed to automate code translation between different pairs of PLs. However, the rules can become obsolete as the PLs evolve and cannot generalize to other PLs. Recent studies have explored the automation of code translation using Large Language Models (LLMs). One key observation is that such techniques may work well for crafted benchmarks but fail to generalize to the scale and complexity of real-world projects with dependencies, custom types, PL-specific features, etc. We propose AlphaTrans, a neuro-symbolic approach to automate repository-level code translation. AlphaTrans translates both source and test code, and employs multiple levels of validation to ensure the translation preserves the functionality of the source program. To break down the problem for LLMs, AlphaTrans leverages program analysis to decompose the program into fragments and translates them in the reverse call order. We leveraged AlphaTrans to translate ten real-world open-source projects consisting of <836, 8575, 2719> classes, methods, and tests. AlphaTrans breaks down these projects into 17874 fragments and translates the entire repository. 96.40% of the translated fragments are syntactically correct, and AlphaTrans validates the translations' runtime behavior and functional correctness for 27.03% and 25.14% of fragments. On average, the integrated translation and validation take 34 hours to translate a project, showing its scalability in practice. For the incorrect translations, AlphaTrans generates a report including existing translation, stack trace, test errors, or assertion failures. We provided these artifacts to two developers to fix the translation bugs in four projects. They were able to fix the issues in 20.1 hours on average and achieve all passing tests.