# Système hérité

Un système hérité, système patrimonial ou système obsolète(en anglais : legacy system) est un matériel ou un logiciel continuant d'être utilisé dans une organisation (entreprise ou administration), alors qu'il est supplanté par des systèmes plus modernes. L'obsolescence de ces systèmes et leur criticité les rendent difficilement remplaçables sans engendrer des projets coûteux et risqués. Ce principe, combiné avec l'utilisation d'un matériel là aussi dépassé, engendre la dette technique.
Par exemple, les banques et assurances qui ont informatisé leur traitement des informations dans les années 1970 ont des applications qui tournent avec du code hérité souvent en COBOL ou en Fortran. Les risques pris pour réécrire l'application dans un autre langage et les coûts inhérents au changement dissuadent souvent la modernisation du système, voire son remplacement.

## Causes

Les entreprises peuvent avoir des raisons sérieuses de conserver un système hérité, par exemple :
* Le système fonctionne de manière satisfaisante, et son propriétaire décide de ne pas allouer de ressources à l'analyse du rapport bénéfice/risque de l'évolution du système, possiblement par heuristique assumée, aversion au changement, voire par négligence ou ignorance de répercussions néfastes envisageables et raisonnablement anticipables.
* Les coûts pour retravailler ou remplacer le système seraient prohibitifs, parce que celui-ci est de grande taille, monolithique (en), complexe. Il est estimé par exemple que des centaines de milliards de lignes de code en Cobol sont encore utilisés.
* Former les utilisateurs au nouveau système demanderait beaucoup de temps et d'argent, ceci étant à comparer avec les avantages apportés par le remplacement du système (ceux-ci pouvant être nuls).
* Le système requiert une haute disponibilité et ne peut être interrompu. De plus, les coûts pour concevoir un nouveau système atteignant le même niveau de disponibilité seraient élevés. Ces systèmes contrôlent des secteurs critiques, tels que : gestion bancaire, réservations, contrôle aérien, distribution d'énergie (réseau électrique), contrôle de centrale nucléaire, installations de défense militaire, trafic ferroviaire, etc.
* Le fonctionnement du système existant n'est pas entièrement maîtrisé. De telles situations peuvent se produire lorsque les concepteurs du système ont quitté l'entreprise et que celui-ci n'est pas entièrement documenté, ou bien que la documentation a été perdue ou pas mise à jour.

## Cas concernées

Les États-Unis, que ce soit le gouvernement fédéral ou 45 États, dépendent de plusieurs versions du Cobol pour des services critiques comme les impôts (IRS), la sécurité sociale ou les contrats du département de la défense. Des banques et assurances utilisent toujours majoritairement ce système vieux de plusieurs décennies.
Un rapport de la Cour de comptes de 2019 indique que la Direction générale des Finances publiques a des applications essentielles tournant sur des logiciels obsolètes et difficilement interopérables, ce qui augmente les coûts de maintenance.

### NASA

La NASA continue d'utiliser des technologies des années 1970. Les processus de validation sont très lourds et coûteux. Aussi la NASA a été obligée d'acheter sur eBay des microprocesseurs 8086 en 2002 pour les systèmes de contrôle des navettes spatiales parce qu'ils n'étaient plus fabriqués par Intel. Ils sont bien connus des développeurs, et étant plus gros, ils résistent mieux aux radiations que les microprocesseurs récents.
Un système hérité d'une ingénierie rigoureuse peut se perpétuer avec une portée incommensurable. Les normes des chariots romains sont à l'origine de celles des trains et des tunnels ferroviaires, et ont limité la taille des réservoirs auxiliaires des navettes ravitaillant la station spatiale internationale.

## Conséquences

Les systèmes hérités sont généralement considérés comme problématiques pour différentes raisons :
* Maintenance compliquée par un manque de documentation, de compétences, de composants (disparus)
* Maintenance potentiellement coûteuse
* Lenteurs dues à l'obsolescence du matériel
* Ergonomie inférieure à celle des systèmes modernes
* Risques de panne accrus
* Vulnérabilités liées à l'absence de correctif
* Absence d'évolutivité et d'adaptation aux nouveaux besoins fonctionnels ou a une augmentation de la volumétrie

## Améliorations et solutions
### Améliorations

Le développement d'une nouvelle interface homme-machine généralement plus ergonomique peut être une manière d'améliorer l'expérience utilisateur mais ne constitue pas une réelle solution, pas plus que la virtualisation des machines ou des applications qui permet plutôt de conserver les systèmes hérités en les décorrélant du matériel ou du système d'exploitation, leur offrant ainsi une deuxième vie.
Lorsqu'un système hérité ne peut pas être supprimé, il est toujours possible de changer son interface. La plupart des développements consistent à ajouter de nouvelles interfaces à un système hérité. La technique la plus proéminente est de remplacer l'accès à une application via un terminal de mainframe par une accès via une interface web. Cela peut réduire la productivité du personnel en raison de temps de réponses plus lent, et d'actions à la souris plus lentes. Toutefois, même avec cette lenteur, cela est souvent perçu comme un "upgrade", parce que le style de l'interface web est familier des nouveaux utilisateurs ou employés, à qui il semble plus intuitif.

### Solutions

Il faut prévoir l'apurement progressif des systèmes hérités par une démarche régulière d'urbanisation du système d'information.

## Utilisation du terme Legacy en informatique

Le terme legacy support (ou support legacy) est souvent utilisé en conjonction avec des systèmes légacy. Le terme peut désigner une fonction d'un nouveau logiciel. Par exemple, un système d'exploitation avec un "support legacy" peut détecter et utiliser un hardware ancien. Le mot peut aussi être utilisé pour désigner une fonction d'entreprise; par exemple un vendeur de matériel ou de logiciel qui prend en charge, ou fournit de la maintenance logicielle, pour des produits plus anciens.
Un produit "legacy" peut être un produit qui n'est plus vendu, qui a perdu des parts de marché substantielles, ou est une version d'un produit qui n'est pas courant. Un produit legacy peut avoir certains avantages les rendant plus attrayants aux consommateurs que les produits modernes. Un produit n'est véritablement "obsolète" si aucune décision rationnelle ne permet à personne de choisir de l’acquérir comme produit neuf (en:pareto efficiency").
Le terme mode legacy désigne souvent spécifiquement la rétrocompatibilité. Un produit logiciel qui est capable de performer comme une version précédente de lui-même est dit fonctionner en mode legacy (running in legacy mode). Ce type de fonctionnalité est commune dans les systèmes d'exploitation et les navigateurs internet, où de nombreuses applications dépendent de ces composants sous-jacents.
L'époque du mainframe a vu de nombreuses applications fonctionner en mode legacy. Dans les systèmes informatiques modernes, les architectures n-tier, ou 3-tier sont plus difficiles à exploiter en mode legacy car le système se compose de plusieurs composants.
La technologie de virtualisation du matériel informatique est une récente novation permettant à des systèmes anciens de continuer à fonctionner sur un matériel moderne en exécutant des navigateurs et systèmes d'exploitation antérieurs sur un système logiciel qui émule le matériel antérieur.

## Perspectives sur le code logiciel hérité

Dans l' ingénierie logicielle, certains utilisent l'expression "code legacy" ("legacy code") sans connotation d'obsolescence. Parmi les plus prévalents des concepts neutres sont le code source hérité de quelqu'un d'autre et code source hérité d'une version précédente d'un logiciel. Eli Lopian, CEO de Typemock, l'a défini comme le code que les développeurs rechignent à changer par appréhension (des régressions). Michael Feathers introduit une définition du code legacy comme du code sans test, qui reflète la perspective d'un code hérité difficile à travailler en partie en raison d'un manque de tests de non-régression automatisé. Il définit également des tests de caractérisation pour créer des premiers tests de code hérité.
Ginny Hendry considère la création de code comme un challenge des développeurs actuels pour créer du code qui comme d'autres héritages de notre vie, comme les antiquités, les objets de famille et les histoires, qui sont chéries et transmises amoureusement d'une génération à la suivante. Pourquoi ne pourrions-nous pas être fier du code hérité?.