Les systèmes logiciels existants représentent souvent des investissements importants pour les entreprises qui les développent avec l’intention de les utiliser pendant une longue période de temps. La qualité de ces systèmes peut être dégradée avec le temps en raison des modifications complexes qui leur sont incorporées. Pour faire face à une telle dégradation lorsque elle dépasse un seuil critique, plusieurs stratégies peuvent être utilisées. Ces stratégies peuvent se résumer en: 1) remplaçant le système par un autre développé à partir de zéro, 2) poursuivant la maintenance(massive) du système malgré son coût ou 3) en faisant une réingénierie du système. Le remplacement et la maintenance massive ne sont pas des solutions adaptées lorsque le coût et le temps doivent être pris en compte, car elles nécessitent un effort considérable et du personnel pour assurer la mise en œuvre du système dans un délai raisonnable. Dans cette thèse, nous nous intéressons à la solution de réingénierie. En général, la réingénierie d’un système logiciel inclut toutes les activités après la livraison à l’utilisateur pour améliorer sa qualité. Cette dernière est souvent caractérisé par un ensemble d’attributs de qualité. Nous proposons trois contributions pour améliorer les attributs de qualité spécifiques, que soient:la maintenabilité, la compréhensibilité et la modularité. Afin d’améliorer la maintenabilité, nous proposons de migrer les systèmes logiciels orientés objets vers des systèmes orientés composants. Contrairement aux approches existantes qui considèrent un descripteur de composant comme un cluster des classes, chaque classe du système existant sera migré en un descripteur de composant. Afin d’améliorer la compréhensibilité, nous proposons une approche pour la reconstruction de modèles d’architecture d’exécution des systèmes orientés objet et de gérer la complexité des modèles résultants. Les modèles, graphes, générés avec notre approche ont les caractéristiques suivantes: les nœuds sont étiquetés avec des durées de vie et des probabilités d’existence permettant 1) une visualisation des modèles avec un niveau de détail. 2) de cacher/montrer la structure interne des nœuds. Afin d’améliorer la modularité des systèmes logiciels orientés objets, nous proposons une approche d’identification des modules et des services dans le code source de ces systèmes.Dans cette approche, nous croyons que la structure composite est la structure principale du système qui doit être conservée lors du processus de modularisation, le composant et ses composites doivent être dans le même module. Les travaux de modularisation existants qui ont cette même vision, supposent que les relations de composition entre les éléments du code source sont déjà disponibles ce qui n’est pas toujours évident. Dans notre approche, l’identification des modules commence par une étape de reconstruction de modèles d’architecture d’exécution du système étudié. Ces modèles sont exploités pour d’identification de relations de composition entre les éléments du code source du système étudié. Une fois ces relations ont été identifiées, un algorithme génétique conservatif aux relations de composition est appliqué sur le système pour identifier des modules. En dernier, les services fournis par les modules sont identifiés à l’aide des modèles de l’architecture d’exécution du système logiciel analysé. Quelques expérimentations et études de cas ont été réalisées pour montrer la faisabilité et le gain en maintenabilité, compréhensibilité et modularité des logiciels traités avec nos propositions. / Legacy software systems often represent significant investmentsfor the companies that develop them with the intention of using themfor a long period of time. The quality of these systems can be degraded over time due to the complex changes incorporated to them.In order to deal with these systems when their quality degradation exceeds a critical threshold, a number of strategies can be used. Thesestrategies can be summarized in: 1) discarding the system and developinganother one from scratch, 2) carrying on the (massive) maintenance of the systemdespite its cost, or 3) reengineering the system. Replacement and massive maintenance are not suitable solutions when the cost and time are to be taken into account, since they require a considerable effort and staff to ensurethe system conclusion in a moderate time. In this thesis, we are interested in the reengineering solution. In general, software reengineering includes all activities following the delivery to the user to improve thesoftware system quality. This latter is often characterized with a set of quality attributes. We propose three contributions to improve specific quality attributes namely: maintainability, understandability and modularity.In order to improve maintainability, we propose to migrateobject oriented legacy software systems into equivalent component based ones.Contrary to exiting approaches that consider a component descriptor as a clusterof classes, each class in the legacy system will be migrated into a componentdescriptor. In order to improve understandability, we propose an approach forrecovering runtime architecture models of object oriented legacy systems and managing the complexity of the resulted models.The models recovered by our approach have the following distinguishing features: Nodes are labeled with lifespans and empirical probabilities of existencethat enable 1) a visualization with a level of detail. 2) the collapsing/expanding of objects to hide/show their internal structure.In order to improve modularity of object-oriented software systems,we propose an approach for identifying modulesand services in the source code.In this approach, we believe that the composite structure is the main structure of the system that must be retained during the modularization process, the component and its composites must be in the same module. Existing modularization works that has this same vision assumes that the composition relationships between the elements of the source code are already available, which is not always obvious. In our approach, module identification starts with a step of runtime architecture models recovery. These models are exploited for the identification of composition relationships between the elements of the source code. Once these relationships have been identified, a composition conservative genetic algorithm is applied on the system to identify modules. Lastly, the services provided by the modules are identified using the runtime architecture models of the software system. Some experimentations and casestudies have been performed to show the feasibility and the gain inmaintainability, understandability and modularity of the software systems studied with our proposals.
Identifer | oai:union.ndltd.org:theses.fr/2019MONTS010 |
Date | 05 July 2019 |
Creators | Zellagui, Soumia |
Contributors | Montpellier, Tibermacine, Chouki, Bouziane, Hinde Lilia, Dony, Christophe |
Source Sets | Dépôt national des thèses électroniques françaises |
Language | English |
Detected Language | French |
Type | Electronic Thesis or Dissertation, Text |
Page generated in 0.0024 seconds