Coding Katas per esercitarsi nel refactoring del codice legacy


123

Negli ultimi mesi mi sono interessato molto alla codifica dei kata. Credo che siano un ottimo modo per affinare le mie capacità di programmazione e migliorare la qualità del codice che scrivo sul lavoro.

Ci sono numerosi luoghi in cui si può trovare Katas. piace..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

Ho scoperto che questi sono eccellenti archivi di Katas ... i miei tentativi con alcuni di loro sono stati immensamente gratificanti.

Tuttavia, sento che tutti i Kata che ho visto finora hanno uno svantaggio. Nessuno di loro sembra permettermi di esercitarmi nel refactoring di codice errato. È fantastico imparare a scrivere codice pulito la prima volta ... ma nel mio lavoro attuale, non ho troppe opportunità per scrivere nuovo codice. Piuttosto, sto spesso combattendo contro il codice legacy e cerco di capire come rifattorizzare i moduli, eliminare le dipendenze e ridurre l'accoppiamento.

In quanto tale, sono alla ricerca di un paio di Katas che posso usare per affinare le mie capacità di refactoring del codice legacy e trasformarlo in codice pulito.

Qualcuno sa di qualcuno che già esiste? So di fare molta pratica mentre sono al lavoro ... ma mi piacerebbe affinare le mie capacità al punto in cui sono in grado di vedere rapidamente come rompere le dipendenze e separare le preoccupazioni nelle classi che fare troppo.


+1 bella domanda, con informazioni utili fornite
KLE

Vorrei poter dare più di +1 :) Ottima domanda. Non ho mai nemmeno pensato a questo tipo di pratica per la programmazione ...
FallenAvatar

Mi piacerebbe che qualcuno pubblicasse effettivamente un piccolo sistema specifico per il refactoring del codice legacy ... qualcosa che abbia parti in cui i refactoring di Michael Feathers brillerebbero. Sto cercando qualcosa di simile da più di una settimana ormai. chiunque? chiunque? :)
Derick Bailey

Bella domanda. Puoi mettere in pratica ciò che @ Ryan ha menzionato nella sua risposta. Suggerisco di forkare un repository giithub: github.com/garora/TDD-Katas Puoi andare nella storia e controllare come questi Katas vengono refactoring.
Gaurav Aroraa

Risposte:


92

Non conosco un sito che li cataloghi direttamente, ma una strategia che ho usato occasionalmente è questa:

  1. Trova un progetto open source vecchio, piccolo e non mantenuto su sourceforge
  2. Scaricalo, fallo compilare / costruire / eseguire
  3. Leggi la documentazione, fatti un'idea del codice
  4. Usa le tecniche in Lavorare efficacemente con il codice legacy per metterne alla prova una parte
  5. Rifattorizza quel pezzo, forse correggendo bug e aggiungendo funzionalità lungo il percorso
  6. Ripeti i passaggi da 4 a 6

Quando trovi una parte particolarmente impegnativa, butta via il tuo lavoro e ripetilo un paio di volte per rafforzare le tue capacità.

Questo non si limita a praticare il refactoring, ma altre abilità come la lettura del codice, il test e la gestione dei processi di compilazione.

Il problema più difficile è trovare un progetto a cui sei interessato abbastanza da continuare a lavorare. L'ultimo su cui ho lavorato è stata una libreria python per la programmazione genetica, e quella su cui sto lavorando è una libreria IRC per Java.


4
+1 suggerimento molto interessante. Come hai detto, la cosa difficile è trovare un progetto appropriato. Lo terrò molto in considerazione. Forse se io, o altri, trovassimo alcuni che sono molto utili, potrebbero essere salvati e documentati da qualche parte come un Kata ...
mezoid

3
"Trattare con il codice legacy" - intendi "lavorare in modo efficace con il codice legacy"? amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/…
TrueWill

1
Sì, intendo "Lavorare in modo efficace con il codice legacy". Grazie per la cattura!
Ryan

21

Mi sento come se un negromante rispondesse a un thread così vecchio, ma c'è una cosa che sarebbe un'aggiunta degna: Legacy Code Retreat .

L'idea è fare un ritiro del codice con codice legacy e provare a mettere in pratica le stesse tecniche per gestirlo, ma non vedo nulla che possa vietarti di usare semplicemente il codice preparato e di esercitarti con esso da solo. Il solo utilizzo per creare un Golden Master rende un'ora di lavoro e c'è molto di più che puoi fare. Se i tuoi kata di solito durano circa 2 ore, direi che suddividendo ciò che di solito accade su LCR in kata ti dà quattro cose diverse su cui lavorare.

C'è un repository GitHub dell'autore dell'idea, JB Rainsberger, che contiene un semplice sistema legacy con cui devi lavorare, Trivia Game.

Dalla mia esperienza come organizzatore / partecipante, alla gente è piaciuto molto ed è stato illuminante vedere quale può essere un problema in un codice legacy e dove il tuo refactoring può portarti fuori strada (e come!). Ecco un altro resoconto di come appare, di Andreas Leidig .


20

Emily Bache ha un repository github con alcuni kata di refactoring: Emily Bache's Refactoring Kata Repo . Ci sono varianti di KataYahtzee e KataTennis da refactoring. Inoltre, ha una variante del Gilded Rose Kata, che è stato progettato come un kata di refactoring.

Inoltre, ha il Racing Car Katas nel suo repo: Racing Car Kata . I Race Car Katas includono anche buoni esercizi per il refactoring.

Quei kata hanno il codice in più lingue:

  • C ++
  • C #
  • Giava
  • Javascript
  • Pitone
  • Rubino

4
Emily ha anche pubblicato il libro The Coding Dojo Handbook che elenca i Katas e descrive come avviare ed eseguire i tuoi dojo di programmazione. Consiglio vivamente il libro: leanpub.com/codingdojohandbook
Christian Maslen

1
Ho usato il suo libro per eseguire dojo e sono d'accordo che sia un'ottima risorsa. Anche Emily ha un corso correlato su pluralsight.com/courses/the-coding-dojo.
Steve Clanton
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.