Les systèmes logiciels évoluent rapidement tout au long de leur cycle de vie. Les développeurs ne cessent d’ajouter de nouvelles fonctionnalités pour satisfaire les besoins des clients ou corriger des erreurs. Cependant, ces activités accroissent la complexité du logiciel et entraînent souvent des effets secondaires connus sous le nom de "code smells" ou mauvaises pratiques de programmation. Les mauvaises pratiques de code, assez fréquentes, sont caractérisées par de trop grandes classes (ou Blob) qui représentent une mauvaise pratique de conception ou d’implémentation de la part des développeurs. En effet, les développeurs placent souvent des méthodes sémantiquement non liées dans une seule et grande classe. Cette mauvaise pratique aboutit généralement à un logiciel difficile à comprendre, à entretenir et à faire évoluer, offrant parfois même une performance réduite.
Pour améliorer la qualité des logiciels, la technique la plus utilisée est le refactoring qui consiste à modifier la structure interne du code source tout en préservant son comportement externe. Pour corriger ces Blobs, l’opération de refactoring recommandée est d’effectuer un ‘Extract class’. Elle permet de découper une trop grosse classe en des classes plus cohésives implémentant une seule fonctionnalité.
La plupart des travaux antérieurs ont examiné les relations structurelles entre les entités des classes pour générer des recommandations d’extraction des classes. D’autres travaux antérieurs ont considéré la similarité sémantique entre les méthodes pour assister l’extraction des classes. Cependant, tous ces travaux ignorent l’historique des changements du code appliqués dans le passé. De plus, ces approches présentent des approches déterministes. Malgré qu’une recherche déterministe puisse trouver de bonnes solutions, ces solutions sont souvent loin d’être optimales. Puisque de nombreuses combinaisons de membres des classes sont possibles, le processus de génération de recommandations peut être vu comme un problème d’optimisation.
Pour contourner les limites des solutions actuelles, nous avons développé une approche, intitulée BlobBreak, qui vise à automatiser l’opération de restructuration des classes. Nous avons utilisé un algorithme d’optimisation multi-objectif, le NSGA-II, pour trouver les combinaisons des méthodes et attributs à extraire dans ces nouvelles classes. Notre approche combine différents aspects portant sur les dépendances statiques et sémantiques ainsi que l’historique des changements du code source. Ainsi, les solutions générées doivent établir un compromis entre deux objectifs : (i) maximiser la cohésion des classes extraites et (ii) minimiser les dépendances entre les classes extraites.
Pour évaluer cette proposition, nous avons utilisé cinq projets du domaine du logiciel libre de moyenne et grande taille. Les résultats montrent que BlobBreak améliore la cohésion des trop grandes classes ainsi que la qualité du logiciel. Les performances de BlobBreak surpassent celles d’une approche existante avec en moyenne, 77.99% de précision et 78.82% de rappel.
| Date | 20 déc. 2019 |
|---|
| langue originale | Français |
|---|
| Établissement diplômant | - École de technologie supérieure
|
|---|
| Superviseur | Ali Ouni (Directeur(-trice)) |
|---|
- extract class refactoring
- classes de trop grande taille
- dépendance structurelle
- dépendance sémantique
- historique de changement de code
Boukharata, S. (Auteur(e)),
Ouni (Directeur(-trice)),
20 déc. 2019Thèses et mémoires: Mémoire de maîtrise › Maîtrise en ingénierie: Génie