Codage des Katas pour pratiquer la refactorisation du code hérité

123

Je me suis beaucoup intéressé au codage des katas ces derniers mois. Je pense qu'ils sont un excellent moyen de perfectionner mes compétences en programmation et d'améliorer la qualité du code que j'écris au travail.

Il existe de nombreux endroits où l'on trouve des katas. comme..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

J'ai trouvé que c'était d'excellents dépôts de Katas ... mes tentatives sur certains d'entre eux ont été extrêmement enrichissantes.

Cependant, je pense que tous les Kata que j'ai vus jusqu'à présent ont un court à venir. Aucun d'entre eux ne me permet de m'entraîner à refactoriser du mauvais code. C'est formidable d'apprendre à écrire du code propre la première fois ... mais dans mon travail actuel, je n'ai pas trop d'occasions d'écrire du nouveau code. Au contraire, je me bats souvent contre le code hérité et j'essaie de comprendre comment refactoriser les modules, éliminer les dépendances et réduire le couplage.

En tant que tel, je suis à la recherche de quelques Katas que je peux utiliser pour perfectionner mes compétences de refactorisation du code hérité et de le transformer en code propre.

Quelqu'un en sait-il déjà? Je sais que je m'y pratique beaucoup pendant que je suis au travail ... mais j'aimerais affiner mes compétences au point où je suis capable de voir rapidement comment briser les dépendances et séparer les préoccupations dans les classes qui faire beaucoup trop.

mezoid
la source
+1 belle question, avec des informations utiles fournies
KLE
J'aimerais pouvoir donner plus de +1 :) Excellente question. Je n'ai même jamais pensé à ce genre de pratique pour la programmation ...
FallenAvatar
J'adorerais voir quelqu'un publier un petit système spécifiquement pour la refactorisation du code hérité ... quelque chose qui a des parties où les refactorisations de Michael Feathers brilleraient. Je cherchais quelque chose comme ça depuis plus d'une semaine maintenant. n'importe qui? n'importe qui? :)
Derick Bailey
Bonne question. Vous pouvez pratiquer ce que @Ryan a mentionné dans sa réponse. Je suggère de créer un dépôt giithub: github.com/garora/TDD-Katas Vous pouvez entrer dans l'histoire et vérifier comment ces Katas sont refactorisés.
Gaurav Aroraa

Réponses:

92

Je ne connais pas de site qui les catalogue directement, mais une stratégie que j'ai utilisée à l'occasion est la suivante:

  1. Trouvez un ancien, petit projet open source non maintenu sur sourceforge
  2. Téléchargez-le, faites-le compiler / construire / exécuter
  3. Lisez la documentation, ayez une idée du code
  4. Utilisez les techniques de Travailler efficacement avec le code hérité pour en tester une partie
  5. Refactoriser cette pièce, peut-être en corrigeant les bugs et en ajoutant des fonctionnalités en cours de route
  6. Répétez les étapes 4 à 6

Lorsque vous trouvez une partie particulièrement difficile, jetez votre travail et répétez-le plusieurs fois pour renforcer vos compétences.

Cela ne pratique pas seulement la refactorisation, mais d'autres compétences telles que la lecture de code, les tests et la gestion des processus de construction.

Le problème le plus difficile est de trouver un projet qui vous intéresse suffisamment pour continuer à travailler. Le dernier sur lequel j'ai travaillé était une bibliothèque python pour la programmation génétique, et celle sur laquelle je travaille actuellement est une bibliothèque IRC pour Java.

Ryan
la source
4
+1 suggestion très intéressante. Comme vous l'avez dit, le plus délicat est de trouver un projet approprié. Je vais beaucoup réfléchir à celui-ci. Peut-être que si moi, ou d'autres, en trouvons qui sont très utiles, cela pourrait être sauvegardé et documenté quelque part comme un Kata ...
mezoid
3
«Traiter avec l'ancien code» - voulez-vous dire «Travailler efficacement avec l'ancien code»? amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/…
TrueWill
1
Oui, je veux dire "Travailler efficacement avec l'ancien code". Merci pour la capture!
Ryan
21

Je me sens comme un nécromancien répondant à un fil de discussion aussi ancien, mais il y a une chose qui ferait un ajout digne: Legacy Code Retreat .

L'idée est d'avoir une retraite de code avec du code hérité et d'essayer de mettre en pratique les techniques mêmes pour y faire face, mais je ne vois rien qui vous interdirait simplement d'utiliser le code préparé et de vous entraîner avec vous-même. Le simple fait de l'utiliser pour créer un Golden Master représente une heure de travail, et vous pouvez faire beaucoup plus. Si votre kata dure généralement environ 2 heures, je dirais qu'en divisant ce qui se passe habituellement sur LCR en kata, vous obtenez quatre choses différentes sur lesquelles travailler.

Il existe un référentiel GitHub de l'auteur de l'idée, JB Rainsberger, qui contient un système hérité simple avec lequel vous devez travailler, Trivia Game.

D'après mon expérience en tant qu'organisateur / participant, les gens ont vraiment aimé cela et c'était instructif de voir ce qui peut être un problème dans un code hérité et où votre refactoring peut vous induire en erreur (et comment!). Voici encore un autre récit de son apparence, par Andreas Leidig .

LAFK dit réintégrer Monica
la source
20

Emily Bache a un référentiel github avec quelques katas de refactoring: Refactoring Kata Repo d'Emily Bache . Il existe des variantes de KataYahtzee et KataTennis à refactoriser. En outre, elle a une variante du Kata à la rose dorée, qui a été conçue comme un kata de refactorisation.

En outre, elle a le Racing Car Katas dans son repo: Racing Car Kata . Les Katas Race Car comprennent également de bons exercices de refactoring.

Ces kata ont le code en plusieurs langages:

  • C ++
  • C #
  • Java
  • Javascript
  • Python
  • Rubis
Steve Clanton
la source
4
Emily a également publié le livre The Coding Dojo Handbook qui répertorie les Katas et décrit comment démarrer et exécuter vos propres dojos de codage. Je recommande vivement le livre: leanpub.com/codingdojohandbook
Christian Maslen
1
J'ai utilisé son livre pour exécuter des dojos, et je reconnais que c'est une excellente ressource. Emily a également un cours connexe sur pluralsight.com/courses/the-coding-dojo.
Steve Clanton