DetteTechnique

De Wiki Agile

TRADUCTION EN COURS
Auteur : Martin Fowler (@martinfowler)
Source : TechnicalDebt
Date : 21/05/2019


Traducteur : Fabrice Aimetti
Date : 16/05/2020


Traduction :

Les systèmes logiciels sont sujets à l'accumulation de code mal conçu[1], des faiblesses dans la qualité interne qui rendent plus difficile qu'il ne le serait théoriquement de modifier et d'étendre le système. La dette technique est une métaphore, inventée par Ward Cunningham, qui explique comment gérer ce code mal conçu, en le considérant comme une dette financière. L'effort supplémentaire qu'il faut fournir pour ajouter de nouvelles fonctionnalités est l'intérêt payé sur la dette.



Imaginez que j'ai une structure de code compliquée dans mon code base. Je dois ajouter une nouvelle fonctionnalité. Si la structure du code était claire, il me faudrait quatre jours pour ajouter la fonctionnalité, mais avec ce code mal conçu, il me faut six jours. La différence de deux jours est l'intérêt sur la dette.

Ce qui m'attire le plus dans la métaphore de la dette, c'est la façon dont elle oriente ma réflexion sur la manière de gérer ce code mal conçu. Je pourrais prendre cinq jours pour nettoyer la structure du code, supprimer ce code mal conçu, en remboursant métaphoriquement le principal. Si je ne le fais que pour cette seule fonctionnalité, ce n'est pas un gain, car je prendrais neuf jours au lieu de six. Mais si j'ai deux autres fonctionnalités similaires à venir, alors je finirai plus rapidement en supprimant d'abord le code mal conçu.

En d'autres termes, il s'agit simplement d'utiliser des chiffres et tout responsable disposant d'un tableur devrait faire des choix. Malheureusement, comme nous ne pouvons pas mesurer la productivité, aucun de ces coûts n'est objectivement mesurable. Nous pouvons estimer le temps nécessaire pour réaliser une fonctionnalité, estimer ce à quoi elle pourrait ressembler si le code mal conçu était supprimé, et estimer le coût de la suppression du code mal conçu. Mais la précision de ces estimations est assez faible.

Dans ces conditions, la meilleure solution est généralement de faire ce que nous faisons habituellement avec les dettes financières, à savoir rembourser le principal progressivement. Pour la première fonctionnalité, je vais passer quelques jours de plus pour enlever une partie du code mal conçu. Cela peut être suffisant pour réduire le taux d'intérêt sur les futures améliorations à un seul jour. Cela prendra encore plus de temps, mais en supprimant le code mal conçu, je réduis le coût des futures modifications de ce code. Le plus gros avantage d'une amélioration progressive comme celle-ci est que cela signifie naturellement que nous passons plus de temps à retirer le code mal conçu dans les parties que nous modifions fréquemment, qui sont exactement les parties du code base où nous avons le plus besoin que le code mal conçu soit supprimé.

Le fait de penser que l'on paie des intérêts plutôt que le principal peut aider à décider quel est le code mal conçu à traiter. Si j'ai une partie du code base qui est déplorable, un véritable cauchemar à modifier, ce n'est pas un problème si je n'ai pas à la modifier. Je ne déclenche un paiement d'intérêts que lorsque je dois travailler avec cette partie du logiciel (c'est un endroit où la métaphore s'effondre, puisque les paiements d'intérêts financiers sont déclenchés par le temps qui passe). On peut donc laisser les parties du code qui sont mal conçues mais stables. En revanche, les parties du code souvent modifiées nécessitent une tolérance zéro vis-à-vis du code mal conçu, car les paiements d'intérêts sont extrêmement élevés. Ceci est particulièrement important car le code mal conçu s'accumule lorsque les développeurs apportent des modifications sans se soucier de la qualité interne ; plus les modifications sont nombreuses, plus le risque de mal concevoir le code est grand.

La métaphore de la dette est parfois utilisée pour justifier le fait de ne pas tenir compte de la qualité interne. L'argument est qu'il faut du temps et des efforts pour empêcher l'accumulation de la dette. Si de nouvelles fonctionnalités sont nécessaires de toute urgence, il est peut-être préférable d'assumer la dette, en acceptant que cette dette doive être gérée ultérieurement.

Notes

  1. Cruft