Simple Science

La science de pointe expliquée simplement

# Informatique# Génie logiciel# Intelligence artificielle# Apprentissage automatique

S'attaquer au problème des tests instables

Un cadre proposé vise à s'attaquer aux tests fragiles dans le développement logiciel.

― 5 min lire


Réparer le cadre desRéparer le cadre destests instablestests instables dans le code.Une approche innovante pour régler les
Table des matières

Les Tests instables, c'est un truc courant dans le développement logiciel. Ces tests passent parfois et échouent parfois, sans que le code qu'ils testent ait changé. Cette incohérence peut embrouiller les développeurs et leur faire perdre du temps. Par exemple, si un test échoue, les développeurs peuvent penser qu'il y a un souci avec le code. Mais en fait, l'échec peut juste venir du test lui-même qui est instable.

Pourquoi les tests instables sont-ils un problème ?

Les tests instables peuvent causer des retards dans le déploiement des logiciels. Beaucoup de grandes boîtes, comme Google et Microsoft, ont reporté des milliers d’échecs de tests instables. Par exemple, Google a eu environ 1,6 million d'échecs de tests par jour, avec un petit pourcentage causé par des tests instables. Détecter et corriger ces tests instables demande beaucoup d'efforts et peut ralentir le processus de développement.

Causes des tests instables

Plusieurs facteurs peuvent rendre les tests instables :

  1. Problèmes de timing : Les tests peuvent échouer à cause du timing de certaines opérations, surtout dans les systèmes qui exécutent plusieurs tâches en même temps.
  2. Configuration de l'environnement : Des différences dans les environnements de test peuvent affecter les résultats des tests.
  3. Dépendances externes : Les tests instables peuvent dépendre de systèmes externes ou de données qui peuvent changer, causant des incohérences.
  4. Conditions de course : Ça se produit quand le timing des événements affecte le comportement du logiciel.

Comment sont gérés les tests instables ?

Actuellement, beaucoup de développeurs détectent les tests instables en les relançant ou en les inspectant manuellement. Bien que certains chercheurs aient utilisé l'apprentissage automatique pour prédire les tests instables, il y a eu moins d'attention sur comment aider les développeurs à corriger ces tests une fois qu'ils sont identifiés comme instables.

Solution proposée

Pour aider les développeurs à corriger les tests instables, un nouveau cadre a été proposé. Ce cadre catégorise automatiquement les corrections de tests instables en fonction du code des tests. En analysant seulement le code des tests, le cadre peut suggérer quel type de correction peut être nécessaire.

Catégories de corrections

La solution proposée inclut 13 catégories de corrections pour les tests instables. Ces catégories aident les développeurs à savoir où concentrer leur attention. Voici quelques exemples :

  1. Changer l'assertion : Modifier ce que le test vérifie pour améliorer sa fiabilité.
  2. Réinitialiser les variables : S'assurer que les variables sont réinitialisées avant que les tests ne soient exécutés.
  3. Gérer les exceptions : Ajouter une meilleure gestion des erreurs pour éviter les échecs dus à des entrées inattendues.

Modèles de langage en action

Le cadre utilise des modèles de langage pré-entraînés comme CodeBERT et UniXcoder. Ces modèles analysent le code des tests et prédisent quelle catégorie de correction s'applique. Quelques techniques sont utilisées pour améliorer les prédictions. Une méthode implique l'apprentissage par Few-Shot (FSL), qui permet aux modèles d'apprendre à partir d'un nombre limité d'exemples.

Évaluation du cadre

Pour évaluer l'efficacité de ce nouveau cadre, les chercheurs ont mené des expériences pour comparer les performances des deux modèles de langage. Les résultats ont montré que :

  • UniXcoder a généralement mieux prédit les catégories de correction que CodeBERT.
  • FSL n'a pas vraiment amélioré les prédictions, probablement à cause de la taille limitée du dataset disponible pour l'entraînement.

Les modèles ont bien performé pour prédire les catégories de correction, avec la plupart des catégories atteignant une haute précision. Ça veut dire que le cadre peut fournir des conseils utiles aux développeurs en corrigeant les tests instables.

Création d'un dataset

Pour construire un bon modèle de prédiction, il était essentiel d'avoir un dataset étiqueté de tests instables et leurs corrections correspondantes. Les datasets existants avaient des limitations, donc les chercheurs ont créé leur propre dataset en analysant différentes sources. Ils se sont concentrés sur les tests pouvant être corrigés en changeant le code des tests, plutôt que ceux nécessitant des changements dans le code de production ou la configuration de l'environnement.

Défis à relever

Bien que le cadre proposé soit utile, il y a encore des défis à relever :

  1. Limitations des données : Il faut plus de données pour de meilleures prédictions. Les performances du modèle peuvent faiblir si les données d'entraînement sont insuffisantes.
  2. Généralisation : Le cadre doit être testé sur différents langages de programmation et des datasets plus variés pour s'assurer qu'il fonctionne bien dans divers environnements.
  3. Tests instables complexes : Certains tests instables peuvent nécessiter plusieurs corrections, ce que le cadre actuel pourrait ne pas pouvoir gérer.

Développements futurs

Le cadre peut être étendu et amélioré. Les efforts futurs se concentreront sur la construction de plus grands datasets pour affiner encore l'exactitude du modèle. De plus, la recherche pourrait mener à des modèles de réparation entièrement automatiques qui peuvent suggérer des changements de code spécifiques en fonction des tests instables identifiés.

Conclusion

Les tests instables représentent un défi important pour les développeurs. Le cadre proposé offre une solution prometteuse pour catégoriser les corrections en fonction du code des tests, fournissant des conseils pratiques aux développeurs. L'utilisation de modèles de langage avancés montre un potentiel pour aider les développeurs à identifier rapidement les changements nécessaires. Les travaux futurs amélioreront les capacités du cadre, pouvant mener à des outils d'automatisation plus robustes pour la réparation des tests dans le développement logiciel.

Source originale

Titre: FlakyFix: Using Large Language Models for Predicting Flaky Test Fix Categories and Test Code Repair

Résumé: Flaky tests are problematic because they non-deterministically pass or fail for the same software version under test, causing confusion and wasting development effort. While machine learning models have been used to predict flakiness and its root causes, there is much less work on providing support to fix the problem. To address this gap, in this paper, we focus on predicting the type of fix that is required to remove flakiness and then repair the test code on that basis. We do this for a subset of flaky tests where the root cause of flakiness is in the test itself and not in the production code. One key idea is to guide the repair process with additional knowledge about the test's flakiness in the form of its predicted fix category. Thus, we first propose a framework that automatically generates labeled datasets for 13 fix categories and trains models to predict the fix category of a flaky test by analyzing the test code only. Our experimental results using code models and few-shot learning show that we can correctly predict most of the fix categories. To show the usefulness of such fix category labels for automatically repairing flakiness, we augment the prompts of GPT-3.5 Turbo, a Large Language Model (LLM), with such extra knowledge to request repair suggestions. The results show that our suggested fix category labels, complemented with in-context learning, significantly enhance the capability of GPT-3.5 Turbo in generating fixes for flaky tests. Based on the execution and analysis of a sample of GPT-repaired flaky tests, we estimate that a large percentage of such repairs (roughly between 51% and 83%) can be expected to pass. For the failing repaired tests, on average, 16% of the test code needs to be further changed for them to pass.

Auteurs: Sakina Fatima, Hadi Hemmati, Lionel Briand

Dernière mise à jour: 2024-08-30 00:00:00

Langue: English

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

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

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