Leren om eenheidstests te genereren voor geautomatiseerd debuggen.
Learning to Generate Unit Tests for Automated Debugging
February 3, 2025
Auteurs: Archiki Prasad, Elias Stengel-Eskin, Justin Chih-Yao Chen, Zaid Khan, Mohit Bansal
cs.AI
Samenvatting
Unit tests (UTs) spelen een essentiële rol bij het beoordelen van codecorrectheid en het geven van feedback aan een groot taalmodel (LLM) terwijl het iteratief foutieve code opspoort, wat geautomatiseerde testgeneratie motiveert. We hebben echter een compromis ontdekt tussen het genereren van unit test inputs die fouten onthullen bij foutieve code en het correct voorspellen van de unit test output zonder toegang tot de gouden oplossing. Om dit compromis aan te pakken, stellen we UTGen voor, dat LLMs leert om unit test inputs te genereren die fouten onthullen samen met hun juiste verwachte outputs op basis van taakbeschrijvingen en kandidaatcode. We integreren UTGen in UTDebug, een robuuste debug-pijplijn die gegenereerde tests gebruikt om LLMs effectief te helpen debuggen. Aangezien door het model gegenereerde tests ruisachtige signalen kunnen geven (bijv. van onjuist voorspelde outputs), schaalt UTDebug (i) UTGen via testtijdrekenkracht om UT-outputvoorspelling te verbeteren, en (ii) valideert en herziet bewerkingen op basis van meerdere gegenereerde UTs om overpassing te voorkomen. We tonen aan dat UTGen UT-generatiebaselines overtreft met 7.59% op basis van een metriek die de aanwezigheid van zowel fout-onthullende UT-inputs als juiste UT-outputs meet. Wanneer gebruikt met UTDebug, vinden we dat feedback van UTGen's unit tests de pass@1-nauwkeurigheid van Qwen-2.5 7B op HumanEvalFix en onze eigen moeilijkere debugsplit van MBPP+ verbetert met respectievelijk meer dan 3% en 12.35% ten opzichte van andere op LLM's gebaseerde UT-generatiebaselines.
English
Unit tests (UTs) play an instrumental role in assessing code correctness as
well as providing feedback to a large language model (LLM) as it iteratively
debugs faulty code, motivating automated test generation. However, we uncover a
trade-off between generating unit test inputs that reveal errors when given a
faulty code and correctly predicting the unit test output without access to the
gold solution. To address this trade-off, we propose UTGen, which teaches LLMs
to generate unit test inputs that reveal errors along with their correct
expected outputs based on task descriptions and candidate code. We integrate
UTGen into UTDebug, a robust debugging pipeline that uses generated tests to
help LLMs debug effectively. Since model-generated tests can provide noisy
signals (e.g., from incorrectly predicted outputs), UTDebug (i) scales UTGen
via test-time compute to improve UT output prediction, and (ii) validates and
back-tracks edits based on multiple generated UTs to avoid overfitting. We show
that UTGen outperforms UT generation baselines by 7.59% based on a metric
measuring the presence of both error-revealing UT inputs and correct UT
outputs. When used with UTDebug, we find that feedback from UTGen's unit tests
improves pass@1 accuracy of Qwen-2.5 7B on HumanEvalFix and our own harder
debugging split of MBPP+ by over 3% and 12.35% (respectively) over other
LLM-based UT generation baselines.Summary
AI-Generated Summary