¿Hasta dónde podemos llegar con la reparación práctica de programas a nivel de funciones?
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
Resumen
Recientemente, se han propuesto múltiples técnicas de Reparación Automatizada de Programas (APR, por sus siglas en inglés) basadas en Modelos de Lenguaje de Gran Escala (LLMs) para mejorar el rendimiento en la reparación. Si bien estas técnicas se centran principalmente en la reparación a nivel de una sola línea o de un fragmento (hunk), enfrentan desafíos significativos en aplicaciones del mundo real debido al alcance limitado de las tareas de reparación y al costoso proceso de localización de fallos a nivel de declaración. Sin embargo, la APR a nivel de función, que amplía el alcance de la tarea de APR para corregir funciones completas con errores y requiere solo una localización de fallos a nivel de función más eficiente en términos de costos, sigue siendo poco explorada. En este artículo, realizamos el primer estudio exhaustivo de APR a nivel de función basado en LLMs, incluyendo la investigación del efecto del mecanismo de aprendizaje con pocos ejemplos (few-shot learning) y la información auxiliar relevante para la reparación. Específicamente, adoptamos seis LLMs ampliamente estudiados y construimos un punto de referencia en los conjuntos de datos Defects4J 1.2 y 2.0. Nuestro estudio demuestra que los LLMs con aprendizaje de cero ejemplos (zero-shot learning) ya son técnicas poderosas de APR a nivel de función, mientras que la aplicación del mecanismo de aprendizaje con pocos ejemplos conduce a un rendimiento de reparación dispar. Además, encontramos que aplicar directamente la información auxiliar relevante para la reparación a los LLMs aumenta significativamente el rendimiento de la reparación a nivel de función. Inspirados por nuestros hallazgos, proponemos una técnica de APR a nivel de función basada en LLMs, denominada SRepair, que adopta un marco de doble LLM para aprovechar el poder de la información auxiliar relevante para la reparación y mejorar el rendimiento en la reparación. Los resultados de la evaluación demuestran que SRepair puede corregir correctamente 300 errores de una sola función en el conjunto de datos Defects4J, superando ampliamente todas las técnicas de APR anteriores en al menos un 85%, sin necesidad de la costosa información de localización de fallos a nivel de declaración. Además, SRepair corrige con éxito 32 errores de múltiples funciones en el conjunto de datos Defects4J, lo que, según nuestro conocimiento, es la primera vez que se logra con cualquier 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.Summary
AI-Generated Summary