Refactoring

Publié le 3 sept. 2019

(Livre bien connu de Martin Fowler)

L’introduction part des principes que

  1. Le code source sera toujours plus souvent lu qu’écrit - Code will be read more often than it will be written.
  2. Que modifier du code existant implique des risques, au travers de l’introduction subtile de nouveaux bugs et de modifications du comportement de certaines fonctionnalités.
  3. En fonction de la base de code existante, une phase de refactoring peut prendre entre plusieurs jours et plusieurs semaines: au plus on creuse, au plus on trouve de choses nécessitant une modification, qui implique à nuoveau de creuser encore, …

The more you dig, the more stuff you turn up… and the more changes you make. Eventually, you dig yourself into a hole you can’t get off. To avoid digging your own grave, refactoring must be done systematically.

Tests (unitaires & intégration)

Construire des tests facilite le travail dans la mesure où, quand un bug arrive, les tests qui lui sont associés vont irrémédiablement se planter. Cela indique où la modification doit être apportée.

Tous ces tests doivent être automatiques, de la même manière que la compilation ou la gestion des dépendances. Ne regardez pas la sortie console, faites juste en sorte qu’un worker vous indique ce qui ne fonctionne plus.

Il y a toujours un risque qu’on rate quelque chose, mais il vaut mieux passer un temps raisonnable à attraper la plupart des bugs, plutôt que de passer des années à leur courir après.

Conseils de programmation

By refactoring, you can ensure that you fully understand how the program works and should be designed

L’accumulation de décisions d’architecture à moitié comprises peut éventuellement trucider un programme.

Conclusion

Un truc un peu ennuyant quand on lit ce livre, c’est que tous ces exemples “simples”, on a parfois l’impression de lire quelques contradictions.

Par exemple, avec la délégation simple: si une classe fait trop de délégations simples et agit comme un middle-man, il faut alors la dégager, parce qu’elle génère un trop grand couplage de classes. Du coup, il ne s’agit pas vraiment d’un livre de recettes à suivre, mais plus d’une concrétisation de l’intuition par l’expérience.

Plus précisément, il s’agit d’une clarification étape par étape de choses que l’expérience nous fait faire intuitivement.