Apprentissage de la génération de tests unitaires pour le débogage automatisé.
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
Résumé
Les tests unitaires (UTs) jouent un rôle essentiel dans l'évaluation de la correction du code ainsi que dans la fourniture de retours à un grand modèle de langage (LLM) alors qu'il débogue itérativement un code défectueux, ce qui motive la génération automatique de tests. Cependant, nous découvrons un compromis entre la génération d'entrées de tests unitaires révélant des erreurs lorsqu'un code est défectueux et la prédiction correcte de la sortie du test unitaire sans accès à la solution de référence. Pour résoudre ce compromis, nous proposons UTGen, qui apprend aux LLM à générer des entrées de tests unitaires révélant des erreurs ainsi que leurs sorties attendues correctes en se basant sur les descriptions de tâches et le code candidat. Nous intégrons UTGen dans UTDebug, un pipeline de débogage robuste qui utilise des tests générés pour aider les LLM à déboguer efficacement. Étant donné que les tests générés par le modèle peuvent fournir des signaux bruités (par exemple, des sorties prédites de manière incorrecte), UTDebug (i) met à l'échelle UTGen via le calcul au moment du test pour améliorer la prédiction de la sortie de UT, et (ii) valide et annule les modifications en se basant sur plusieurs UT générés pour éviter le surajustement. Nous montrons que UTGen surpasse les références de génération de tests UT de 7,59 % en se basant sur une métrique mesurant la présence à la fois des entrées de UT révélant des erreurs et des sorties UT correctes. Lorsqu'il est utilisé avec UTDebug, nous constatons que les retours des tests unitaires de UTGen améliorent la précision pass@1 de Qwen-2.5 7B sur HumanEvalFix et notre propre partition de débogage plus difficile de MBPP+ de plus de 3 % et 12,35 % (respectivement) par rapport aux autres références de génération de tests UT basées sur LLM.
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