Automated Testing of COBOL to Java Transformation
作者: Sandeep Hans, Atul Kumar, Toshikai Yasue, Kouichi Ono, Saravanan Krishnan, Devika Sondhi, Fumiko Satoh, Gerald Mitchell, Sachin Kumar, Diptikalyan Saha
分类: cs.SE, cs.AI
发布日期: 2025-04-14
💡 一句话要点
提出COBOL到Java转换的自动化测试框架,解决LLM转换代码的验证难题
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: COBOL到Java转换 自动化测试 符号执行 单元测试 代码迁移
📋 核心要点
- 基于LLM的代码转换结果无法保证正确性,手动验证耗时且成本高昂,亟需自动化测试方案。
- 该框架利用符号执行技术为COBOL代码生成单元测试,并转换为JUnit测试,以验证与转换后的Java代码的语义等效性。
- 该框架能够识别并修复转换差异,并为AI模型提供反馈,从而提升代码转换的质量。
📝 摘要(中文)
大型语言模型(LLM)在生成式AI技术的最新进展,使得将企业级代码从COBOL等传统语言转换为Java或Python等现代语言成为可能。虽然基于LLM的自动转换结果令人鼓舞,但转换后的代码无法保证正确翻译原始代码,因此对COBOL转换后的Java代码进行手动验证是必要但耗时且劳动密集的过程。本文分享了我们为IBM Watsonx Code Assistant for Z (WCA4Z) [5] 开发测试框架的经验,WCA4Z是一个用于COBOL到Java转换的工业工具。该框架自动化了在工业环境中测试转换后的Java代码与原始COBOL程序的功能等效性的过程。我们的框架使用符号执行为COBOL生成单元测试,模拟外部调用并将其转换为JUnit测试,以验证与转换后的Java的语义等效性。结果不仅有助于识别和修复任何检测到的差异,还可以提供反馈以改进AI模型。
🔬 方法详解
问题定义:论文旨在解决COBOL到Java自动转换后代码的验证问题。现有方法主要依赖人工验证,效率低下且容易出错。基于LLM的代码转换虽然取得了进展,但其结果的正确性无法保证,因此需要一种自动化的测试方法来确保转换后的Java代码与原始COBOL代码在功能上等效。
核心思路:论文的核心思路是利用符号执行技术自动生成COBOL代码的单元测试,并将其转化为JUnit测试,然后通过执行这些测试来验证转换后的Java代码与原始COBOL代码的语义等效性。这种方法避免了人工编写测试用例的繁琐过程,并能够有效地检测转换过程中引入的错误。
技术框架:该测试框架主要包含以下几个阶段:1) 对原始COBOL代码进行符号执行,生成单元测试用例;2) 模拟COBOL代码中的外部调用;3) 将生成的COBOL单元测试用例转换为JUnit测试;4) 在转换后的Java代码上执行JUnit测试,并与原始COBOL代码的执行结果进行比较,以验证其语义等效性;5) 根据测试结果识别并修复转换差异,并为AI模型提供反馈。
关键创新:该框架的关键创新在于将符号执行技术应用于COBOL代码的单元测试生成,并将其与JUnit测试框架相结合,实现了COBOL到Java转换的自动化测试。与传统的测试方法相比,该方法能够更有效地检测转换错误,并提高测试效率。
关键设计:框架使用符号执行引擎来探索COBOL代码的执行路径,并生成覆盖不同执行路径的单元测试用例。为了处理COBOL代码中的外部调用,框架使用mocking技术来模拟这些外部调用的行为。生成的单元测试用例被转换为JUnit测试,以便在Java环境中执行。框架还定义了一套比较规则,用于比较COBOL代码和Java代码的执行结果,以确定它们是否语义等效。
📊 实验亮点
该论文提出了一个COBOL到Java转换的自动化测试框架,通过符号执行和JUnit测试,实现了对转换后代码的功能等效性验证。该框架已在IBM Watsonx Code Assistant for Z (WCA4Z) 中得到应用,能够有效地检测转换错误,并为AI模型提供反馈,从而提升代码转换的质量和效率。
🎯 应用场景
该研究成果可应用于各种需要将COBOL代码迁移到Java平台的场景,例如金融、保险等传统行业的信息系统现代化改造。通过自动化测试,可以显著降低代码迁移的成本和风险,提高迁移效率,并确保迁移后系统的稳定性和可靠性。该框架还可以为LLM的代码转换模型提供反馈,从而不断提升模型的转换质量。
📄 摘要(原文)
Recent advances in Large Language Model (LLM) based Generative AI techniques have made it feasible to translate enterprise-level code from legacy languages such as COBOL to modern languages such as Java or Python. While the results of LLM-based automatic transformation are encouraging, the resulting code cannot be trusted to correctly translate the original code, making manual validation of translated Java code from COBOL a necessary but time-consuming and labor-intensive process. In this paper, we share our experience of developing a testing framework for IBM Watsonx Code Assistant for Z (WCA4Z) [5], an industrial tool designed for COBOL to Java translation. The framework automates the process of testing the functional equivalence of the translated Java code against the original COBOL programs in an industry context. Our framework uses symbolic execution to generate unit tests for COBOL, mocking external calls and transforming them into JUnit tests to validate semantic equivalence with translated Java. The results not only help identify and repair any detected discrepancies but also provide feedback to improve the AI model.