Simple Science

La science de pointe expliquée simplement

# Informatique# Génie logiciel

Présentation de Synbciatr : Une nouvelle méthode pour réparer le code de test

Synbciatr corrige automatiquement les cas de test obsolètes dans le développement logiciel.

― 9 min lire


Synbciatr : CorrectionSynbciatr : Correctionautomatique du code detestde test obsolètes.Une solution automatisée pour des cas
Table des matières

Dans le développement logiciel, il est super important que les mises à jour du code de test se fassent en même temps que celles du code de production. Souvent, les mises à jour des tests prennent du retard, ce qui peut poser des problèmes comme des projets qui ne compilent pas correctement ou d'autres soucis. Certaines méthodes existent déjà pour utiliser des modèles de langage afin de réparer les tests qui sont devenus obsolètes à cause de ces différences, surtout pour des problèmes liés à la syntaxe. Mais un défi majeur est que les infos nécessaires pour réparer ces tests ne sont pas toujours disponibles directement, rendant la tâche compliquée pour les gros projets.

Cet article présente une nouvelle approche appelée Synbciatr, qui vise à réparer automatiquement les cas de test obsolètes. La méthode se concentre sur la construction de contextes pertinents à partir de l'ensemble du dépôt de code pour faciliter le processus de réparation.

Le Besoin de Réparer le Code de Test

Lorsque le logiciel est mis à jour, ça peut changer plusieurs parties du code, et les tests qui vérifient ces changements doivent aussi être mis à jour. Si le code de test associé ne suit pas les changements du code de production, il risque de ne pas fonctionner correctement, ce qui peut causer des erreurs.

De nombreuses techniques existantes ont essayé de répondre à ce besoin de mise à jour du code de test. Celles-ci s'appuient généralement sur des modèles de langage, qui peuvent traiter le code et proposer des corrections. Mais ces modèles ont souvent du mal avec les dépôts plus gros où le contexte de ce qui doit être corrigé n'est pas facilement identifiable.

Les Défis de la Réparation des Tests

Quand les développeurs réparent manuellement les cas de test, ils collectent des infos sur les parties pertinentes du code qui ont changé. Cependant, avec les méthodes automatisées, le contexte nécessaire pour réparer les tests n'est pas toujours clair. Les méthodes actuelles se concentrent souvent uniquement sur les parties spécifiques du code qui ont changé, laissant de côté le contexte important.

Un problème courant est quand une signature de méthode change. Ça fait référence aux modifications du nom d'une méthode, du type de retour, ou des types de ses paramètres. De tels changements peuvent entraîner des erreurs de compilation si les tests associés ne sont pas aussi mis à jour. De plus, simplement entrer les signatures originales et nouvelles dans un modèle de langage ne mène souvent pas à des corrections efficaces parce que le bon contexte fait défaut.

Pour réparer précisément ces cas, il est crucial de capturer et de fournir le bon contexte, que nous appelons Contextes Axés sur la Réparation de Test (TROCtx).

Présentation de Synbciatr

Synbciatr propose une nouvelle manière de réparer automatiquement des tests devenus obsolètes à cause de changements dans les signatures de méthode. Son objectif principal est de rassembler le contexte pertinent du dépôt de code et de l'utiliser pour informer le modèle de langage lors de sa tâche de réparation. Pour cela, trois types de TROCtx sont définis : contextes de classe, contextes d'utilisation et contextes d'environnement.

Types de Contextes

  1. Contextes de Classe (ClassCtx) fournissent des informations sur les nouvelles classes introduites dans la signature de méthode mise à jour.
  2. Contextes d'Utilisation (UsageCtx) se concentrent sur la manière dont la méthode mise à jour est appelée dans tout le code.
  3. Contextes d'Environnement (EnvCtx) donnent des détails sur l'environnement environnant dans lequel la méthode opère, y compris les classes parentes et le code connexe.

Chacun de ces types de contexte joue un rôle important pour s'assurer que le modèle de langage a suffisamment d'infos pour corriger précisément les tests.

Comment Fonctionne Synbciatr

Le processus suivi par Synbciatr implique plusieurs étapes clés. D'abord, il collecte les TROCtx nécessaires à partir de l'ensemble du dépôt de code en effectuant une analyse statique, qui consiste à examiner le code sans l'exécuter. En utilisant un outil appelé Language Server, Synbciatr peut demander des informations sur les différents contextes.

Collecte de Contexte

Lors de la collecte de contexte, Synbciatr analyse les changements apportés à la méthode en question et identifie les identifiants pertinents qui correspondent aux nouveaux et anciens paramètres de méthode. Après les avoir identifiés, Synbciatr demande des détails au Language Server sur ces identifiants.

Réordonnancement des Contextes

Après avoir collecté les contextes, Synbciatr utilise ce qu'on appelle des Réévaluateurs Neuraux pour prioriser les contextes les plus pertinents pour la tâche à accomplir. Cela se fait en créant des requêtes basées sur le code de test original et en les utilisant pour évaluer la pertinence des contextes collectés. Les contextes les mieux classés sont ensuite sélectionnés pour être utilisés par le modèle de langage.

Génération du Prompt de Réparation

Une fois les contextes pertinents rassemblés et priorisés, Synbciatr prépare un prompt complet pour le modèle de langage. Ce prompt inclut les informations nécessaires, comme les changements apportés à la méthode, le code de test original et les TROCtx identifiés. Ainsi, le modèle de langage a tout le contexte dont il a besoin pour générer une version réparée du cas de test.

Évaluation de l'Efficacité de Synbciatr

Pour tester l'efficacité de Synbciatr, la méthode a été mise à l'épreuve par rapport à des approches existantes. Un jeu de données spécial a été créé, comprenant divers cas de test devenus obsolètes en raison de changements dans leurs méthodes associées. Les principaux objectifs étaient de voir à quelle fréquence Synbciatr pouvait réparer avec précision les tests et de comparer sa performance avec deux autres méthodes.

Jeu de Données de Référence

Un jeu de données de référence a été créé en filtrant et en raffinant des échantillons existants provenant de projets Java populaires sur GitHub. Après avoir nettoyé le jeu de données, il reste un total de 137 échantillons, qui étaient divers dans leurs types de changements syntaxiques.

Métriques de Performance

Plusieurs métriques ont été utilisées pour évaluer la performance de Synbciatr. Ces métriques incluent :

  • Taux de Réussite Syntaxique (SPR) : Cela mesure combien des cas de test générés passent la validation syntaxique.
  • CodeBLEU : Cette métrique vérifie la similarité des cas de test générés par rapport à la vérité de terrain, qui est le résultat attendu.
  • Correspondance d'Intent : Cette métrique évalue si l'intention derrière le cas de test original a été préservée dans la version réparée.

Les résultats ont montré que Synbciatr surpasse les deux méthodes de base dans toutes les métriques testées, prouvant sa capacité à réparer avec précision des tests obsolètes.

Aborder l'Impact des TROCtx

Une partie de l'évaluation s'est concentrée sur combien la construction des TROCtx influençait la performance globale de Synbciatr. En comparant Synbciatr à Naivellm, qui ne utilise pas les TROCtx, il était évident que l'inclusion du contexte réduisait significativement le nombre de sorties incorrectes, connues sous le nom d'hallucinations.

Réduction des Hallucinations

Les hallucinations font référence aux instances où le modèle de langage génère du code qui fait référence à des méthodes, des variables ou des classes qui n'existent pas dans le contexte. En fournissant des TROCtx pertinents, Synbciatr a pu réduire considérablement le nombre de ces occurrences.

Analyse des Échecs

Malgré son succès, il y a eu des cas où Synbciatr n'a pas réussi à réparer les cas de test comme prévu. L'analyse a révélé plusieurs raisons communes pour ces échecs :

  1. Classes Non Importées : Dans certains cas, le code généré faisait référence à des classes qui n'étaient pas importées, ce qui a entraîné des erreurs.
  2. Changements Complexes : Parfois, les changements dans la méthode ciblée étaient trop complexes pour que les contextes actuels puissent s'y adapter, menant à des hallucinations obsolètes.
  3. Échecs de Construction de Contexte : Il y a eu des cas où le Language Server n'a pas pu collecter les contextes nécessaires en raison de problèmes avec la configuration du dépôt.

Considérations d'Efficacité

Le processus de collecte des TROCtx ajoute un peu de temps à l'opération globale de réparation des tests avec Synbciatr par rapport à Naivellm. Cependant, le compromis pour ce temps supplémentaire est une meilleure précision et moins d'erreurs dans les tests générés. Le temps moyen pris par Synbciatr pour générer des réparations a été trouvé dans une fourchette acceptable pour les développeurs.

Conclusion

En conclusion, Synbciatr présente une méthode utile pour réparer automatiquement des cas de test obsolètes causés par des changements dans le code de production. En collectant et en utilisant efficacement le contexte pertinent, il a montré qu'il surpasse significativement les méthodes existantes, produisant des réparations de tests plus précises et réussies. Les résultats positifs illustrent le potentiel d'utiliser un contexte bien construit pour améliorer les capacités des modèles de langage dans les tâches de développement logiciel. Cette approche a non seulement pour but de faciliter la tâche des développeurs, mais contribue également à la fiabilité et à l'efficacité globales des pratiques de test logiciel.

Source originale

Titre: Fix the Tests: Augmenting LLMs to Repair Test Cases with Static Collector and Neural Reranker

Résumé: During software evolution, it is advocated that test code should co-evolve with production code. In real development scenarios, test updating may lag behind production code changing, which may cause compilation failure or bring other troubles. Existing techniques based on pre-trained language models can be directly adopted to repair obsolete tests caused by such unsynchronized code changes, especially syntactic-related ones. However, the lack of task-oriented contextual information affects the repair accuracy on large-scale projects. Starting from an obsolete test, the key challenging task is precisely identifying and constructing Test-Repair-Oriented Contexts (TROCtxs) from the whole repository within a limited token size. In this paper, we propose SYNTER (SYNtactic-breaking-changes-induced TEst Repair), a novel approach based on LLMs to automatically repair obsolete test cases via precise and concise TROCtxs construction. Inspired by developers' programming practices, we design three types of TROCtx: class context, usage context, and environment context. Given an obsolete test case to repair, SYNTER firstly collects the related code information for each type of TROCtx through static analysis techniques automatically. Then, it generates reranking queries to identify the most relevant TROCtxs, which will be taken as the repair-required key contexts and be input to the large language model for the final test repair. To evaluate the effectiveness of SYNTER, we construct a benchmark dataset that contains a set of obsolete tests caused by syntactic breaking changes. The experimental results show that SYNTER outperforms baseline approaches both on textual- and intent-matching metrics. With the augmentation of constructed TROCtxs, hallucinations are reduced by 57.1%.

Auteurs: Jun Liu, Jiwei Yan, Yuanyuan Xie, Jun Yan, Jian Zhang

Dernière mise à jour: 2024-11-04 00:00:00

Langue: English

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

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

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