ChatPaper.aiChatPaper

Обучение генерации модульных тестов для автоматизированного отладчика

Learning to Generate Unit Tests for Automated Debugging

February 3, 2025
Авторы: Archiki Prasad, Elias Stengel-Eskin, Justin Chih-Yao Chen, Zaid Khan, Mohit Bansal
cs.AI

Аннотация

Модульные тесты (UTs) играют важную роль в оценке правильности кода, а также предоставлении обратной связи большой языковой модели (LLM) по мере итеративного устранения ошибок в коде, мотивируя автоматизированную генерацию тестов. Однако мы обнаружили компромисс между созданием входных данных модульных тестов, выявляющих ошибки при наличии неправильного кода, и правильным предсказанием вывода модульного теста без доступа к эталонному решению. Для решения этого компромисса мы предлагаем UTGen, который обучает LLM генерировать входные данные модульных тестов, выявляющие ошибки, вместе с их правильными ожидаемыми выводами на основе описаний задач и кандидатского кода. Мы интегрируем UTGen в UTDebug, надежный конвейер отладки, который использует сгенерированные тесты для помощи LLM в эффективной отладке. Поскольку модельно-сгенерированные тесты могут давать шумные сигналы (например, из-за неправильно предсказанных выводов), UTDebug (i) масштабирует UTGen через вычисления во время тестирования для улучшения предсказания вывода UT и (ii) проверяет и откатывает изменения на основе нескольких сгенерированных UT, чтобы избежать переобучения. Мы показываем, что UTGen превосходит базовые методы генерации UT на 7.59% по метрике, измеряющей наличие как входов UT, выявляющих ошибки, так и правильных выводов UT. При использовании с UTDebug мы обнаруживаем, что обратная связь от модульных тестов UTGen улучшает точность pass@1 для Qwen-2.5 7B на HumanEvalFix и нашем собственном более сложном разделении отладки MBPP+ на более чем 3% и 12.35% (соответственно) по сравнению с другими базовыми методами генерации UT на основе 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

PDF42February 4, 2025