Mémoire de maîtrise (2025)
Résumé
La refactorisation du code est une pratique essentielle en génie logiciel qui consiste à restructurer du code existant pour améliorer sa structure interne, sa lisibilité et sa maintenabilité, sans altérer son comportement ou ses fonctionnalités externes. L’objectif principal est d’améliorer la qualité du code, de réduire sa complexité et de faciliter les modifications futures, rendant ainsi le code plus efficace et évolutif au fil du temps. Toutefois, malgré son rôle crucial dans l’assurance de la qualité et de la maintenabilité à long terme du code, le processus de refactorisation est souvent négligé par les développeurs. Ce phénomène est principalement causé par la nature chronophage de cette pratique, ainsi que par ses importantes exigences en termes d’efforts et de ressources, ce qui en fait souvent une tâche difficile et de faible priorité dans des contextes de cycles de développement rapides. Même si de nombreux outils automatisés, comme des plugins dans les environnements de développement intégrés (IDE, de l’anglais Integrated Development Environments), ont émergé au cours des dernières années pour alléger une partie de la charge de travail, ces outils sont souvent limités dans leur capacité à traiter une large gamme de types de refactorisation. En effet, ils se concentrent généralement uniquement sur des refactorisations simples et couramment utilisées. L’émergence des grands modèles de langage (LLMs, de l’anglais Large Language Models) ces dernières années a suscité un intérêt considérable dans le domaine du génie logiciel, notamment en raison de leurs capacités avancées à résoudre des problèmes. Ces modèles ont déjà été utilisés pour évaluer la qualité du code, ainsi que pour effectuer des réparations automatisées du code. Dans ce mémoire, nous étendons l’application des LLMs au domaine de la refactorisation du code, en étudiant leur capacité à effectuer des tâches de refactorisation. Pour atteindre cet objectif, ce mémoire est divisé en deux sous-objectifs. Dans le premier objectif, nous étudions l’efficacité des LLMs dans l’application d’une large gamme de types de refactorisation. Dans le deuxième objectif, nous examinons comment différents niveaux de contexte influencent la capacité des LLMs à effectuer des tâches de refactorisation. Nous commençons par extraire des informations clés provenant du catalogue de refactorisation de Martin Fowler, telles que les noms des types de refactorisation, ainsi que les instructions détaillées pour les appliquer, afin de concevoir et d’évaluer la performance de cinq types de requêtes différentes (Basées sur aucun exemple, Basées sur deux exemples, Contextuelles, Basées sur des instructions et Basées sur une règle) pour effectuer 61 types de refactorisation vi en utilisant GPT-4o-mini, ainsi que DeepSeek-V3. Pour garantir une évaluation complète, nous utilisons deux ensembles de données : les exemples contenus dans le catalogue de Martin Fowler et des projets GitHub, qui couvrent une large variété de types de refactorisation et des extraits de code réels. Nous évaluons la performance des LLMs dans ces tâches de refactorisation à travers l’évaluation de la préservation sémantique, ainsi que de divers indicateurs de qualité du code, afin d’évaluer l’efficacité de ces différents types de requêtes. Nos résultats suggèrent que, bien que les instructions détaillées soient généralement plus intuitives pour les humains dans le cadre de tâches de génie logiciel telles que la refactorisation, les requêtes formulées selon des règles surpassent les autres types de requêtes, y compris celles basées sur les instructions, lorsqu’elles sont utilisées avec le modèle GPT-4o-mini. De plus, DeepSeek a montré une performance supérieure en présence d’une quantité réduite d’informations contextuelles, alors que les requêtes basées sur le contexte et celles ne comportant aucun exemple ont montré de meilleurs résultats comparativement aux autres types de requêtes.
Statistiques
Total des téléchargements à partir de PolyPublie
Téléchargements par année
Provenance des téléchargements
