Simple Science

La science de pointe expliquée simplement

# Informatique# Génie logiciel# Langages de programmation

Une nouvelle méthode pour des jeux de données de bugs complets

On vous présente une méthode pour créer des ensembles de données de bogues précis et variés pour améliorer les logiciels.

― 7 min lire


Nouveau Méthode deNouveau Méthode deDataset de Bugsbugs uniques.logiciels avec plus d'un million deTransformer la maintenance des
Table des matières

Les jeux de données de bugs sont essentiels pour améliorer le développement logiciel et régler les problèmes liés aux bugs. Il y a deux grands soucis avec les jeux de données actuels : ils sont soit petits et précis, soit grands mais pas fiables. Les petits jeux de données contiennent souvent des bugs soigneusement vérifiés, tandis que les plus gros se basent généralement sur un traitement de texte basique, ce qui peut mener à des erreurs. Cet article présente une nouvelle méthode pour collecter un jeu de données de bugs précis et complet qui fonctionne à travers différents langages de programmation.

Approche de Collecte de Bugs

La nouvelle méthode combine deux stratégies principales : un traqueur de bugs et un injecteur de bugs. Le traqueur de bugs relie les dépôts de code logiciel avec des dépôts externes de bugs. Ça aide à trouver des infos détaillées sur les bugs. L'injecteur de bugs crée des bugs spécifiques en modifiant du code valide et en effectuant des tests pour voir si ça plante.

Traqueur de Bugs

La première partie de la méthode est le traqueur de bugs. Il recueille des données réelles sur des bugs provenant de diverses sources. Pour ça, il lie des projets logiciels sur des plateformes comme GitHub avec des dépôts externes comme la National Vulnerability Database (NVD) et OSS-Fuzz. La NVD liste les vulnérabilités dans de nombreux produits logiciels. OSS-Fuzz aide à identifier les bugs via des tests.

Grâce au traqueur de bugs, les chercheurs peuvent découvrir quels types de bugs existent et rassembler des infos sur la façon dont ces bugs ont été corrigés. Ce processus fournit des Métadonnées utiles, comme le type de bug et la gravité du problème.

Injecteur de Bugs

La deuxième partie de la méthode est l'injecteur de bugs. Cet outil génère des bugs spécifiques à un projet. Pour commencer, l'injecteur de bugs utilise du code qui a été vérifié comme fonctionnant correctement et y apporte des changements, ou un "bruit", pour le faire échouer aux tests.

L'avantage de l'injecteur de bugs, c'est qu'il crée des bugs uniques spécifiques à un projet. Ça veut dire que les bugs reflètent le style de code et les pratiques spécifiques de ce projet, ce qui les rend plus pertinents pour les tests et les corrections dans un contexte réel.

Avantages du Nouveau Jeu de Données

Le nouveau jeu de données de bugs créé à partir de cette méthode contient un nombre immense de bugs, provenant de plusieurs langages de programmation et de projets logiciels divers. Il inclut à la fois des bugs collectés à partir de sources réelles et ceux générés artificiellement.

En tout, le jeu de données compte plus d'un million de bugs, ce qui en fait le plus grand de son genre. Cette collection étendue fournit une riche source d'infos pour aider dans diverses tâches de maintenance logicielle, comme la détection de bugs, la localisation de défauts et la compréhension de comment réparer les programmes.

Défis des Jeux de Données de Bugs Existants

Les jeux de données de bugs actuels font face à plusieurs problèmes :

  1. Qualité des Données et Scalabilité : Collecter des bugs manuellement garantit la qualité mais n'est pas pratique pour de grands jeux de données. D'un autre côté, les méthodes automatisées peuvent rassembler beaucoup de données mais manquent souvent des détails importants.
  2. Diversité Linguistique : La plupart des jeux de données se concentrent sur un seul langage de programmation, ce qui limite leur applicabilité à différents projets.
  3. Manque de Métadonnées : Beaucoup de jeux de données ne fournissent pas assez d'infos sur chaque bug, rendant l'analyse efficace difficile.
  4. Manque de Tests : Très peu de jeux de données sont accompagnés de cas de test pour vérifier les corrections des bugs. Les cas de test sont essentiels pour confirmer que les bugs ont été correctement traités.

En s'attaquant à ces défis, le nouveau jeu de données offre un outil plus complet pour les chercheurs et développeurs travaillant dans la maintenance logicielle.

Comment Fonctionne la Nouvelle Méthode

Processus de Collecte de Données

Le processus de collecte de données implique deux composants principaux : le traqueur de bugs et l'injecteur de bugs.

Le traqueur de bugs relie le code existant avec des bugs connus provenant de sources externes. D'abord, il identifie les rapports de bugs pertinents de la NVD et d'OSS-Fuzz, puis utilise ces rapports pour rassembler les changements de code correspondants sur GitHub. Ça aide les chercheurs à voir comment chaque bug a été corrigé en examinant le code source.

L'injecteur de bugs commence avec du code vérifié et introduit délibérément des défauts selon certaines règles. Ce processus permet à l'injecteur de créer différents types de bugs. Après la génération du code "bruyant", il est testé par rapport à sa suite de tests originale pour vérifier les problèmes. Si des tests échouent, cela fournit les infos nécessaires pour caractériser le bug nouvellement introduit.

Collection de Métadonnées

En combinant les données du traqueur de bugs et de l'injecteur de bugs, la nouvelle méthode capture non seulement le bug lui-même mais aussi des métadonnées importantes. Ça inclut le code original avant l'introduction du bug, le code corrigé après la correction du bug, des détails sur le type de bug et des infos sur les cas de test qui peuvent reproduire les problèmes.

Ces données complètes permettent une meilleure analyse et compréhension des bugs, contribuant à des solutions plus efficaces dans la maintenance logicielle.

Importance de la Diversité dans les Langages de Programmation

La plupart des jeux de données de bugs existants se concentrent sur un seul langage de programmation, ce qui limite leur utilisabilité. En revanche, le nouveau jeu de données inclut des bugs de plusieurs langages de programmation, permettant des applications plus larges dans différents environnements de codage. C'est crucial car différents langages ont des caractéristiques et des bugs typiques différents.

Contribution aux Tâches de Maintenance Logicielle

Le jeu de données offre des bénéfices significatifs pour des tâches de maintenance logicielle comme :

  • Détection de Bugs : Avec un ensemble de bugs plus vaste et diversifié, les développeurs peuvent améliorer leurs outils de détection, conduisant à une meilleure identification des problèmes dans leur code.
  • Localisation des Défauts : Les infos détaillées aident les développeurs à identifier plus efficacement où les problèmes surviennent dans leurs programmes.
  • Réparation Automatisée de Programmes : Le jeu de données peut être utilisé pour entraîner des algorithmes qui corrigent automatiquement les bugs, économisant temps et ressources.

Comparaison avec D'autres Jeux de Données de Bugs

Le nouveau jeu de données se distingue des efforts précédents de plusieurs manières :

  • Connexion des Bases de Code aux Dépôts de Bugs : La méthode de liaison directe du code avec les dépôts de bugs permet un suivi plus précis des bugs et des corrections.
  • Bugs Spécifiques aux Projets : La capacité de générer des bugs spécifiques à un projet fournit des données pertinentes que les jeux de données généraux n'offrent généralement pas.

Conclusion

La nouvelle approche de collecte de jeux de données de bugs représente un grand pas en avant dans le domaine de la maintenance logicielle. Avec plus d'un million de bugs rassemblés provenant de langages de programmation et de projets divers, ce jeu de données est inestimable pour les développeurs et les chercheurs. En s'attaquant aux défis courants rencontrés par les jeux de données existants, la nouvelle méthode renforce le potentiel d'amélioration de la qualité et de la fiabilité des logiciels dans des applications réelles.

Source originale

Titre: PreciseBugCollector: Extensible, Executable and Precise Bug-fix Collection

Résumé: Bug datasets are vital for enabling deep learning techniques to address software maintenance tasks related to bugs. However, existing bug datasets suffer from precise and scale limitations: they are either small-scale but precise with manual validation or large-scale but imprecise with simple commit message processing. In this paper, we introduce PreciseBugCollector, a precise, multi-language bug collection approach that overcomes these two limitations. PreciseBugCollector is based on two novel components: a) A bug tracker to map the codebase repositories with external bug repositories to trace bug type information, and b) A bug injector to generate project-specific bugs by injecting noise into the correct codebases and then executing them against their test suites to obtain test failure messages. We implement PreciseBugCollector against three sources: 1) A bug tracker that links to the national vulnerability data set (NVD) to collect general-wise vulnerabilities, 2) A bug tracker that links to OSS-Fuzz to collect general-wise bugs, and 3) A bug injector based on 16 injection rules to generate project-wise bugs. To date, PreciseBugCollector comprises 1057818 bugs extracted from 2968 open-source projects. Of these, 12602 bugs are sourced from bug repositories (NVD and OSS-Fuzz), while the remaining 1045216 project-specific bugs are generated by the bug injector. Considering the challenge objectives, we argue that a bug injection approach is highly valuable for the industrial setting, since project-specific bugs align with domain knowledge, share the same codebase, and adhere to the coding style employed in industrial projects.

Auteurs: He Ye, Zimin Chen, Claire Le Goues

Dernière mise à jour: 2024-03-09 00:00:00

Langue: English

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

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

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