赶上最新的AI论文

通过基于属性的测试增强 LLM 代码生成!打破自欺欺人的新框架 PGS

通过基于属性的测试增强 LLM 代码生成!打破自欺欺人的新框架 PGS

三个要点
✔️ 利用基于属性的测试(PBT)高精度地检测和纠正 LLM 代码生成错误
✔️ 所提出的方法 PGS 可以迭代地协调负责代码生成和验证的两个 LLM 代理
✔️ 在实验中,PGS 的正确率比以前的方法高出 37.3%,尤其是在具有挑战性的问题上。PGS 的有效性已在特别困难的问题上得到证实。

Use Property-Based Testing to Bridge LLM Code Generation and Validation
written by Lehan HeZeren ChenZhe ZhangJing ShaoXiang GaoLu Sheng
(Submitted on 23 Jun 2025)
Comments: Published on arxiv.
Subjects:  Software Engineering (cs.SE); Artificial Intelligence (cs.AI)

本文所使用的图片要么来自论文、介绍性幻灯片,要么是参考这些图片制作的。

总结

LLM 是一种广泛使用的从自然语言问题语句自动生成代码的技术,但仍然很难保证输出的代码能正确运行。传统的测试驱动开发(TDD)尝试使用输入/输出示例来验证代码的正确性,但这种方法由于缺乏高质量的测试用例而受到影响,或者相反,由于错误的输出示例而对模型造成误导。

本文提出了一个新的框架--属性生成求解器(PGS),它侧重于基于属性的测试(PBT),以解决这一问题。PGS由负责代码生成的 "生成器 "和负责定义和验证属性的 "测试器 "组成,从而创建了一种迭代生成和修改准确且可通用代码的机制。

使用 PBT 的好处是,验证基于更抽象和内在的程序属性,而不是具体的输出,从而更容易摆脱 "自欺欺人的循环"。实验结果表明,与传统的 TDD 方法相比,PGS 的正确率最高可提高 37.3%。

建议的方法

PGS 是一个以 PBT 为核心的代码生成和修改框架。在该方法中,两个独立的代理--基于 LLM 的生成器和测试器--协同工作。

首先,生成器根据自然语言规范句子生成初始代码。与此相反,测试者从问题陈述中定义抽象属性(如 "输出应按升序排列 "或 "输出的乘积等于原始输入"),然后将其转化为代码进行验证。然后,PBT 方法会自动生成多种符合规范的测试输入,以验证代码。

如果有任何属性被破坏,测试人员会选择最简洁、最有提示性的故障案例,并将详细反馈信息反馈给生成器,生成器会根据反馈信息修正代码,并再次进行测试,如此循环往复,最多可重复五次。

通过这种方式,PGS 避免了传统 TDD 的 "基于错误测试示例的误导",而将重点放在了基于从规范中得出的抽象属性的验证上,从而使代码生成更加稳健。

实验

为了验证 PGS 的有效性,作者使用了三个代码生成基准(HumanEval、MBPP 和 LiveCodeBench),并将它们与传统 TDD 方法和最先进的调试支持方法进行了比较。三种性能不同的 LLM(DeepSeek-Coder-V2、Qwen2.5-Coder 和 DeepSeek-R1-Distilled-32B)被用于验证。

使用的评估指标是第一代所有测试通过的百分比(pass@1)和初始代码不正确时成功修正的百分比(修复成功率,RSR)。结果表明,在所有模型和基准中,PGS 的性能最佳,在 pass@1で平均9.2%,RSR 的平均绝对值提高了 15.7%。

研究还发现,最有效的反馈策略是选择 "最短、最简短的输入故障案例",从而提高了模型修改的成功率。此外,研究还发现 LLM 比完整代码更善于生成验证属性,这与 PGS 以属性为导向的代码修改方法是一致的。

  • メルマガ登録(ver
  • ライター
  • エンジニア_大募集!!

如果您对文章内容有任何改进建议等,请通过 "联系我们 "表格与爱学网编辑部联系。
如果您能通过咨询表与我们联系,我们将非常感激。

联系我们