mardi 8 juillet 2014

Refactoring, you're doing it wrong

Ce qui m'énerve avec le refactoring, c'est que certains considèrent que c'est un gros chantier, qu'il faut bloquer la base de code pendant une semaine pendant laquelle on aura cassé toutes les fonctionnalités existantes puis passer une seconde semaine à fusionner toutes les modifs. C'est raide !

Je me rappelle une conf de Joshua Kerievsky dans laquelle il expliquait en gros, si je me rappelle bien, qu'il cherchait à rester le moins longtemps possible dans le rouge lorsqu'il faisait du refactoring. En effet, cela lui permettait de garder la possibilité de faire du déploiement en continu malgré le souhait de refactoriser tout le système. Ç'a été une révélation pour moi. J'aime bien me dire que je suis en condition de déploiement continu, même si c'est loin d'être vrai. Je ne veux pas me mettre dans une situation ou je bloque le répo, ou j'empèche les gens de commiter, où je dois passer un long moment pénible à fusionner les modifications des collègues.

Les idées :

  • Y aller par petites touches. Considérer que le refactoring est quelque chose de constant sur un projet et pas un déploiement big bang auquel on va s'astreindre tous les 36 du mois.
  • Le refactoring se fait s'il y a une couverture de test qu'on estime suffisante. Franchement, rédigez au moins des tests système qui contrôlent que vous n'êtes pas en train de tout défoncer. Si vous n'en n'avez pas un minimum, codez en ou tant pis, laissez le code comme il est.
  • Utiliser les outils de votre IDE. Même un truc tout pourri comme VS2008 possède des fonctionnalités permettant de renommer des éléments, extraire des méthodes, des interfaces. Utilisez les parce qu'ils ne prennent pas de risque. Il vous garantissent dans la plupart de cas l'absence d'erreur.
  • N'envisager l'approche « je refais une grosse merde qui tourne en parallèle du code existant et je la branche quand c'est prêt » que quand vous ne pouvez pas faire plus simple.

Timeboxez vos sessions de refactoring. Je vous promets que vous pouvez faire des trucs sympas en 30 minutes et en faire profiter les collègues. Dites-vous que la livraison c'est demain, dans 1 heure, dans 30 minutes... Motivant, non ?