ChatPaper.aiChatPaper

Até Onde Podemos Ir com o Reparo Prático de Programas no Nível de Função?

How Far Can We Go with Practical Function-Level Program Repair?

April 19, 2024
Autores: Jiahong Xiang, Xiaoyang Xu, Fanchu Kong, Mingyuan Wu, Haotian Zhang, Yuqun Zhang
cs.AI

Resumo

Recentemente, várias técnicas de Reparo Automatizado de Programas (APR) baseadas em Modelos de Linguagem de Grande Escala (LLMs) foram propostas para melhorar o desempenho do reparo. Embora essas técnicas se concentrem principalmente no reparo em nível de linha única ou de bloco, elas enfrentam desafios significativos em aplicações do mundo real devido ao escopo limitado da tarefa de reparo e à localização de falhas em nível de instrução, que é custosa. No entanto, o APR em nível de função, que é mais prático ao ampliar o escopo da tarefa de APR para corrigir funções inteiras com bugs e requer apenas a localização de falhas em nível de função, que é mais eficiente em termos de custo, permanece pouco explorado. Neste artigo, realizamos o primeiro estudo abrangente de APR em nível de função baseado em LLMs, incluindo a investigação do efeito do mecanismo de aprendizado few-shot e das informações auxiliares relevantes para o reparo. Especificamente, adotamos seis LLMs amplamente estudados e construímos um benchmark nos conjuntos de dados Defects4J 1.2 e 2.0. Nosso estudo demonstra que LLMs com aprendizado zero-shot já são técnicas poderosas de APR em nível de função, enquanto a aplicação do mecanismo de aprendizado few-shot leva a desempenhos de reparo distintos. Além disso, descobrimos que a aplicação direta de informações auxiliares relevantes para o reparo aos LLMs aumenta significativamente o desempenho do reparo em nível de função. Inspirados por nossas descobertas, propomos uma técnica de APR em nível de função baseada em LLMs, denominada SRepair, que adota uma estrutura de LLM duplo para aproveitar o poder das informações auxiliares relevantes para o reparo e avançar o desempenho do reparo. Os resultados da avaliação demonstram que o SRepair pode corrigir corretamente 300 bugs de função única no conjunto de dados Defects4J, superando amplamente todas as técnicas de APR anteriores em pelo menos 85%, sem a necessidade de informações custosas de localização de falhas em nível de instrução. Além disso, o SRepair corrige com sucesso 32 bugs de múltiplas funções no conjunto de dados Defects4J, o que, até onde sabemos, é a primeira vez que isso é alcançado por qualquer técnica de APR.
English
Recently, multiple Automated Program Repair (APR) techniques based on Large Language Models (LLMs) have been proposed to enhance the repair performance. While these techniques mainly focus on the single-line or hunk-level repair, they face significant challenges in real-world application due to the limited repair task scope and costly statement-level fault localization. However, the more practical function-level APR, which broadens the scope of APR task to fix entire buggy functions and requires only cost-efficient function-level fault localization, remains underexplored. In this paper, we conduct the first comprehensive study of LLM-based function-level APR including investigating the effect of the few-shot learning mechanism and the auxiliary repair-relevant information. Specifically, we adopt six widely-studied LLMs and construct a benchmark in both the Defects4J 1.2 and 2.0 datasets. Our study demonstrates that LLMs with zero-shot learning are already powerful function-level APR techniques, while applying the few-shot learning mechanism leads to disparate repair performance. Moreover, we find that directly applying the auxiliary repair-relevant information to LLMs significantly increases function-level repair performance. Inspired by our findings, we propose an LLM-based function-level APR technique, namely SRepair, which adopts a dual-LLM framework to leverage the power of the auxiliary repair-relevant information for advancing the repair performance. The evaluation results demonstrate that SRepair can correctly fix 300 single-function bugs in the Defects4J dataset, largely surpassing all previous APR techniques by at least 85%, without the need for the costly statement-level fault location information. Furthermore, SRepair successfully fixes 32 multi-function bugs in the Defects4J dataset, which is the first time achieved by any APR technique ever to our best knowledge.
PDF71December 15, 2024