ChatPaper.aiChatPaper

Aprendizado para Gerar Testes Unitários para Depuração Automatizada

Learning to Generate Unit Tests for Automated Debugging

February 3, 2025
Autores: Archiki Prasad, Elias Stengel-Eskin, Justin Chih-Yao Chen, Zaid Khan, Mohit Bansal
cs.AI

Resumo

Os testes unitários (UTs) desempenham um papel fundamental na avaliação da correção do código, bem como no fornecimento de feedback a um grande modelo de linguagem (LLM) à medida que depura iterativamente o código com falhas, motivando a geração automatizada de testes. No entanto, descobrimos um trade-off entre a geração de entradas de teste unitário que revelam erros ao fornecer um código com falhas e prever corretamente a saída do teste unitário sem acesso à solução de referência. Para lidar com esse trade-off, propomos o UTGen, que ensina LLMs a gerar entradas de teste unitário que revelam erros juntamente com suas saídas esperadas corretas com base em descrições de tarefas e código candidato. Integramos o UTGen ao UTDebug, um pipeline robusto de depuração que utiliza testes gerados para ajudar os LLMs a depurar de forma eficaz. Uma vez que os testes gerados pelo modelo podem fornecer sinais ruidosos (por exemplo, de saídas previstas incorretamente), o UTDebug (i) dimensiona o UTGen por meio de cálculos no momento do teste para melhorar a previsão de saída do UT, e (ii) valida e retrocede edições com base em múltiplos UTs gerados para evitar overfitting. Mostramos que o UTGen supera as linhas de base de geração de UT em 7,59% com base em uma métrica que mede a presença tanto de entradas de UT que revelam erros quanto de saídas de UT corretas. Quando usado com o UTDebug, descobrimos que o feedback dos testes unitários do UTGen melhora a precisão pass@1 do Qwen-2.5 7B no HumanEvalFix e em nossa própria divisão de depuração mais difícil do MBPP+ em mais de 3% e 12,35% (respectivamente) em relação a outras linhas de base de geração de UT baseadas em LLMs.
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