ScholarGate
Assistant

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.

Trouver un sujet avec PaperMindBientôtFind papers & topics
Tools & resources
Télécharger les diapositives
Learn & explore
VidéoBientôt

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.

Methods for this concept

Related concepts