Réingénierie logicielle
La réingénierie logicielle consiste en l'examen et la modification d'un système existant afin de le reconstituer sous une forme nouvelle et améliorée, généralement pour moderniser un logiciel patrimonial vieillissant tout en préservant son comportement essentiel.
Definition
La réingénierie logicielle est le processus d'examen d'un système sujet afin de le comprendre, puis de le réimplémenter ou de le restructurer pour en améliorer la forme ou la plateforme tout en préservant substantiellement sa fonctionnalité.
Scope
Ce sujet couvre l'ingénierie inverse (reverse engineering) et la récupération de conception (design recovery) ; la restructuration du code et des données ; la migration vers de nouvelles plateformes, langages et architectures ; les stratégies d'encapsulation (wrapping) et de modernisation incrémentale pour les systèmes patrimoniaux ; les tests visant à préserver le comportement pendant la transformation ; ainsi que les critères de décision pour la réingénierie par rapport à la maintenance continue ou au remplacement.
Core questions
- Comment la conception d'un système patrimonial est-elle récupérée à partir de son code et de ses données ?
- Quelles stratégies permettent de migrer ou de restructurer un système avec un risque acceptable ?
- Comment le comportement est-il préservé pendant la transformation de l'implémentation ?
- Quand la réingénierie est-elle préférable à la maintenance continue ou au remplacement complet ?
Key theories
- Ingénierie inverse et récupération de conception
- Chikofsky et Cross ont défini une taxonomie distinguant l'ingénierie inverse (récupération de représentations de niveau supérieur à partir d'un système) de la redocumentation, de la restructuration et de l'ingénierie directe (forward engineering), encadrant ainsi les activités de récupération de conception.
- Modernisation incrémentale des systèmes patrimoniaux
- Plutôt que des réécritures risquées de type 'big-bang', les systèmes patrimoniaux sont modernisés de manière incrémentale en introduisant des tests autour du code existant, en isolant les points de modification et en restructurant ou remplaçant progressivement les composants.
Clinical relevance
La réingénierie permet aux organisations de prolonger la durée de vie et la valeur des systèmes patrimoniaux critiques pour l'entreprise avec un risque moindre que la réécriture à partir de zéro ; une stratégie solide et des techniques de préservation du comportement sont essentielles car les systèmes patrimoniaux encodent souvent des connaissances métier irremplaçables et non documentées.
History
Alors que les grands systèmes construits des années 1960 aux années 1980 vieillissaient, l'ingénierie inverse (reverse engineering) et la réingénierie sont apparues comme des préoccupations distinctes à la fin des années 1980 et dans les années 1990, formalisées par la taxonomie de Chikofsky et Cross ; des techniques pratiques pour maîtriser le code patrimonial non testé ont ensuite été codifiées par Feathers.
Debates
- Réingénierie incrémentale versus réécriture complète
- La question de savoir s'il faut moderniser un système patrimonial de manière incrémentale ou le réécrire entièrement est controversée ; les réécritures promettent une table rase mais dépassent fréquemment les budgets et perdent les connaissances intégrées, tandis que la réingénierie incrémentale est plus sûre mais plus lente.
Key figures
- Elliot Chikofsky
- James Cross
- Michael Feathers
Related topics
Seminal works
- chikofsky1990
- feathers2004
- sommerville2015
Frequently asked questions
- Quelle est la différence entre le refactoring et la réingénierie ?
- Le refactoring (refactorisation) apporte de petites améliorations au code source, préservant le comportement, généralement dans le cadre du développement continu ; la réingénierie est une activité à plus grande échelle qui peut récupérer des conceptions et migrer un système entier vers une nouvelle plateforme ou architecture, dont le refactoring peut être une technique.
- Pourquoi ne pas simplement réécrire un système patrimonial à partir de zéro ?
- Les systèmes patrimoniaux incarnent souvent des années de règles métier accumulées et mal documentées ; une réécriture à partir de zéro risque de perdre ces connaissances et dépasse couramment les budgets, de sorte que la réingénierie incrémentale est fréquemment la voie la moins risquée malgré sa lenteur.