Boukharata, Sabrine (2019). Une approche métaheuristique pour la restructuration automatique des classes dans les applications logicielles orientées objet. Mémoire de maîtrise électronique, Montréal, École de technologie supérieure.
Prévisualisation |
PDF
Télécharger (1MB) | Prévisualisation |
Prévisualisation |
PDF
Télécharger (393kB) | Prévisualisation |
Résumé
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.
Titre traduit
A meta-heuristic approach for automatic class restructuring in object-oriented software applications
Résumé traduit
Software systems evolve during their life cycle. Developers frequently add new features to satisfy customer needs or to correct some errors. However, these activities can increase system complexity and often cause code smells. Among these code smells, we find the God Class or Blob, which is a result of developers’ bad practices. Indeed, they place semantically unrelated methods in one single class which results in a complex and non-cohesive one. This can therefore cause problems of comprehensibility and maintainability for the class itself and the whole software.
To improve the quality of software, the most used technique is refactoring, which consists of modifying its internal structure while preserving its external behavior. To fix blobs, the generally used refactoring operation is Extract class that allows the developer to split a large class into more cohesive ones implementing a single feature.
To propose recommendations for class extraction, most of previous works have examined structural relationships between the class entities, while others have considered semantic similarity between methods. However, all these works ignore the history of code changes applied in the past. Additionally, all these researches present deterministic approaches that are inadequate to the problem due to the huge space of all the possible combinations of class members. Hence, the recommendation process is inherently an optimization problem.
To deal with these limitations, we have developed an approach, named BlobBreak, which focuses on automating the Extract Class Refactoring operation using a meta-heuristic technique. We used a multi-objective algorithm to find the combinations of entities (methods and attributes) and extract them in new classes. Our approach combines different aspects of static and semantic dependencies as well as the history of code change. The solutions generated must be able to find a compromise between two objectives to (i) maximize the cohesion of the extracted classes and (ii) minimize the dependencies between the system classes.
To evaluate our approach, we considered five Open Source projects with medium and large sizes. The obtained results show that BlobBreak improves the cohesion of the extracted classes as well as the quality of the studied projects. Additionally, the evaluation of BlobBreak’s efficiency showed that our approach outperforms JDeodorant, an existing approach, with a precision and recall of 78% and 77% respectively.
Type de document: | Mémoire ou thèse (Mémoire de maîtrise électronique) |
---|---|
Renseignements supplémentaires: | "Mémoire présenté à l'École de technologie supérieure comme exigence partielle à l'obtention de la maîtrise avec mémoire en génie logiciel". Comprend des références bibliographiques (pages 87-91). |
Mots-clés libres: | extract class refactoring, classes de trop grande taille, dépendance structurelle, dépendance sémantique, historique de changement de code |
Directeur de mémoire/thèse: | Directeur de mémoire/thèse Ouni, Ali |
Programme: | Maîtrise en ingénierie > Génie |
Date de dépôt: | 25 févr. 2020 16:29 |
Dernière modification: | 25 févr. 2020 16:29 |
URI: | https://espace.etsmtl.ca/id/eprint/2459 |
Gestion Actions (Identification requise)
Dernière vérification avant le dépôt |