Das Erlernen der Generierung von Modultests für automatisiertes Debugging.
Learning to Generate Unit Tests for Automated Debugging
February 3, 2025
Autoren: Archiki Prasad, Elias Stengel-Eskin, Justin Chih-Yao Chen, Zaid Khan, Mohit Bansal
cs.AI
Zusammenfassung
Unit tests (UTs) spielen eine entscheidende Rolle bei der Bewertung der Code-Korrektheit sowie bei der Bereitstellung von Rückmeldungen an ein großes Sprachmodell (LLM), während es fehlerhaften Code iterativ debuggt und die automatische Testgenerierung motiviert. Allerdings entdecken wir einen Kompromiss zwischen der Generierung von Unit-Test-Eingaben, die Fehler aufdecken, wenn fehlerhafter Code vorliegt, und der korrekten Vorhersage der Unit-Test-Ausgabe ohne Zugriff auf die Goldlösung. Um diesen Kompromiss anzugehen, schlagen wir UTGen vor, das LLMs lehrt, Unit-Test-Eingaben zu generieren, die Fehler zusammen mit ihren korrekten erwarteten Ausgaben basierend auf Aufgabenbeschreibungen und Kandidatencode aufzeigen. Wir integrieren UTGen in UTDebug, eine robuste Debugging-Pipeline, die generierte Tests verwendet, um LLMs effektiv beim Debuggen zu unterstützen. Da durch das Modell generierte Tests ungenaue Signale liefern können (z. B. durch falsch vorhergesagte Ausgaben), skaliert UTDebug (i) UTGen über die Testzeitberechnung, um die Vorhersage der UT-Ausgabe zu verbessern, und (ii) validiert und nimmt Änderungen basierend auf mehreren generierten UTs zurück, um Überanpassung zu vermeiden. Wir zeigen, dass UTGen die UT-Generierungsbaselines um 7,59% übertrifft, basierend auf einem Metrikenmaß, das sowohl fehleraufdeckende UT-Eingaben als auch korrekte UT-Ausgaben berücksichtigt. Bei Verwendung mit UTDebug stellen wir fest, dass das Feedback von UTGen's Unit-Tests die Passgenauigkeit von Qwen-2.5 7B auf HumanEvalFix und unserem eigenen anspruchsvolleren Debugging-Split von MBPP+ um über 3% bzw. 12,35% (jeweils) im Vergleich zu anderen LLM-basierten UT-Generierungsbaselines verbessert.
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