Dealing with fear in legacy projects
#PHPDS15
¿Quien soy?
● Aitor Suso
● @patxi1980
● Desarrollador PHP por 10 años
● Web ...
Dealing with fear in legacy projects
#PHPDS15
De qué va la charla
Mejorar código ya existente
Generar buen código nuevo
4
Dealing with fear in legacy projects
#PHPDS15
¿A qué llamamos “legacy code”?
● Código viejo
● Código feo
● Código incompre...
Dealing with fear in legacy projects
#PHPDS15
Miedos con el legacy code
Romper el código actual
No entender lo que
hace el...
Dealing with fear in legacy projects
#PHPDS15
Soluciones a los miedos
7
Romper el código actual
No entender lo que
hace el...
#PHPDS15
Dealing with fear in legacy projects
Test automatizados
8
Dealing with fear in legacy projects
#PHPDS15
¿A qué llamamos “legacy code”?
Para mi, “legacy code” es simplemente código ...
Dealing with fear in legacy projects
#PHPDS15
Working Effectively with
Legacy Code
Michael C. Feathers
http://goo.gl/gdEUG...
Dealing with fear in legacy projects
#PHPDS15
Situación extrema para testear
11
Controlador con todo acoplado
● Lógica
● L...
Dealing with fear in legacy projects
#PHPDS15
The Legacy Code Dilemma
Cuando cambiamos el código, necesitamos tener
tests....
Dealing with fear in legacy projects
#PHPDS15
Tests funcionales al rescate
● Selenium
● Behat
● Comparación de Response
● ...
Dealing with fear in legacy projects
#PHPDS15
Situaciones complejas para testear
● variables globales y super globales
● c...
Dealing with fear in legacy projects
#PHPDS15
Empezar por los caminos menos profundos
Ir creando nuevos tests, que analize...
Dealing with fear in legacy projects
#PHPDS15
Es una carrera de fondo (I)
Cuando tienes un bug, mejor crear un test que
lo...
Dealing with fear in legacy projects
#PHPDS15
Es una carrera de fondo (II)
Es mejor tener un set pequeño y correrlo
siempr...
Dealing with fear in legacy projects
#PHPDS15
Ventajas de test unitarios
● Feedback rápido
● Errores localizados
● Explica...
Dealing with fear in legacy projects
#PHPDS15
No solo tests unitarios
Tests funcionales
● Validar procesos completos
● Mej...
#PHPDS15
Dealing with fear in legacy projects
Refactoring
20
Dealing with fear in legacy projects
#PHPDS15
¿A qué llamamos “refactoring”?
Un cambio realizado en la estructura interna ...
Dealing with fear in legacy projects
#PHPDS15
Refactoring: Improving the
Design of Existing Code
Martin Fowler
http://goo....
Dealing with fear in legacy projects
#PHPDS15
Code smells
● Código duplicado
● Métodos largos
● Clases largas
● Switchs
● ...
Dealing with fear in legacy projects
#PHPDS15
¿Cómo refactorizar?
Buscar el camino más profundo, refactorizar
dicho trozo ...
Dealing with fear in legacy projects
#PHPDS15
Técnicas básicas de refactor
● Extraer métodos
● Convertir números mágicos e...
Dealing with fear in legacy projects
#PHPDS15
¿Cuando terminar de refactorizar?
Extract until you drop
Robert C. Martin (U...
#PHPDS15
Dealing with fear in legacy projects
Como no generar más
“legacy code”
27
Dealing with fear in legacy projects
#PHPDS15
¿A qué llamamos “legacy code”?
El código es “legacy code” tan pronto como es...
Dealing with fear in legacy projects
#PHPDS15
Test Driven Development (TDD)
● Cobertura total del código
● Código que sólo...
Dealing with fear in legacy projects
#PHPDS15
Test Driven Development by
Example
Kent Beck
http://goo.gl/GozEAx
30
Dealing with fear in legacy projects
#PHPDS15
FizzBuzz
Bowling Game
Katas de TDD
31
Dealing with fear in legacy projects
#PHPDS15
Clean code
Robert C. Martin
http://goo.gl/xKy9uc
32
Dealing with fear in legacy projects
#PHPDS15
Clean Code
● Nombres significativos
● Funciones y clases cortas
● Control de...
Dealing with fear in legacy projects
#PHPDS15
Comentarios
A user interface is like a joke.
If you have to explain it, it's...
Dealing with fear in legacy projects
#PHPDS15 35
Code is like a joke.
If you have to “comment” it, it’s not that good
@pat...
#PHPDS15
Dealing with fear in legacy projects
Herramientas para
mejorar la generación de
código
36
Dealing with fear in legacy projects
#PHPDS15
Coding Standard (PSR-*)
PHP-CS-Fixer
PHP_CodeSniffer
37
La objetivo de los “...
Dealing with fear in legacy projects
#PHPDS15
PHP Mess Detector
● Clean Code
● Code size
● Controversial
● Naming
● Unused...
Dealing with fear in legacy projects
#PHPDS15
PHP-Git-Hooks
● php-cs-fixer
● phpunit
● phplint
● phpcs
● phpmd
39
https://...
Dealing with fear in legacy projects
#PHPDS15
PHP Metrics
● Índice de mantenibilidad
● Complejidad ciclomática
● Métrica d...
Dealing with fear in legacy projects
#PHPDS15
Conocer y usa bien tu IDE (PHPStorm)
Refactor
● Extraer métodos
● Cambiar fi...
#PHPDS15
Dealing with fear in legacy projects
¿Preguntas?
42
Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15
Próxima SlideShare
Cargando en…5
×

Dealing with fear in legacy projects #PHPDS15

992 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
992
En SlideShare
0
De insertados
0
Número de insertados
331
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

×