<  Retour au portail Polytechnique Montréal

Enhancing Software Engineering Tasks with Intelligent Assistant Tools

Arghavan Moradidakhel

Thèse de doctorat (2023)

[img] Accès restreint: Personnel autorisé jusqu'au 10 mai 2025
Conditions d'utilisation: Tous droits réservés
Afficher le résumé
Cacher le résumé

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.

Abstract

Over the decades, various research has been done on developing assistant tools for various stages of the software development lifecycle, ranging from requirement engineering to tasks related to software testing and maintenance. The importance of these tools stems from their impact on developers’ productivity and, consequently, on software quality. However, it is crucial to note that the correctness, and effectiveness of these assistant tools play a pivotal role in shaping developers’ trust and willingness to integrate them. This underscores the importance of comprehending the limitations of these tools and developing methods that can be incorporated to improve them. Nowadays, platforms such as GitHub host an abundance of data related to various types of code development. This data presents significant potential for proposing methodologies to enhance data-driven assistant tools for software development tasks. Additionally, Machine Learning (ML) and Deep Learning (DL) have introduced new possibilities for developing diverse methods that can revolutionize the creation of intelligent assistant tools in Software Engineering (SE). A noteworthy milestone in this evolution is the emergence of Large Language Models (LLMs). In this thesis, we propose methodologies that employ statistical learning to enhance the correctness and effectiveness of intelligent assistant tools in three pivotal tasks within SE: code generation, test case generation, and expert identification. Our studies are inspired by the limitations that we observed in state-of-the-art assistant tools. We draw insights from established SE techniques and relevant theories and propose methods that incorporate the capabilities of ML/DL techniques, alongside the generative power of LLMs, to address these limitations. In our first study, we evaluate the quality of code generated by an AI programming assistant tool incorporating LLM, comparing it to human-generated code. We shed light on its limitations and capabilities and explore how, despite its limitations, it can effectively serve as a pair programming tool. Our findings reveal that while LLM-generated code may contain more bugs than code crafted by human novices, the cost of repairing LLM-generated buggy code is lower in terms of different metrics. Building on our findings, we propose the use of a programming repair tool to increase the reliability of code generated by an LLM-based programming assistant tool, thereby diminishing the need for human verification and intervention. Additionally, we extract a taxonomy of bugs in code generated by LLMs that can serve as a valuable resource for future studies to enhance assistant tools and techniques, such as Mutation Testing (MT) approaches, to adapt them to the characteristics of the bugs that arise in code generated by LLMs. In our second study, we focus on developing a method that integrates LLMs to generate effective test cases. We start by evaluating the effectiveness of the test cases generated by LLMs in revealing bugs by using Mutation Testing (MT). This is the first study to employ MT to evaluate the effectiveness of test cases generated by LLMs in revealing bugs. Our methodology involves several post-processing steps aimed at minimizing the effort required to validate test cases’ correctness and assess their effectiveness. Based on this evaluation, we propose a prompt-based learning approach that uses surviving mutants to enhance the effectiveness of LLM-generated test cases. Our proposed method outperforms various baselines and state-of-the-art tools. An essential task in software development and maintenance is identifying an expert with the necessary skills for a specific task or project. Accurate assessments of developers’ expertise are crucial steps toward assigning developers to the right tasks, contributing to the efficient execution of various activities within optimal timeframes. Hence, in the next two studies of this thesis, we explore the representation and the assessment of developers’ expertise based on their contributions to open-source projects. In our third study, we shift our attention to proposing a method to represent the domain expertise of developers in an embedding space. Numerical representation of the domain expertise of developers is essential for various ML techniques, including developer classification into different domains or the selection of candidates for specific tasks. We utilize doc2vec and introduce a method for representing the domain expertise of developers in an embedding space. Our findings demonstrate superior performance in representing developers’ expertise and assessing their technical specialization compared to state-of-the-art techniques. The results of this study have applications as a step towards diverse downstream tasks, such as developer task/issue assignment and job posting candidate selection. In our fourth study, we propose an approach to modeling the expertise of developers based on the distribution of syntactical patterns in their code. This concept draws inspiration from a linguistic theory known as Zipf’s law. Our result reveals that the distribution of syntax patterns in code written by experts can be distinguished from novices. This distribution in experts’ code exhibits a longer tail, while in novices’ code shows a wider vertex, signifying more repetitive patterns. The results presented in this thesis are important steps toward enhancing the correctness and effectiveness of intelligent assistant tools. We believe that the insights we have identified will assist researchers and practitioners in automating different SE tasks.

Département: Département de génie informatique et génie logiciel
Programme: Génie informatique
Directeurs ou directrices: Michel Desmarais, David Barrera et Foutse Khomh
URL de PolyPublie: https://publications.polymtl.ca/57120/
Université/École: Polytechnique Montréal
Date du dépôt: 10 mai 2024 10:09
Dernière modification: 11 mai 2024 10:10
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