На сколько далеко мы можем продвинуться с практическим восстановлением программ на уровне функций?
How Far Can We Go with Practical Function-Level Program Repair?
April 19, 2024
Авторы: Jiahong Xiang, Xiaoyang Xu, Fanchu Kong, Mingyuan Wu, Haotian Zhang, Yuqun Zhang
cs.AI
Аннотация
Недавно было предложено несколько техник автоматического исправления программ (APR) на основе больших языковых моделей (LLM) для улучшения производительности исправления. В то время как эти техники в основном сосредотачиваются на исправлении однострочных или кусковых участков, они сталкиваются с существенными проблемами в применении в реальном мире из-за ограниченного объема задач по исправлению и дорогостоящей локализации неисправностей на уровне оператора. Однако более практичное автоматическое исправление на уровне функций, которое расширяет область задач по исправлению до исправления целых ошибочных функций и требует только экономичной локализации неисправностей на уровне функций, остается недостаточно исследованным. В данной статье мы проводим первое всестороннее исследование автоматического исправления на уровне функций на основе LLM, включая изучение эффекта механизма обучения с малым количеством примеров и вспомогательной информации, связанной с исправлением. Конкретно, мы используем шесть широко изученных LLM и создаем бенчмарк как в наборе данных Defects4J 1.2, так и 2.0. Наше исследование показывает, что LLM с обучением с нулевым количеством примеров уже являются мощными техниками автоматического исправления на уровне функций, в то время как применение механизма обучения с малым количеством примеров приводит к различной производительности исправления. Более того, мы обнаруживаем, что прямое применение вспомогательной информации, связанной с исправлением, к LLM значительно повышает производительность исправления на уровне функций. Вдохновленные нашими результатами, мы предлагаем технику автоматического исправления на уровне функций на основе LLM, названную SRepair, которая использует двойную структуру LLM для использования мощи вспомогательной информации, связанной с исправлением, для улучшения производительности исправления. Результаты оценки показывают, что SRepair может правильно исправить 300 ошибок в одной функции в наборе данных Defects4J, значительно превосходя все предыдущие техники APR как минимум на 85%, без необходимости дорогостоящей информации о локализации неисправностей на уровне оператора. Более того, SRepair успешно исправляет 32 ошибки в многих функциях в наборе данных Defects4J, что впервые достигается какой-либо техникой 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