Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Working effectively with legacy code

365 views

Published on

Charla de Iker (540) en el Open Space 10 aniversario de Biko. Cómo trabajar con código legado
Después de leernos el libro “Working effectively with legacy code” explicaremos algunos ejemplos chulos que explican en el libro sobre como trabajar con código legado, introducir testing y limpiar el código. Teórica y también práctica ya que entraremos a ver ejemplos en código.

Published in: Software
  • Be the first to comment

Working effectively with legacy code

  1. 1. Calidad Clean code Profesionalidad Hacer lo correcto Economics
  2. 2. ¿POR QUÉ HABLAMOS DE ESTO?
  3. 3. WORKING EFFECTIVELY WITH LEGACY CODE
  4. 4. EDIT & PRAY VS COVER & MODIFY
  5. 5. 1. Hay que planificar los cambios con mucho cuidado. 2. Entender el código que estamos modificando. 3. Empezar a realizar cambios. 4. Comprobar que TODO sigue funcionando. 5. Y repetir 3 o 4 veces todo hasta que sabemos que funciona. EDIT & PRAY
  6. 6. •  Trabajar con feedback. •  Escribir tests para describir el comportamiento. •  Preparar código para TDD (Refactoring). •  TDD. COVER AND MODIFY
  7. 7. 1.  Identificar puntos de cambio 2.  Encontrar puntos donde se puede añadir tests 3.  Romper dependencias 4.  Escribir tests 5.  Hacer cambio/añadir feature y refactor PASO A PASO
  8. 8. Depende del objetivo del desarrollo. Pitch point. Tests de caracterización. ¿CÓMO EMPEZAR?
  9. 9. SEAMS/COSTURAS
  10. 10. ●  Detección: Para detectar identificar valores que computa nuestro código y a los que no podemos acceder. ●  Separación: Para poder introducir tests a una parte del código que está acoplado. ¿POR QUÉ ROMPER DEPENDENCIAS?
  11. 11. DETECCIÓN/SEPARACIÓN
  12. 12. ESTRATEGIAS PARA ROMPER DEPENDENCIAS
  13. 13. La clase no puede ser instanciada en un entorno de test. Hay una dependencia que es difícil de mockear o falsear. No hay un punto de corte donde una dependencia complicada pueda ser sustituida por un mock o fake. PROBLEMAS QUE PODEMOS ENCONTRAR
  14. 14. Break Out Method Object Expose Static Method Parameterize Constructor Pull up feature Adapt Parameter Extract Implementer Extract Interface Extract and Override Call TÉCNICAS Extract and Override Factory Method Introduce Instance Delegator Introduce Static Setter Parameterize Constructor Parameterize Method Replace Global Reference with Getter Supersede Instance Variable Subclass and Override Method
  15. 15. SUBCLASS AND OVERRIDE. EXTRACT INTERFACE AND PARAMETERIZE CONSTRUCTOR. ADAPT PARAMETER. TÉCNICAS
  16. 16. SEAM & SUBCLASS AND OVERRIDE
  17. 17. EXTRACT INTERFACE AND PARAMETERIZE CONSTRUCTOR
  18. 18. ADAPT PARAMETER
  19. 19. ¡No entiendo el código!
  20. 20. Leer muchas veces. Hacer schemas/dibujos Extraer métodos pequeños. Scratch refactoring ¡NO ENTIENDO EL CÓDIGO!
  21. 21. Leer muchas veces. Hacer schemas/dibujos Extraer métodos pequeños. Scratch refactoring ¡NO ENTIENDO EL CÓDIGO!
  22. 22. MY CLASS IS TOO BIG
  23. 23. Dividir responsabilidades. Buscar métodos agrupados. Buscar métodos ocultos. Buscar acciones se pueden cambiar al mismo tiempo. Buscar relaciones internas. Buscar las responsabilidades de la clase. Hacer scratch refactoring. Centrarse en el trabajo actual. MY CLASS IS TOO BIG
  24. 24. ¡No tengo tiempo!
  25. 25. Sprout method Sprout class Wrap method Wrap class ¡NO TENGO TIEMPO!
  26. 26. SPROUT METHOD
  27. 27. SPROUT METHOD
  28. 28. WRAP CLASS
  29. 29. WRAP CLASS
  30. 30. http://ptgmedia.pearsoncmg.com/images/9780131177055/samplepages/ 0131177052.pdf https://timhigh.wordpress.com/2008/08/15/legacy-code-bad-practices/ https://agilewarrior.wordpress.com/2011/05/05/working-effectively-with- legacy-code/ http://codely.tv/screencasts/testear-codigo-acoplado/ http://craftedsw.blogspot.com.es/2011/07/testing-legacy-hard-wired- dependencies.html REFERENCIAS

×