-

5 Problèmes liés au travail avec des logiciels hérités. Comment y faire face ?

Dans le monde dynamique de la technologie, nous observons un défi croissant avec les logiciels hérités, c’est-à-dire les systèmes et applications obsolètes. Les raisons de leur maintenance vont des investissements importants dans l'infrastructure aux préoccupations concernant la perturbation des activités. Dans cet article, nous soulignons l'importance des logiciels hérités, les défis qui y sont associés, et les stratégies pour améliorer les performances, la sécurité et la flexibilité des systèmes informatiques.

Qu'est-ce qu'un logiciel hérité ?

Un logiciel hérité fait référence à des systèmes informatiques ou des applications obsolètes qui restent utilisés malgré l'introduction de nouvelles technologies. Ces logiciels peuvent être basés sur des langages de programmation, des architectures système ou des technologies plus anciennes qui sont difficiles à remplacer ou à mettre à jour.

Pourquoi les logiciels hérités existent-ils ?

Les organisations maintiennent souvent des logiciels hérités en raison d'investissements significatifs dans l'infrastructure, d'un manque de ressources (par exemple, une équipe responsable de la mise en œuvre des changements), ou en raison de préoccupations concernant le risque commercial et la perturbation des opérations en cours.

Le processus de migration des logiciels hérités peut impliquer la réécriture de l'application à partir de zéro, son déplacement vers une autre plateforme, ou des mises à niveau et améliorations progressives du système informatique existant. Un travail doit être fait dans chacune de ces options, donc il est courant que les entreprises continuent d'utiliser le système hérité actuel. 

Pourquoi travailler sur des logiciels informatiques hérités ?

Migrer ou mettre à niveau les logiciels hérités dans une entreprise est une mesure cruciale. Les technologies et solutions modernes s'avèrent souvent rentables grâce à une efficacité opérationnelle accrue et à une réduction des coûts à long terme. Il vaut la peine de prendre des mesures pour éviter les problèmes potentiels avec la technologie héritée et améliorer les performances, la sécurité et la flexibilité du système. 

Du point de vue de l'entreprise, les logiciels hérités peuvent générer plusieurs difficultés :

  • ils peuvent être plus exposés aux vulnérabilités de sécurité, car les systèmes plus anciens ne reçoivent souvent pas de mises à jour de sécurité régulières,
  • ils peuvent être difficiles à comprendre et à maintenir, surtout pour les nouveaux développeurs qui ne sont pas familiers avec les technologies obsolètes,
  • ils peuvent poser des défis aux organisations qui souhaitent les intégrer dans des systèmes modernes ou les remplacer par des logiciels plus récents.

Quels problèmes rencontrez-vous lorsque vous travaillez avec des logiciels hérités ?

Cependant, les logiciels hérités posent le plus de problèmes aux développeurs travaillant sur un système particulier. Regardons quels défis attendent l'équipe sur ce type de projet.

Les logiciels hérités peuvent créer des problèmes tels que l'absence de documentation du code ou des capacités de test.


1. Documentation manquante ou obsolète

L'un des principaux défis avec le logiciel hérité est l'absence de documentation du code, ce qui rend difficile la compréhension de son fonctionnement et conduit à de nombreuses conséquences.

Avant tout, les programmeurs responsables du développement et de la maintenance doivent se fier à leur propre analyse du code, ce qui est chronophage et problématique. L'absence de documentation claire prolonge les temps de réponse aux erreurs et complique les modifications ou mises à jour nécessaires du système.

De plus, une documentation manquante rend les développeurs dépendants des personnes qui ont travaillé sur le code dans le passé. Si elles quittent l'équipe, leur connaissance et leurs compétences ne sont plus disponibles pour les autres membres. Cela conduit au risque que l'organisation puisse avoir des difficultés à maintenir et développer des logiciels hérités si des spécialistes clés sont perdus.

Des fragments de code peu clairs ou non documentés peuvent être à l'origine de bogues difficiles à localiser et à corriger. Cela affecte à son tour négativement la stabilité et la fiabilité du système donné.

2. Code sans testabilité 

L'incapacité à tester le logiciel hérité est une autre source de risque pour les développeurs essayant d'introduire de nouvelles fonctionnalités ou de corriger des problèmes existants. Les systèmes plus anciens n'étaient souvent pas conçus pour permettre un test facile, et la structure et l'architecture du code peuvent rendre difficile la mise en œuvre de tests automatisés.

Le manque de tests automatisés pour les logiciels hérités a de nombreuses conséquences négatives. Premièrement, il peut conduire au risque d'introduction d'erreurs et de régressions lors de la modification du code. De plus, il rend plus difficile la détection et l'élimination des défauts du logiciel. Chaque modification ou correction dans le système doit être testée manuellement, ce qui est chronophage et sujet aux erreurs humaines. Cela augmente les coûts et limite la capacité à modifier rapidement le système.

3. Conflit de version et incompatibilité avec des systèmes plus récents

Le logiciel se connecte souvent à d'autres systèmes ou applications. Avec l'héritage, cela peut être difficile à plusieurs niveaux.

  • Dépendances à l'égard des bibliothèques et modules : l'introduction d'une nouvelle version de logiciel peut nécessiter des mises à jour des bibliothèques et modules liés. Si les applications ou systèmes existants sont basés sur des versions plus anciennes de ces bibliothèques, une incompatibilité peut survenir, entraînant des erreurs et de l'instabilité.
  • Changements de syntaxe et de fonctionnalité : les nouvelles versions de logiciels introduisent souvent des changements de syntaxe et de fonctionnalité qui peuvent être incompatibles avec le code existant. Cela peut nécessiter la révision et l'ajustement du code existant pour fonctionner correctement avec la nouvelle version.
  • Absence de support pour les versions plus anciennes : les logiciels reçoivent souvent un support actif et des mises à jour de sécurité, tandis que les versions plus anciennes peuvent ne plus être supportées. Cela signifie que les organisations utilisant des versions obsolètes sont plus exposées aux vulnérabilités de sécurité et aux cyberattaques.

4. Problèmes selon la théorie des fenêtres brisées

Dans le contexte des défis liés aux logiciels hérités, il est utile de rappeler la théorie des fenêtres brisées. Issue de la criminologie, cette question se réfère aux concepts de gestion des logiciels et de développement de projet. Elle vise à mettre en lumière les conséquences de l'ignorance des erreurs, des problèmes et des lacunes aux premiers stades d'un projet. 

La théorie des fenêtres brisées indique que si des erreurs, des lacunes ou une obsolescence sont trouvées dans le code existant et ne sont pas immédiatement corrigées, il existe un risque que les changements ultérieurs et les nouvelles fonctionnalités posent également des problèmes (par exemple, causent une dégradation de la qualité du code). 

En d'autres termes, si nous ne réparons pas les « fenêtres brisées » dans notre code, nous aurons tendance à continuer le même modèle dans les nouvelles parties du système, et la qualité globale du code se détériorera.

C'est pourquoi il est essentiel de se concentrer non seulement sur l'ajout de nouvelles fonctionnalités et solutions, mais aussi sur la correction des bogues et l'amélioration du code existant. Travailler sur le code hérité peut aider à améliorer la qualité, la compréhensibilité et la maintenabilité du système.

5. Logiciels hérités vs. estimation de projet entravée

Comme mentionné ci-dessus, les logiciels hérités peuvent souvent être mal documentés et difficiles à comprendre. Ils peuvent contenir des technologies obsolètes, des solutions inhabituelles ou une structure incohérente. Cet état peut rendre considérablement plus difficile pour les développeurs de comprendre l'ampleur du travail et d'estimer le temps nécessaire pour terminer le projet.

Cela est souvent aggravé par l'absence de tests unitaires ou d'intégration suffisamment automatisés, ce qui complique la détection et la réparation des erreurs. En conséquence, les développeurs doivent prévoir un temps supplémentaire pour les tests et la résolution des problèmes.

Avec les logiciels hérités, les problèmes cachés, tels que les dépendances inconnues ou les fonctionnalités mal implémentées, sont également des risques qui peuvent prolonger la tâche. En conséquence, l'estimation de ces projets nécessite une analyse plus approfondie du code et des exigences, ce qui peut augmenter la difficulté et la durée du projet. Il est important de prendre en compte ces facteurs et de les aborder avec prudence pour éviter les retards et les problèmes potentiels.

Comment travailler avec des logiciels hérités ?

Travailler avec des logiciels hérités peut être difficile, mais vous pouvez prendre certaines mesures pour opérer efficacement dans un tel environnement. 

Une approche générale de la technologie héritée

Quel que soit le type de technologie rencontrée, il vaut la peine d'incarner quelques principes universels lorsque l'on travaille avec des logiciels hérités.

  • Acquérir des connaissances : il est essentiel de comprendre le code existant et comment il fonctionne. Il est judicieux d'étudier la documentation disponible, le cas échéant, et d'examiner le code source. Au fur et à mesure que vous travaillez, vous devrez peut-être consulter des personnes ayant déjà travaillé sur le code pour obtenir des informations supplémentaires. 
  • Documenter vos changements : de cette façon, vous pouvez faciliter la compréhension des modifications par d'autres développeurs. Il est important de procéder par étapes, en se concentrant sur les domaines les plus critiques du système.
  • Tester le logiciel : il est crucial de vérifier les modifications que vous apportez en créant un ensemble de tests unitaires et d'intégration.
  • Introduire du refactoring de code : cela réussira à améliorer sa structure et sa propreté.
  • Améliorer le code dans les logiciels hérités : il est logique de se concentrer sur l'amélioration des zones les plus critiques qui apporteront le plus de valeur si elles sont modifiées.
  • Utiliser des outils qui automatisent votre travail.

Automatisation des processus

Ce qui peut être automatisé mérite d'être mis en œuvre de cette manière. Il existe divers outils que nous pouvons mettre en œuvre pour économiser beaucoup de temps et de ressources à l'avenir. Voici quelques exemples basés sur le travail en PHP :

  • Tests unitaires : créer des tests unitaires vous permet de vérifier que vos modifications n'affectent pas négativement le code existant. L'automatisation de l'exécution des tests fournit un moyen rapide et efficace de vérifier que les modifications apportées ne génèrent pas d'erreurs.
La vérification de code sous forme de tests unitaires est une bonne approche lorsqu'on travaille avec des logiciels hérités.


Fenêtre de test dans l'application PHPUnit 

  • Outils d'analyse statique de code : utiliser des outils tels que PHPStan ou Psalm vous permet de détecter les erreurs potentielles, les incohérences ou une utilisation inhabituelle des fonctions. L'analyse automatique du code aide à identifier les zones à améliorer.
  • Systèmes d'intégration/déploiement continus (CI/CD) : ces outils permettent la compilation, le test et le déploiement automatiques des modifications. Cela permet de vérifier rapidement que les modifications apportées ne provoquent pas de régressions et de déployer automatiquement les modifications sur le serveur de production.
  • Outils de Linting : travailler avec des linters tels que Stylelint, PHPLint ou PHP_CodeSniffer vous permet de vérifier automatiquement la conformité aux standards de codage acceptés. La vérification automatique de la syntaxe et du style de code aide à maintenir la cohérence dans votre projet.
Stylelint est l'un des outils automatiques pour travailler avec le code source, utile pour les logiciels hérités.


Exemple d'erreurs rapportées par l'outil Stylelint

  • Outils d'automatisation du refactoring de code : PHP Rector, par exemple, une bibliothèque basée sur PHP-Parser qui permet des changements automatiques au code existant, éliminant la tâche répétitive de mise à niveau et d'amélioration du code.
  • Formatage automatique du code : l'utilisation d'outils tels que PHP-CS-Fixer ou PHP_CodeSniffer avec une configuration de formatage de code aide à aligner automatiquement le code existant avec des règles spécifiques. Cela facilite le maintien de la cohérence et de la lisibilité du code.
L'outil PHP CodeSniffer permet de maintenir la qualité et la lisibilité du code source dans votre projet.


Vue de l'outil PHP_CodeSniffer pour le formatage automatique du code  

  • Migrations automatiques : en cas de modifications de base de données, vous pouvez utiliser des outils de gestion de migration automatisée tels que Doctrine Migrations pour vous aider à mettre à jour le schéma de base de données directement à partir du code PHP.

L'automatisation en PHP lors de l'amélioration de la technologie héritée peut accélérer le processus, augmenter l'efficacité et réduire le risque d'introduction d'erreurs. Les tests automatisés, l'analyse statique, les linters, les systèmes CI/CD, le formatage automatique du code et les migrations sont des outils et techniques qui peuvent être utilisés à cet effet.

Travailler avec Symfony 

Dans le framework Symfony, il est possible d'envelopper le code existant dans la structure et de le transférer progressivement vers de nouveaux composants. Cela signifie que vous pouvez utiliser les fonctionnalités et composants Symfony tout en permettant au code hérité plus ancien de continuer à fonctionner. Par exemple, vous pouvez implémenter des journaux dans Symfony et permettre toujours au reste de l'application d'utiliser l'ancien code.

Comment cela fonctionne-t-il en pratique ? Le processus implique le transfert progressif du routage d'une application existante vers de nouveaux composants Symfony. Si une URL donnée n'est pas résolue par le framework, elle renvoie le code plus ancien et continue de fonctionner. Cela permet un transfert contrôlé de la fonctionnalité et une adaptation progressive de l'application aux nouveaux standards Symfony.

Cette approche vous permet de moderniser une application écrite en Symfony tout en maintenant l'intégrité et la fonctionnalité du code existant. En conséquence, vous pouvez introduire progressivement de nouveaux composants et fonctionnalités Symfony tout en bénéficiant des avantages et outils de ce framework.

C'est une solution précieuse pour les projets de logiciels hérités qui souhaitent bénéficier des avantages de Symfony sans avoir ou vouloir réécrire l'ensemble de l'application à partir de zéro. Elle vous donne la possibilité de faire des changements et des mises à niveau successives tout en minimisant le risque de perturbation de l'application existante.

Travailler avec Drupal

Si vous traitez avec des logiciels hérités en travaillant avec Drupal, une façon recommandée de gérer cet état de fait est de passer à une version supérieure du système.  

Migration de Drupal 7 vers des versions supérieures

Lors de la migration de Drupal 7 vers Drupal 9, vous pouvez utiliser diverses solutions pour rendre le processus plus facile. Voici des exemples d'outils populaires liés à la migration.

Drupal Upgrade Status 

Cet outil vous aide à évaluer votre préparation à la migration de Drupal 7 à 9. Il analyse le code, les modules et les thèmes pour identifier les problèmes potentiels de migration. Il fournit également des informations sur les mises à jour des modules et thèmes qui peuvent être nécessaires lors de la migration.

Drupal 9 Readiness Checker 

Cette solution aide à évaluer la préparation des modules et des thèmes pour la migration de Drupal 7 à 9. Elle vérifie si les modules sont compatibles avec la nouvelle version de Drupal et fournit des informations sur les problèmes et mises à niveau possibles.

Drupal Rector

Cet outil pour convertir automatiquement le code de Drupal 7 en Drupal 8 ou 9 est basé sur l'outil Rector pour le refactoring automatique du code en PHP.

Drupal Rector analyse le code Drupal 7 et identifie les endroits où des transformations automatiques peuvent être appliquées pour rendre le code compatible avec Drupal 8 ou 9. Des exemples de modifications incluent le renommage des fonctions, classes et méthodes, la mise à jour de la gestion de la configuration, l'amélioration du versionnage des API, et bien plus encore.

Avec Drupal Rector, vous pouvez accélérer le processus de migration, car de nombreux changements manuels qui seraient généralement nécessaires peuvent être automatisés. Cet outil est particulièrement utile si vous avez une grande quantité de code Drupal 7 et que vous souhaitez l'adapter rapidement à une version plus récente.

Gardez à l'esprit cependant que Drupal Rector ne peut pas toujours convertir tout le code automatiquement. Il existe souvent des cas de solutions non standards qui nécessitent des personnalisations manuelles. C'est pourquoi il est essentiel de réaliser des tests et un contrôle qualité appropriés après l'utilisation de Drupal Rector.

Problèmes des logiciels hérités - résumé

Dans l'article, nous avons décrit la nature et les défis des logiciels hérités, c'est-à-dire des systèmes informatiques ou applications obsolètes qui restent utilisés malgré l'existence de technologies plus récentes. Travailler sur un tel projet peut être difficile pour plusieurs raisons, telles que l'absence de documentation du code ou l'incapacité à effectuer des tests automatisés.

Cependant, avec la bonne approche, les bons outils et une planification appropriée, les logiciels hérités peuvent être gérés et améliorés efficacement, permettant aux organisations de contourner les risques potentiels et de s'adapter aux exigences technologiques changeantes. Si vous avez besoin d'aide pour travailler avec des logiciels hérités dans votre projet, comme une application web sur Drupal, Symfony ou PHP, nos développeurs peuvent offrir leur expertise.

3. Best practices for software development teams