EMNLP 2026 | DiffuTester: 加速扩散语言模型生成单元测试

栏目:互联网 | 来源:机器之心Pro | 2026-09-11 10:20

扩散语言模型(Diffusion Large Language Models,dLLMs)凭借并行生成多个 token 的能力,为高效代码生成提供了一条新的技术路线,尤其可以用于高效生成测试用例,快速提升代码覆盖率。然而,扩散语言模型仍面临一个关键问题:生成得更快,往往会导致生成质量下降。

针对这一问题,本文提出了面向扩散语言模型生成单元测试的加速框架DiffuTester。其核心思想来自一个简单但重要的现象:针对同一个被测方法生成的多个单元测试,往往共享大量相似的代码结构模式。

DiffuTester 利用抽象语法树(Abstract Syntax Tree,AST)动态挖掘这些结构模式,并在扩散解码过程中额外保留与这些结构模式相对应的 token,从而让模型能够在一次去噪步骤中解码更多 token,减少整体推理步数。

实验证明,DiffuTester 在不同的扩散语言模型以及三种编程语言上均取得稳定加速效果:在保持测试覆盖率的同时,可实现最高约 2–3× 的生成加速,并显著降低计算开销。相关论文已被 EMNLP 2026 接受,代码已开源。

本研究由清华大学人工智能学院 AI Agent 课题组完成。通讯作者为清华大学人工智能学院李佳助理教授,主要研究智能化软件开发。第一作者杨乐康为清华大学人工智能学院 2026 级直博生。

  • 论文标题:DiffuTester: Accelerating Unit Test Generation for Diffusion LLMs via Mining Structural Pattern
  • 论文链接:https://arxiv.org/pdf/2509.24975
  • 代码链接:https://github.com/THU-Agent/DiffuTester

研究背景

扩散语言模型通过迭代去噪并行预测多个 token,相比传统自回归模型具备更强的并行生成潜力,因此在高效代码生成场景中受到越来越多关注。

但 dLLM 的生成效率和生成质量之间存在明显的speed-quality trade-off:如果每个去噪步骤只保留少量高置信度 token,生成质量较稳定,但并行优势难以充分发挥;如果简单增加每一步保留的 token 数量,虽然可以加速解码,却会导致生成质量下降。

这一问题在单元测试生成中尤为值得关注。现实世界中的软件项目通常包含大量需要测试的方法,开发者需要为其生成多个测试用例以覆盖不同语句和分支,因此 UTG 对生成效率有天然需求,而 dLLM 的并行生成能力与这一场景十分契合。

进一步观察发现,单元测试本身还具有一个非常适合 dLLM 加速的特性:大量重复的结构模式,如下图所示。因此,本文的核心出发点是:利用 UT 中广泛存在的重复结构,帮助 dLLM 在每一步解码更多 token,在尽量不牺牲测试质量的前提下加速生成。

解决了什么问题?

本文关注的核心问题是:如何在不降低生成质量的前提下,加速 dLLM 的单元测试生成过程。

现有 dLLM 的 training-free 加速方法大致可以分为两类:基于缓存的方法和基于采样的技术。前者通过复用不同去噪步骤之间相似的中间表示或 KV Cache,减少重复计算,从而降低单步推理开销;后者则主要从解码过程的采样策略入手,通过在一次去噪过程中解码更多 token、动态调整采样过程等方式,减少整体推理步数。

这两类方法都能够有效提升生成效率,但它们一般也会导致生成质量的下降。DiffuTester 也是在采样策略上的优化,但 DiffuTester 不仅不会降低生成质量,而且还和其他基于缓存的方法兼容。

提出了什么方法?

针对上述问题,本文提出了DiffuTester:一个面向 dLLM 单元测试生成的、无需训练(training-free)的加速框架。其核心思想是:动态挖掘多个测试用例之间的共享结构,并利用这些结构信息辅助解码更多 token,从而减少整体去噪步数。

如下图所示,在每个解码步骤中,DiffuTester 首先执行 dLLM 原有的基于置信度的解码,保留模型最有把握的一部分 token;随后进一步执行基于结构模式的解码。具体来说,DiffuTester 对当前 batch 中多个尚未完全生成的测试用例构建 AST,并通过合并不同 AST 来识别其中的共享结构。与这些公共结构对应的 token 会被额外保留,因此模型能够在一次推理中解码更多内容。

由于扩散模型在生成早期的代码可能包含语法错误,DiffuTester 并不直接对完整测试用例构建 AST,而是采用逐行解析的方式,从而降低局部语法错误对结构挖掘的影响。

此外,DiffuTester 还采用了两项辅助设计:一是只保留置信度高于一个预设的阈值的 token,避免低置信度影响代码质量;二是不在每个去噪步骤都执行 AST 结构分析,而是间隔若干步进行一次,以进一步降低额外开销。

整体而言,DiffuTester 可以概括为:

在原有置信度解码的基础上,引入来自多个测试用例的结构信息,一次解码更多 token,实现更高效的 dLLM 单元测试生成。

实验结果与分析

本文在DiffuCoder和Dream两个代表性 dLLM 上进行实验,在TestEval数据集上进行测试,为了验证方法在不同编程语言上的有效性,我们还将原来的数据集扩展到三个不同编程语言,即 Python, C++, Java。

  • 主实验结果:显著加速,同时保持测试质量。DiffuTester 在不同模型、编程语言下都可以稳定提升生成效率,并且不会影响峰值覆盖率。

  • 与其他基于采样的加速方法相比:兼顾速度与质量。与其他基于采样的加速方法相比,DiffuTester 在速度和质量上取得了更好的平衡。

  • 与基于缓存的加速方法相比:可叠加。另一类常见的 dLLM 加速方法是基于 KV Cache 的方法。DiffuTester 主要减少需要执行的解码步骤,而缓存方法主要降低每一步推理的计算开销,因此二者天然兼容。

了解更多

猜你想看

← 返回首页