Codificación de Katas para practicar la refactorización del código heredado

123

Me he interesado bastante en codificar katas en los últimos meses. Creo que son una excelente manera de perfeccionar mis habilidades de programación y mejorar la calidad del código que escribo en el trabajo.

Hay numerosos lugares donde se pueden encontrar Katas. me gusta..

http://codekata.pragprog.com/

http://schuchert.wikispaces.com/Katas

http://www.codingdojo.org/

He encontrado que estos son excelentes depósitos de Katas ... mis intentos en algunos de ellos han sido inmensamente gratificantes.

Sin embargo, siento que todos los Kata que he visto hasta ahora tienen un corto camino. Ninguno de ellos parece permitirme practicar la refactorización de códigos incorrectos. Es genial aprender a escribir código limpio la primera vez ... pero en mi trabajo actual, no tengo muchas oportunidades para escribir código nuevo. Más bien, a menudo estoy luchando contra el código heredado e intentando descubrir cómo refactorizar módulos, eliminar dependencias y reducir el acoplamiento.

Como tal, estoy buscando un par de Katas que pueda usar para perfeccionar mis habilidades de refactorizar el código heredado y convertirlo en código limpio.

¿Alguien sabe de alguno que ya exista? Sé que practico mucho mientras estoy en el trabajo ... pero me gustaría perfeccionar mis habilidades hasta el punto de poder ver rápidamente cómo separar las dependencias y las preocupaciones separadas en las clases que hacer demasiado

mezoide
fuente
+1 buena pregunta, con información útil proporcionada
KLE
Desearía poder dar más de +1 :) Gran pregunta. Ni siquiera he pensado en este tipo de práctica para la programación ...
FallenAvatar
Me ENCANTARÍA ver a alguien publicar un pequeño sistema específicamente para la refactorización del código heredado ... algo que tiene partes donde brillarían las refactorizaciones de Michael Feathers. He estado buscando algo como esto por más de una semana. ¿nadie? ¿nadie? :)
Derick Bailey
Buena pregunta. Puedes practicar lo que @Ryan mencionó en su respuesta. Sugiero bifurcar un repositorio giithub: github.com/garora/TDD-Katas Puede ir al historial y verificar cómo se refactorizan estos Katas.
Gaurav Aroraa

Respuestas:

92

No conozco un sitio que los catalogue directamente, pero una estrategia que he usado en ocasiones es esta:

  1. Encuentre un proyecto de código abierto antiguo, pequeño y sin mantenimiento en sourceforge
  2. Descárgalo, obténlo para compilar / construir / ejecutar
  3. Lea la documentación, tenga una idea del código
  4. Use las técnicas en Trabajar eficazmente con código heredado para obtener una parte del mismo bajo prueba
  5. Refactorice esa pieza, tal vez arreglando errores y agregando características en el camino
  6. Repita los pasos del 4 al 6

Cuando encuentre una parte que fue especialmente desafiante, deseche su trabajo y repítalo un par de veces para reforzar sus habilidades.

Esto no solo practica la refactorización, sino otras habilidades como la lectura de códigos, las pruebas y el manejo de procesos de compilación.

El problema más difícil es encontrar un proyecto en el que esté lo suficientemente interesado como para seguir trabajando. El último en el que trabajé fue una biblioteca de Python para programación genética, y el actual en el que estoy trabajando es una biblioteca IRC para Java.

Ryan
fuente
44
+1 sugerencia muy interesante. Como dijiste, lo complicado es encontrar un proyecto apropiado. Le daré mucha consideración a este. Tal vez si, u otros, encontrar algunos que son muy útiles que podrían salvarse y en algún lugar como un Kata documentado ...
mezoid
3
"Manejo del código heredado": ¿quiere decir "Trabajar eficazmente con el código heredado"? amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/…
TrueWill
1
Sí, me refiero a "Trabajar eficazmente con código heredado". Gracias por la captura!
Ryan
21

Me siento como un nigromante respondiendo a un hilo tan antiguo, pero hay una cosa que sería una adición digna: el Retiro de código heredado .

La idea es tener un retiro de código con código heredado y tratar de practicar las técnicas para tratarlo, pero no veo nada que te impida simplemente usar el código preparado y practicarlo tú mismo. Solo usarlo para crear un Golden Master hace una hora de trabajo, y hay mucho más que puedes hacer. Si su kata generalmente dura alrededor de 2 horas, diría que simplemente dividiendo lo que generalmente sucede en LCR en kata le da cuatro cosas diferentes para trabajar.

Hay un repositorio de GitHub del autor de la idea, JB Rainsberger, que contiene un sistema heredado simple con el que debes trabajar, Trivia Game.

Desde mi experiencia como organizador / participante, a la gente realmente le gustó esto y fue esclarecedor ver qué puede ser un problema en un código heredado y dónde su refactorización puede llevarlo por mal camino (¡y cómo!). Aquí hay otra cuenta de cómo se ve, por Andreas Leidig .

LAFK dice reinstalar a Mónica
fuente
20

Emily Bache tiene un repositorio de github con algunas katas refactorizadoras: Repoctorización Kata Repo de Emily Bache . Hay variantes de KataYahtzee y KataTennis para refactorizar. Además, ella tiene una variante de la rosa dorada Kata, que fue diseñada como una kata refactorizadora.

Además, ella tiene las Racing Car Katas en su repositorio: Racing Car Kata . Los Race Car Katas también incluyen buenos ejercicios para refactorizar.

Esos kata tienen el código en múltiples idiomas:

  • C ++
  • C#
  • Java
  • Javascript
  • Pitón
  • Rubí
Steve Clanton
fuente
44
Emily también ha publicado el libro The Coding Dojo Handbook que enumera los Katas y describe cómo comenzar y ejecutar sus propios dojos de codificación. Recomiendo el libro: leanpub.com/codingdojohandbook
Christian Maslen
1
He usado su libro para ejecutar dojos, y estoy de acuerdo en que es un excelente recurso. Emily también tiene un curso relacionado en pluralsight.com/courses/the-coding-dojo.
Steve Clanton