Code-A1: Adversarial Evolving of Code LLM and Test LLM via Reinforcement Learning

📄 arXiv: 2603.15611v1 📥 PDF

作者: Aozhe Wang, Yuchen Yan, Nan Zhou, Zhengxi Lu, Weiming Lu, Jun Xiao, Yueting Zhuang, Yongliang Shen

分类: cs.CL

发布日期: 2026-03-16

备注: Project Page: https://zju-real.github.io/Code-A1 Code: https://github.com/ZJU-REAL/Code-A1


💡 一句话要点

Code-A1:通过强化学习对抗进化代码LLM和测试LLM,提升代码生成质量。

🎯 匹配领域: 支柱二:RL算法与架构 (RL & Architecture)

关键词: 代码生成 强化学习 对抗学习 协同进化 白盒测试

📋 核心要点

  1. 现有代码生成强化学习依赖于单元测试通过率,但高质量测试套件稀缺,数据集覆盖有限,静态奖励无法随模型改进而调整。
  2. Code-A1采用对抗协同进化框架,分离代码LLM和测试LLM,分别优化代码生成和测试生成,避免了自我勾结风险,并支持白盒测试。
  3. 实验表明,Code-A1在代码生成性能上可与人工标注测试训练的模型媲美,并显著提升了测试生成能力。

📝 摘要(中文)

本文提出Code-A1,一个对抗协同进化框架,用于联合优化代码LLM和测试LLM,二者目标相反。代码LLM的目标是使代码通过更多测试,而测试LLM的目标是暴露更多代码缺陷。这种架构分离消除了自我勾结的风险,并安全地实现了白盒测试生成,测试LLM可以检查候选代码以制定有针对性的对抗性测试。此外,本文还引入了用于经验回放的“错误本”机制,以及平衡测试有效性和对抗难度的复合奖励。在Qwen2.5-Coder模型上的实验表明,Code-A1实现了与在人工标注测试上训练的模型相当或更高的代码生成性能,同时显著提高了测试生成能力。

🔬 方法详解

问题定义:现有的代码生成强化学习方法依赖于单元测试的反馈,但高质量的测试用例难以获取,现有数据集覆盖率不足,且静态奖励机制无法随着模型能力的提升而自适应调整。此外,将代码生成和测试生成统一在单个模型中的自博弈方法面临着白盒访问带来的自我勾结问题(模型生成容易通过的简单测试),以及黑盒限制导致的通用测试无法发现特定实现的缺陷的问题。

核心思路:Code-A1的核心思路是采用对抗协同进化的方式,同时训练一个代码LLM和一个测试LLM,二者具有相反的目标。代码LLM的目标是生成能够通过更多测试的代码,而测试LLM的目标是生成能够发现代码缺陷的测试用例。通过这种对抗的方式,可以促使代码LLM生成更健壮的代码,同时测试LLM生成更具挑战性的测试用例。

技术框架:Code-A1的整体框架包含两个主要的LLM:代码LLM和测试LLM。代码LLM负责生成代码,测试LLM负责生成测试用例。训练过程中,代码LLM生成的代码会被提交给测试LLM进行测试,测试结果(通过的测试用例数量)会作为奖励信号反馈给代码LLM。同时,测试LLM生成的测试用例的有效性和难度也会被评估,并作为奖励信号反馈给测试LLM。此外,框架还包含一个“错误本”机制,用于存储历史的错误案例,以便进行经验回放。

关键创新:Code-A1的关键创新在于其对抗协同进化的框架,通过分离代码LLM和测试LLM,避免了自我勾结的风险,并允许测试LLM进行白盒测试,即可以访问代码LLM生成的代码,从而生成更有针对性的对抗性测试用例。此外,“错误本”机制和复合奖励函数也是重要的创新点,前者可以提高训练效率,后者可以平衡测试用例的有效性和难度。

关键设计:Code-A1的关键设计包括:1) 代码LLM和测试LLM的具体模型选择(论文中使用的是Qwen2.5-Coder);2) 奖励函数的设计,包括代码LLM的奖励函数(基于通过的测试用例数量)和测试LLM的奖励函数(平衡测试用例的有效性和难度);3) “错误本”机制的具体实现,包括存储哪些错误案例,以及如何进行经验回放;4) 白盒测试的具体实现,即测试LLM如何访问代码LLM生成的代码,并生成有针对性的测试用例。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,Code-A1在代码生成性能上可以与在人工标注测试上训练的模型媲美,同时显著提高了测试生成能力。具体来说,Code-A1在代码生成任务上的性能指标与使用人工标注测试训练的模型相当,甚至在某些指标上有所超越。此外,Code-A1生成的测试用例能够发现更多代码中的缺陷,表明其测试生成能力得到了显著提升。

🎯 应用场景

Code-A1具有广泛的应用前景,可用于提升软件开发的质量和效率。它可以应用于自动化测试、代码审查、漏洞检测等领域,帮助开发者发现和修复代码中的缺陷,提高软件的可靠性和安全性。此外,该方法还可以用于训练更强大的代码生成模型,从而提高软件开发的自动化程度。

📄 摘要(原文)

Reinforcement learning for code generation relies on verifiable rewards from unit test pass rates. Yet high-quality test suites are scarce, existing datasets offer limited coverage, and static rewards fail to adapt as models improve. Recent self-play methods unify code and test generation in a single model, but face a inherent dilemma: white-box access leads to self-collusion where the model produces trivial tests for easy rewards, yet black-box restriction yields generic tests that miss implementation-specific bugs. We introduce Code-A1, an adversarial co-evolution framework that jointly optimizes a Code LLM and a Test LLM with opposing objectives. The Code LLM is rewarded for passing more tests, while the Test LLM is rewarded for exposing more defects. This architectural separation eliminates self-collusion risks and safely enables white-box test generation, where the Test LLM can inspect candidate code to craft targeted adversarial tests. We further introduce a Mistake Book mechanism for experience replay and a composite reward balancing test validity with adversarial difficulty. Experiments on Qwen2.5-Coder models demonstrate that Code-A1 achieves code generation performance matching or exceeding models trained on human-annotated tests, while significantly improving test generation capability.