Enhancing Software Engineering Tasks with Intelligent Assistant Tools

Arghavan Moradidakhel

Thèse de doctorat (2023)

Accéder à ce document
Disponible
Libre accès au texte intégral dans PolyPublie
Texte Texte • 4MB •

Résumé

Au fil des décennies, diverses recherches ont été entreprises pour développer des outils d’assistance pour soutenir les équipes de développement logiciel à différentes étapes du cycle de développement logiciel, allant de l’ingénierie des exigences aux tâches liées aux tests et à la maintenance du logiciel. L’importance de ces outils découle de leur impact sur la productivité et l’efficacité des développeurs et, par conséquent, sur la qualité du logiciel. Cependant, il est crucial de noter que la fiabilité et l’efficacité de ces outils d’assistance jouent un rôle critique dans la confiance que les développeurs accordent à ces outils ainsi que dans leur adoption. Par conséquent, il est essentiel de bien comprendre les limites de ces outils et de savoir les utiliser judicieusement. De nos jours, des plateformes telles que GitHub hébergent une abondance de données de développement logiciel. Ces données offrent de belles opportunités pour la création de méthodes et d’outils d’assistance aux développeurs logiciels basés sur les données, notamment l’apprentissage automatique (ML) et l’apprentissage profond (DL). Ces approches peuvent révolutionner la création d’outils d’assistance intelligents en génie logiciel (SE) et l’émergence des grands modèles de langage (LLMs) a marqué un tournant important récemment. Dans cette thèse, nous proposons des méthodologies qui utilisent l’apprentissage statistique pour améliorer la justesse et l’efficacité des outils d’assistance intelligents. Trois tâches cruciales du génie logiciel (SE) sont visées : la génération de code, la génération de cas de test, et l’identification d’experts. Nos études sont inspirées par les limitations que nous avons observées dans les outils d’assistance de pointe qui existent présentement. Nous tirons des enseignements des techniques établies en génie logiciel et des théories pertinentes, et pro- posons des méthodes qui intègrent les capacités des techniques d’analyse de code avec le pouvoir génératif des LLMs, pour répondre à ces limitations. Dans notre première étude, nous évaluons la qualité du code généré par un outil d’assistance à la programmation incorporant un LLM, Github Copilot, en le comparant à des humains pour la tâche de génération de code. Nous mettons en lumière ses limitations et ses capacités, explorant comment, malgré ses limites, il peut efficacement servir d’outil de programmation en binôme. Nos résultats révèlent que bien que le code généré par des LLMs puisse contenir plus de bogues que celui élaboré par des développeurs novices humains, le coût de réparation du code défectueux généré par un LLM est plus bas selon différentes mesures. S’appuyant sur nos découvertes, nous proposons l’utilisation d’un outil de réparation de code défectueux afin d’accroître la fiabilité du code généré par un outil d’assistance à la programmation basé sur les LLMs, réduisant ainsi le besoin de vérification et d’intervention humaine. De plus, nous construisons une taxonomie des bogues rencontrés fréquement dans du code généré par LLMs. Cette taxonomie peut constituer une ressource précieuse pour des études futures visant à améliorer les outils d’assistance et les techniques d’assurance qualité, telles que les approches de Mutation Testing (MT), afin de leur permettre de s’adapter aux caractéristiques des bogues qui se manifestent dans le code généré par LLMs. Dans notre deuxième étude, nous proposons une méthode qui intègre les LLMs pour générer des cas de test efficaces. Nous commençons par évaluer l’efficacité des cas de test générés par les LLMs pour révéler des bogues, en utilisant du Mutation Testing (MT). Il s’agit de la première étude à utiliser le MT pour évaluer l’efficacité des cas de test générés par les LLMs pour la détection de bogues. Notre méthodologie comprend plusieurs étapes de post-traitement visant à réduire l’effort nécessaire pour valider la correction des cas de test et évaluer leur efficacité. Sur la base de cette évaluation, nous proposons une approche d’apprentissage basée sur l’utilisation de “prompt” contenant des “mutants survivants”. Les résultats de nos analyses montrent que cette approche permet d’améliorer l’efficacité des cas de test générés par les LLMs, surpassant diverses techniques de référence et outils de pointe provenant de la litérature et de l’industrie. Une autre tâche essentielle dans le développement et la maintenance de logiciels est l’identification d’experts possédant les compétences nécessaires pour une tâche ou un projet spécifique. Une évaluation fiable de l’expertise des développeurs est une étape cruciale pour effectuer une assignation de développeurs à des tâches qui relève de leur champ d’expertise. Une assignation adéquate contribue à l’exécution efficace de diverses activités dans des délais optimaux. Ainsi, dans les deux dernières études de cette thèse, nous proposons et évaluons des modèles de représentation et d’évaluation de l’expertise des développeurs à partir de leurs contributions à des projets open source. Dans notre troisième étude, nous proposons une méthode permettant de représenter l’expertise des développeurs dans un espace de plongements vectoriels (“embedding space”). Une représentation numérique de l’expertise des développeurs est essentielle pour diverses tech- niques d’apprentissage automatique, notamment la classification des développeurs dans différentes catégories ou la sélection de candidats pour des tâches spécifiques. Nous utilisons doc2vec et introduisons une méthode pour représenter l’expertise des développeurs dans un espace de plongements. Par rapport aux techniques de pointe existantes, nos résultats démontrent que cette méthode offre des performances supérieures pour l’évaluation de l’expertise et du domaine de spécialisation des développeurs. Dans notre quatrième étude, nous proposons une approche pour modéliser l’expertise des développeurs en se basant sur la distribution des motifs syntaxiques dans leur code. Ce concept s’inspire d’une théorie linguistique connue sous le nom de loi de Zipf. Nos résultats révèlent que la distribution des motifs syntaxiques dans le code rédigé par des experts peut être distinguée de celui des novices. La distribution Zipf du code des experts présente une queue plus longue, tandis que dans le code des novices, elle présente un sommet plus large, signifiant des motifs plus répétitifs. Les résultats présentés dans cette thèse représentent des étapes importantes vers l’amélioration de l’efficacité et de la fiabilité des outils d’assistance développés pour soutenir les équipes de développement logiciel à différentes étapes du cycle de développement du logiciel. Nous croyons que les limites que nous avons identifiées, ainsi que les méthodes proposées pour les résoudre, aideront les chercheurs et les praticiens à améliorer la fiabilité de ces outils. Les résultats présentés dans cette thèse représentent des étapes importantes visant à améliorer la précision et l’efficacité des outils d’assistance intelligents. Nous croyons que les connaissances que nous avons identifiées aideront les chercheurs et les praticiens à automatiser différentes tâches en génie logiciel.

Programme:
Génie informatique
Directeurs ou directrices:
Adresse URL de PolyPublie:
Université/École:
Polytechnique Montréal
OAI:
oai:publications.polymtl.ca:57120
ORCID
Date du dépôt:
10 mai 2024 10:09
Dernière modification:
14 oct. 2026 14:16
Citer en APA 7:
Moradidakhel, A. (2023). Enhancing Software Engineering Tasks with Intelligent Assistant Tools [Thèse de doctorat, Polytechnique Montréal]. PolyPublie. https://publications.polymtl.ca/57120/

Statistiques

Total des téléchargements à partir de PolyPublie

Téléchargements par année

Provenance des téléchargements

Actions réservées au personnel

Afficher document
Afficher document