Note de lecture : Working Effectively with Legacy Code, par Michael C. Feathers

Note : 9 ; Le refactoring repensé pour le legacy. Book of the year 2018 !

Appréhender la remise sous contrôle du code legacy est à mon avis une discipline à part entière. C’est en partie de l’architecture, tout en empruntant au refactoring avec une démarche de tests bien à elle. Entre autres choses. Mais peu d’ouvrages sont dédiés à la question, il faut dire que celle-ci n’est pas la plus sexy qui soit. Le livre de Michael Feathers se tient au sommet de cet édifice depuis plus d’une douzaine d’années et pour de bonnes raisons.

Michael Feathers nous propose une approche dans la ligne de l’approche extrême programming, en s’appuyant sur une vision code adossé à des tests unitaires. D’ailleurs sa définition du code legacy s’en inspire directement : du code legacy, c’est du code sans tests !

Avec 420 pages, ce n’est pas un petit volume que nous avons entre les mains. Il se découpe en 3 parties. La première d’entre-elle « the mechanics of change » est aussi la plus courte avec une cinquantaine de pages en 5 chapitres. Il s’agit bien d’une introduction assez exhaustive à l’approche que propose l’auteur et que j’appelle le « inside out ». Elle répond aux questions suivantes :

  • Quels sont les raisons de changer un système existant, et comment en préserver le comportement ?
  • De quels types de tests avons-nous besoin et que doivent-ils nous permettre de faire sur notre legacy ?
  • Quelles sont les « coutures » du système ? C’est-à-dire les endroits d’où l’on peut modifier le comportement du système sans l’altérer ?

La seconde partie « changing software » est la plus importante, avec près de 270 pages et 19 chapitres. C’est aussi la plus intéressante, car elle propose autant de patterns de refactoring du legacy. L’auteur y confronte les nombreuses situations auxquelles nous sommes confrontées dans notre bataille avec le legacy : difficulté de mettre en place un harnais de test (à cause de dépendances, de variable globale, de construction d’objet complexe, etc.), difficulté d’identifier le test à écrire suite à un changement, complexité de l’effet de propagation d’un changement, etc. La logique de l’auteur va toujours dans le même sens : d’abord mettre les dépendances sous contrôle pour pouvoir mettre en place un test, puis seulement améliorer le design.

L’un des points forts du texte, outre le fait de nous exposer des patterns créatifs de mise en place des tests, est de partager avec nous la logique du raisonnement, de partager avec nous la manière dont il aborde le problème et les étapes pas à pas. L’auteur le fait non seulement en construisant la solution, mais en prenant du recul après coup pour observer à postériori le cheminement. Pour appuyer son raisonnement, l’auteur utilise une notation graphique personnelle : les diagrammes d’effets, qui permettent de suivre les impacts entre entités.

Cette seconde partie est bien trop riche pour la passer en revue de manière systématique. Se contenter d’une seule lecture ne serait pas juste non plus : la première lecture pourra se doubler d’une utilisation « manuel de référence » plus tard.

La 3ème partie « breaking dependencies techniques » est un catalogue de patterns de refactoring exclusivement dédiés à rompre les dépendances. Chaque technique est claire dans l’énoncé du problème et dans la solution. Mais il s’agit bel et bien d’un catalogue : difficile de rendre cela passionnant. Passé les 3 ou 4 premiers, je me suis dit que j’y reviendrais plus tard…

L’œuvre de Michael Feathers mérite sans aucun doute la réputation qui le suit depuis sa parution. C’est un texte solide qui condense l’expertise de la remise sous contrôle du legacy, en intégrant une démarche qui est spécifique à ce contexte. La prose est intéressante, concrète et on découvre encore des choses même si l’on pense être aguerri. Dommage que l’ouvrage commence quand même à accuser son âge : il est en bonne partie écrit pour défier le temps, mais il mériterait un petit rafraichissement. Cela dit, même en l’état cela sera un élément majeur de votre bibliothèque.

Working Effectively with Legacy Code, par Michael C. Feathers

Référence complète : Working Effectively with Legacy Code – Michael C. Feathers – Prentice Hall / Robert C. Martin series 2005 – ISBN : 0-13-117705-2

Publicité

2 réflexions sur “Note de lecture : Working Effectively with Legacy Code, par Michael C. Feathers

    1. Bonjour Joseph,
      Il est bien dans mes notes de lecture, juste ici : https://freethinker.addinq.uy/2015/06/06/note-de-lecture-growing-object-oriented-software/
      C’est ma meilleure référence sur la conception émergente, même si parfois le texte se montre un peu fastidieux !
      En matière de TDD je recommande aussi « Unit Testing » par Vladimir Khorikov : https://freethinker.addinq.uy/2020/09/06/note-de-lecture-unit-testing-principles-practices-and-patterns-par-vladimir-khorikov/
      Le livre est récent et apporte des éclairages sur les fondamentaux là où on pensait que tout était dit !

      J’aime

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.