Dealing with fear in legacy projects #PHPDS15

1.114 visualizaciones

Publicado el

Charla del PHP Day Spain, sobre como lidiar con Legacy Code. Se habla de UnitTesting, Refactoring. Ademas de como generar codigo de buena calidad con TDD y Clean Code.

Publicado en: Tecnología
0 comentarios
1 recomendación
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
1.114
En SlideShare
0
De insertados
0
Número de insertados
354
Acciones
Compartido
0
Descargas
8
Comentarios
0
Recomendaciones
1
Insertados 0
No insertados

No hay notas en la diapositiva.

Dealing with fear in legacy projects #PHPDS15

  1. 1. Dealing with fear in legacy projects #PHPDS15 ¿Quien soy? ● Aitor Suso ● @patxi1980 ● Desarrollador PHP por 10 años ● Web developer en Atrápalo 3
  2. 2. Dealing with fear in legacy projects #PHPDS15 De qué va la charla Mejorar código ya existente Generar buen código nuevo 4
  3. 3. Dealing with fear in legacy projects #PHPDS15 ¿A qué llamamos “legacy code”? ● Código viejo ● Código feo ● Código incomprensible ● Código espagueti ● Galimatías absurdo 5
  4. 4. Dealing with fear in legacy projects #PHPDS15 Miedos con el legacy code Romper el código actual No entender lo que hace el código 6
  5. 5. Dealing with fear in legacy projects #PHPDS15 Soluciones a los miedos 7 Romper el código actual No entender lo que hace el código Test automatizados Refactor
  6. 6. #PHPDS15 Dealing with fear in legacy projects Test automatizados 8
  7. 7. Dealing with fear in legacy projects #PHPDS15 ¿A qué llamamos “legacy code”? Para mi, “legacy code” es simplemente código sin tests. Michael Feathers 9
  8. 8. Dealing with fear in legacy projects #PHPDS15 Working Effectively with Legacy Code Michael C. Feathers http://goo.gl/gdEUGR 10
  9. 9. Dealing with fear in legacy projects #PHPDS15 Situación extrema para testear 11 Controlador con todo acoplado ● Lógica ● Llamadas a BD ● Generación de HTML
  10. 10. Dealing with fear in legacy projects #PHPDS15 The Legacy Code Dilemma Cuando cambiamos el código, necesitamos tener tests. Para tener tests, necesitamos cambiar el código. 12
  11. 11. Dealing with fear in legacy projects #PHPDS15 Tests funcionales al rescate ● Selenium ● Behat ● Comparación de Response ● Salida de texto ● ... 13
  12. 12. Dealing with fear in legacy projects #PHPDS15 Situaciones complejas para testear ● variables globales y super globales ● creación de objetos con lógica (new) ● llamadas a BD ● llamadas a APIs / servicios externos ● ... 14
  13. 13. Dealing with fear in legacy projects #PHPDS15 Empezar por los caminos menos profundos Ir creando nuevos tests, que analizen los caminos de menos profundos a más profundos. ¿Cómo testear? 15
  14. 14. Dealing with fear in legacy projects #PHPDS15 Es una carrera de fondo (I) Cuando tienes un bug, mejor crear un test que lo reproduzca antes de arreglarlo 16
  15. 15. Dealing with fear in legacy projects #PHPDS15 Es una carrera de fondo (II) Es mejor tener un set pequeño y correrlo siempre, que un set complejo y no correrlo nunca 17
  16. 16. Dealing with fear in legacy projects #PHPDS15 Ventajas de test unitarios ● Feedback rápido ● Errores localizados ● Explican el funcionamiento de la “unidad” 18
  17. 17. Dealing with fear in legacy projects #PHPDS15 No solo tests unitarios Tests funcionales ● Validar procesos completos ● Mejor conocimiento del comportamiento del código ● Procesos críticos siempre estables. 19
  18. 18. #PHPDS15 Dealing with fear in legacy projects Refactoring 20
  19. 19. Dealing with fear in legacy projects #PHPDS15 ¿A qué llamamos “refactoring”? Un cambio realizado en la estructura interna de software para que sea más fácil de entender y más barato de modificar sin cambiar su comportamiento. Martin Fowler 21
  20. 20. Dealing with fear in legacy projects #PHPDS15 Refactoring: Improving the Design of Existing Code Martin Fowler http://goo.gl/gUUIgw 22
  21. 21. Dealing with fear in legacy projects #PHPDS15 Code smells ● Código duplicado ● Métodos largos ● Clases largas ● Switchs ● Código muerto ● …. 23
  22. 22. Dealing with fear in legacy projects #PHPDS15 ¿Cómo refactorizar? Buscar el camino más profundo, refactorizar dicho trozo de código. Seguir iterando refactorizaciones 24
  23. 23. Dealing with fear in legacy projects #PHPDS15 Técnicas básicas de refactor ● Extraer métodos ● Convertir números mágicos en constantes ● Mover lógica de los condicionales a funciones ● Mover código de los condicionales y bucles a funciones. 25
  24. 24. Dealing with fear in legacy projects #PHPDS15 ¿Cuando terminar de refactorizar? Extract until you drop Robert C. Martin (Uncle Bob) 26
  25. 25. #PHPDS15 Dealing with fear in legacy projects Como no generar más “legacy code” 27
  26. 26. Dealing with fear in legacy projects #PHPDS15 ¿A qué llamamos “legacy code”? El código es “legacy code” tan pronto como esta escrito. 28
  27. 27. Dealing with fear in legacy projects #PHPDS15 Test Driven Development (TDD) ● Cobertura total del código ● Código que sólo cubre las necesidades de los tests ● Código refactorizado ● Diseño fácilmente cambiable y testeable 29
  28. 28. Dealing with fear in legacy projects #PHPDS15 Test Driven Development by Example Kent Beck http://goo.gl/GozEAx 30
  29. 29. Dealing with fear in legacy projects #PHPDS15 FizzBuzz Bowling Game Katas de TDD 31
  30. 30. Dealing with fear in legacy projects #PHPDS15 Clean code Robert C. Martin http://goo.gl/xKy9uc 32
  31. 31. Dealing with fear in legacy projects #PHPDS15 Clean Code ● Nombres significativos ● Funciones y clases cortas ● Control de errores ● Principios SOLID ● Comentarios 33
  32. 32. Dealing with fear in legacy projects #PHPDS15 Comentarios A user interface is like a joke. If you have to explain it, it's not that good @StartupVitamins 34
  33. 33. Dealing with fear in legacy projects #PHPDS15 35 Code is like a joke. If you have to “comment” it, it’s not that good @patxi1980 Comentarios
  34. 34. #PHPDS15 Dealing with fear in legacy projects Herramientas para mejorar la generación de código 36
  35. 35. Dealing with fear in legacy projects #PHPDS15 Coding Standard (PSR-*) PHP-CS-Fixer PHP_CodeSniffer 37 La objetivo de los “coding standard” es la de reducir la dificultad cuando se lee código de diferentes autores.
  36. 36. Dealing with fear in legacy projects #PHPDS15 PHP Mess Detector ● Clean Code ● Code size ● Controversial ● Naming ● Unused Code 38
  37. 37. Dealing with fear in legacy projects #PHPDS15 PHP-Git-Hooks ● php-cs-fixer ● phpunit ● phplint ● phpcs ● phpmd 39 https://github.com/bruli/php-git-hooks
  38. 38. Dealing with fear in legacy projects #PHPDS15 PHP Metrics ● Índice de mantenibilidad ● Complejidad ciclomática ● Métrica de Halstead ● Falta de cohesión ● Inestabilidad ● ... 40
  39. 39. Dealing with fear in legacy projects #PHPDS15 Conocer y usa bien tu IDE (PHPStorm) Refactor ● Extraer métodos ● Cambiar firma ● Renombrar variables / funciones ● ... Analizar código ● Code smell ● Code sniffer ● Mess detector ● PHPDoc ● ... 41
  40. 40. #PHPDS15 Dealing with fear in legacy projects ¿Preguntas? 42

×