Legacy Code Gets Worse With Age

Le code legacy ne s'améliore pas avec le temps. Il empire.

La semaine dernière, j'ai passé trois heures à corriger un bug. Cela aurait dû me prendre 20 minutes. Le problème venait d'un module de validation de 2019. Tout le monde l'ignorait parce que « ça fonctionne ». Ce n'était pas le cas. J'ai trouvé un commentaire TODO de 2020 à l'intérieur du fichier.

Beaucoup de gens traitent le code legacy comme une dette optionnelle. Ils pensent pouvoir la rembourser quand ils auront le temps. Le code legacy ressemble plutôt à de la moisissure. Elle se propage. Elle contamine d'autres parties de votre système. Plus vous l'ignorez, plus il devient coûteux de le nettoyer.

Cela crée un cercle vicieux :

  • Vous héritez d'un projet désordonné.
  • Vous ajoutez une condition if supplémentaire pour faire fonctionner votre fonctionnalité.
  • Six mois plus tard, quelqu'un d'autre fait la même chose.
  • Un an plus tard, le fichier fait 800 lignes et n'a aucun test.

Ce code « fonctionnel » comporte des coûts cachés :

  • La vitesse de développement chute. Vous passez plus de temps à lire le contexte qu'à écrire du code.
  • Les bugs augmentent. Corriger une chose en casse une autre.
  • L'onboarding devient difficile. Les nouveaux développeurs peinent à comprendre pourquoi la logique est dupliquée partout.

Surveillez ces signaux d'alerte :

  • Des commentaires inutiles ou mensongers.
  • De la logique métier dupliquée dans différents fichiers.
  • Des dépendances circulaires et un couplage élevé.

N'essayez pas de tout réécrire. Les réécritures complètes échouent dans 80 % des cas. Vous passez des mois à reconstruire ce qui existe déjà pendant que l'entreprise attend de nouvelles fonctionnalités.

Utilisez le refactoring incrémental avec des tests de caractérisation :

  • Capturez le comportement actuel avec des tests, même s'il est étrange.
  • Refactorez sans changer ce comportement.
  • Répétez l'opération jusqu'à ce que le code soit lisible.
  • Ce n'est qu'ensuite que vous modifiez le comportement avec de vrais tests.

Suivez ces règles pour éviter les pièges :

  • Ne refactorez jamais sans tests.
  • Ne changez pas le comportement pendant un refactoring. Un bug pourrait être une fonctionnalité non documentée sur laquelle un client s'appuie.
  • Laissez tranquille le code qui ne bouge pas. Si un module n'a pas changé depuis trois ans et ne pose aucun problème, laissez-le tel quel.

Concentrez votre énergie sur le code que vous touchez fréquemment.

Source: https://dev.to/taina_costa_f/legacy-code-nao-envelhece-como-vinho-quanto-mais-espera-pior-fica-132h