Simple Science

La science de pointe expliquée simplement

# Informatique# Génie logiciel# Calcul et langage# Apprentissage automatique

Améliorer la correction de bugs avec des grands modèles de langage

Une nouvelle méthode utilise des LLM pour améliorer l'efficacité de la réparation de programmes.

― 7 min lire


Les LLMs transforment laLes LLMs transforment lacorrection de bugs.automatique de programmes.l'efficacité dans la réparationUne nouvelle approche booste
Table des matières

La réparation de programmes est un aspect super important du développement logiciel. Les développeurs passent souvent une grande partie de leur temps à corriger des bugs. Beaucoup d'études montrent que ça peut prendre plus de 35 % du temps de développement habituel. Pour alléger cette charge, les chercheurs bossent sur des méthodes de Réparation Automatique de Programmes (APR) qui visent à automatiser le processus de correction des bugs.

Qu'est-ce que la Réparation de programme automatisée ?

Les méthodes de réparation de programme automatisée peuvent être classées en plusieurs types, y compris les méthodes basées sur des heuristiques, les méthodes basées sur des contraintes, les méthodes basées sur des modèles et les méthodes basées sur l'apprentissage. Chaque type a sa propre approche pour générer des patchs de code, qui sont les modifications appliquées pour corriger des bugs dans le code logiciel. Les méthodes traditionnelles s'appuient souvent sur des modèles fixes conçus pour gérer des bugs spécifiques, tandis que les méthodes basées sur l'apprentissage utilisent de grands ensembles de données contenant du code bogué et corrigé pour entraîner des modèles qui peuvent proposer des corrections.

Le rôle des Grands Modèles de Langage

Récemment, des Grands Modèles de Langage (GML) comme GPT-4 ont donné des résultats prometteurs pour la réparation de programmes automatisée. Les GML sont des modèles entraînés sur d'énormes quantités de données textuelles et ont des capacités qui leur permettent de comprendre et de générer du code efficacement. Les chercheurs se tournent de plus en plus vers les GML parce qu'ils ont montré de fortes performances dans les tâches de compréhension et de génération de code.

Défis des approches actuelles

Malgré les avancées, les méthodes actuelles font face à deux gros défis. D'abord, il y a un décalage entre les objectifs d'entraînement des GML et les buts des méthodes de réparation de programmes. Les GML sont généralement entraînés pour prédire le prochain jeton dans une séquence. Cependant, de nombreuses méthodes de réparation de programmes s'attendent à ce qu'ils comblent des lacunes spécifiques dans le code, ce qui réduit les performances. Ensuite, les flux de travail existants séparent les étapes de détection des bugs et de leur correction. Cette division peut limiter le potentiel des GML à générer des solutions efficaces, car ils peuvent rater des opportunités de trouver des réparations plus globales.

Approche Proposée

Ce travail introduit une nouvelle méthode de réparation de programme utilisant des GML. Les points clés de l'approche proposée sont :

  1. Aligner la sortie des GML avec leurs objectifs d'entraînement améliorera leur capacité à générer des corrections de code efficaces.
  2. Permettre aux GML de peaufiner des fonctions entières au lieu de se concentrer uniquement sur des sections spécifiques conduit à de meilleurs résultats en réparation de programmes.

Développement du Cadre

Sur la base de ces idées, un cadre d’invite simple a été conçu pour la réparation automatique de programmes, nommé Direct Debug Drives Decent Code. Ce cadre permet aux GML de corriger les problèmes dans le code en générant une version complète et affinée d'un programme bogué en fonction de diverses entrées, comme des documents connexes et des rapports d'erreurs.

Comment ça marche

Le nouveau cadre de réparation de programmes génère des versions raffinées de programmes bogués en utilisant des informations pertinentes et des artefacts issus des rapports d'erreurs et des tests échoués. Les GML sont sollicités avec ces détails pour produire des corrections plus précises sans avoir besoin de localiser d'abord les défauts. L'aspect innovant de cette approche est qu'elle se concentre sur la fonction entière au lieu de zones masquées plus étroites.

Résultats

Les résultats indiquent que la nouvelle méthode fonctionne mieux que les méthodes de réparation de programmes à la pointe de la technologie, atteignant une amélioration de 10 % par rapport à celles qui utilisent la localisation de défauts. De plus, l'approche proposée nécessite beaucoup moins d'échantillons pour générer des patchs de code, démontrant ainsi l'efficacité des processus de réparation de programmes.

Importance de l'Alignement des Objectifs

Une des idées essentielles est que l'alignement de la sortie des GML avec leurs objectifs d'entraînement est nécessaire pour une performance optimale. Cela signifie qu'en générant des fonctions complètes plutôt qu'en comblant des sections incomplètes, les GML peuvent utiliser leur entraînement de manière plus efficace. Les expériences ont montré que le cadre pouvait produire des patchs de code plus précis et fiables lorsqu'il travaillait avec des fonctions complètes.

Importance des Artefacts

Un autre élément clé était l'utilisation des artefacts, qui incluent des documents décrivant le code et les entrées et sorties de tests échoués. Ces artefacts aident à guider les GML dans le raffinement de leurs sorties et leur permettent de localiser et de réparer les bugs plus efficacement. Les résultats ont révélé que l'utilisation de ces entrées supplémentaires améliorait considérablement la performance du processus de réparation.

Expériences et Résultats

Des expériences ont été menées sur une variété de bugs pour comparer le cadre proposé avec d'autres méthodes à la pointe de la technologie. Les comparaisons ont montré que la nouvelle approche surpassait les méthodes existantes tout en nécessitant moins d'échantillons pour générer des patchs corrects.

Méthodes d'Évaluation

L'évaluation de la méthode proposée impliquait d'évaluer sa capacité à générer des patchs corrects pour divers bugs de programmation. Le nombre de patchs corrects générés a été pris en compte, ainsi que la méthodologie utilisée pour créer ces patchs. Chaque patch qui passait avec succès tous les tests requis était considéré comme correct.

Comparaisons avec les Méthodes Existantes

Les résultats ont révélé que la nouvelle méthode non seulement généré un plus grand nombre de patchs corrects que les modèles précédents, mais le faisait aussi de manière beaucoup plus efficace. Alors que les méthodes existantes nécessitaient de nombreux échantillons pour obtenir de bons résultats, la nouvelle approche n'avait besoin que d'une fraction de cela, montrant son efficacité.

Conclusion

La recherche met en lumière de nouvelles stratégies pour utiliser des grands modèles de langage dans la réparation automatisée de programmes. En alignant les sorties des modèles avec les objectifs d'entraînement et en permettant un raffinement complet du programme sans localisation préalable des défauts, l'approche proposée améliore considérablement l'efficacité des méthodes de réparation de programmes. Ce travail jette les bases pour de futures recherches et encourage une réévaluation des flux de travail traditionnels dans la réparation automatique de programmes. Grâce à ce cadre innovant, le potentiel des GML dans les tâches de codage peut être mieux exploité, conduisant à des processus de développement logiciel plus efficaces et efficaces.

Source originale

Titre: Aligning the Objective of LLM-based Program Repair

Résumé: Large language models (LLMs) have achieved decent results on automated program repair (APR). However, the next token prediction training objective of decoder-only LLMs (e.g., GPT-4) is misaligned with the masked span prediction objective of current infilling-style methods, which impedes LLMs from fully leveraging pre-trained knowledge for program repair. In addition, while some LLMs can locate and repair bugs in certain functions using the related artifacts (e.g., test cases), existing methods still depend on statement-level fault localization methods to provide a list of buggy hunks for repair. This restriction hinders LLMs from exploring potential patches beyond the given locations. In this paper, we investigate a new approach to adapt LLMs to program repair. Our core insight is that LLM's APR capability can be greatly improved by simply aligning the output to their training objective and allowing them to refine the whole program without first identifying faulty statements. Based on this insight, we designed D4C, a straightforward prompting framework for APR. D4C can repair 180 bugs correctly in Defects4J, with each patch being sampled only 10 times. This surpasses the SOTA APR methods with perfect fault localization by 10% and reduces the patch sampling number by 90%. Our findings reveal that (1) objective alignment is crucial for fully exploiting LLM's pre-trained capability, and (2) replacing the traditional localize-buggy-hunks-then-repair workflow with direct debugging is more effective for LLM-based APR methods. Thus, we believe this paper introduces a new mindset for harnessing LLMs in APR.

Auteurs: Junjielong Xu, Ying Fu, Shin Hwei Tan, Pinjia He

Dernière mise à jour: 2025-01-01 00:00:00

Langue: English

Source URL: https://arxiv.org/abs/2404.08877

Source PDF: https://arxiv.org/pdf/2404.08877

Licence: https://creativecommons.org/licenses/by/4.0/

Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.

Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.

Plus d'auteurs

Articles similaires