Dealing with fear in legacy projects #PHPDS15

Aitor Suso Gáceta
Aitor Suso GácetaBackend Engineer en Suntransfers.com
Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects
#PHPDS15
¿Quien soy?
● Aitor Suso
● @patxi1980
● Desarrollador PHP por 10 años
● Web developer en Atrápalo
3
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 incomprensible
● Código espagueti
● Galimatías absurdo
5
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
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
#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 sin
tests.
Michael Feathers
9
Dealing with fear in legacy projects
#PHPDS15
Working Effectively with
Legacy Code
Michael C. Feathers
http://goo.gl/gdEUGR
10
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
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
Dealing with fear in legacy projects
#PHPDS15
Tests funcionales al rescate
● Selenium
● Behat
● Comparación de Response
● Salida de texto
● ...
13
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
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
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
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
Dealing with fear in legacy projects
#PHPDS15
Ventajas de test unitarios
● Feedback rápido
● Errores localizados
● Explican el funcionamiento de la “unidad”
18
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
#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 de
software para que sea más fácil de entender y más
barato de modificar sin cambiar su
comportamiento.
Martin Fowler
21
Dealing with fear in legacy projects
#PHPDS15
Refactoring: Improving the
Design of Existing Code
Martin Fowler
http://goo.gl/gUUIgw
22
Dealing with fear in legacy projects
#PHPDS15
Code smells
● Código duplicado
● Métodos largos
● Clases largas
● Switchs
● Código muerto
● ….
23
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
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
Dealing with fear in legacy projects
#PHPDS15
¿Cuando terminar de refactorizar?
Extract until you drop
Robert C. Martin (Uncle Bob)
26
#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 esta
escrito.
28
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
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 errores
● Principios SOLID
● Comentarios
33
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
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
#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 “coding standard” es la de
reducir la dificultad cuando se lee código de
diferentes autores.
Dealing with fear in legacy projects
#PHPDS15
PHP Mess Detector
● Clean Code
● Code size
● Controversial
● Naming
● Unused Code
38
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
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
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
#PHPDS15
Dealing with fear in legacy projects
¿Preguntas?
42
1 de 42

Recomendados

Cómo hacer Test Driven Development por
Cómo hacer Test Driven DevelopmentCómo hacer Test Driven Development
Cómo hacer Test Driven DevelopmentJavier Novoa Cataño
1.4K vistas22 diapositivas
Introducción a tdd por
Introducción a tddIntroducción a tdd
Introducción a tddRonny Ancorini Rodríguez
521 vistas18 diapositivas
TDD talk por
TDD talkTDD talk
TDD talkAlberto González Lizán
263 vistas42 diapositivas
Introducción a Unit Testing y TDD por
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDDFernando Perez
1.5K vistas91 diapositivas
TDD y Python por
TDD y PythonTDD y Python
TDD y PythonJavier_J
2.1K vistas33 diapositivas
Seminario SOLID-TDD por
Seminario SOLID-TDDSeminario SOLID-TDD
Seminario SOLID-TDDGabriel Falcone
533 vistas71 diapositivas

Más contenido relacionado

La actualidad más candente

Cobertura de pruebas unitarias - NetBaires por
Cobertura de pruebas unitarias - NetBairesCobertura de pruebas unitarias - NetBaires
Cobertura de pruebas unitarias - NetBairesMiguel Angel Teheran Garcia
138 vistas33 diapositivas
ATDD - Desarrollo Dirigido por Test de Aceptación por
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónPaulo Clavijo
7.5K vistas21 diapositivas
[ES] webcat 2014-03 Demystifying Development Techniques por
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development TechniquesEduardo Turiño
512 vistas56 diapositivas
BDD y tests automatizados por
BDD y tests automatizadosBDD y tests automatizados
BDD y tests automatizadosSofia Swidarowicz
1.1K vistas69 diapositivas
Pucela testingdays testing_en_php por
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_phpIsidro Merayo Castellano
1.6K vistas55 diapositivas
Tdd desde las trincheras por
Tdd desde las trincherasTdd desde las trincheras
Tdd desde las trincherasLeonardo Micheloni
293 vistas20 diapositivas

La actualidad más candente(19)

ATDD - Desarrollo Dirigido por Test de Aceptación por Paulo Clavijo
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de Aceptación
Paulo Clavijo7.5K vistas
[ES] webcat 2014-03 Demystifying Development Techniques por Eduardo Turiño
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques
Eduardo Turiño512 vistas
Introduccion a TDD y XP en la Universidad de Santiago de Compostela por Carlos Ble
Introduccion a TDD y XP en la Universidad de Santiago de CompostelaIntroduccion a TDD y XP en la Universidad de Santiago de Compostela
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
Carlos Ble2K vistas
Introducción a TDD por Fran Grau
Introducción a TDDIntroducción a TDD
Introducción a TDD
Fran Grau470 vistas
Malas prácticas de código por Matias Iacono
Malas prácticas de códigoMalas prácticas de código
Malas prácticas de código
Matias Iacono581 vistas
Uso de tecnologías modernas en joomla por Roberto Segura
Uso de tecnologías modernas en joomlaUso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomla
Roberto Segura1.1K vistas
Plugin para-joomla-45-minutos por Roberto Segura
Plugin para-joomla-45-minutosPlugin para-joomla-45-minutos
Plugin para-joomla-45-minutos
Roberto Segura455 vistas
Joomla como plataforma de eCommerce - Joomla Day La Rioja 2016 por Pablo Arias
Joomla como plataforma de eCommerce - Joomla Day La Rioja 2016Joomla como plataforma de eCommerce - Joomla Day La Rioja 2016
Joomla como plataforma de eCommerce - Joomla Day La Rioja 2016
Pablo Arias1.7K vistas

Destacado

Steganography: Hiding your secrets with PHP por
Steganography: Hiding your secrets with PHPSteganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHPRaul Fraile
13.7K vistas76 diapositivas
Detrás del Backend [phpDay 2015] por
Detrás del Backend [phpDay 2015]Detrás del Backend [phpDay 2015]
Detrás del Backend [phpDay 2015]Felix Carmona
1.9K vistas60 diapositivas
What RabbitMQ can do for you (phpnw14 Uncon) por
What RabbitMQ can do for you (phpnw14 Uncon)What RabbitMQ can do for you (phpnw14 Uncon)
What RabbitMQ can do for you (phpnw14 Uncon)James Titcumb
1.5K vistas42 diapositivas
PHP Barcelona Monthly Talk Feb 2015 por
PHP Barcelona Monthly Talk Feb 2015PHP Barcelona Monthly Talk Feb 2015
PHP Barcelona Monthly Talk Feb 2015Sergi González Pérez
2.3K vistas79 diapositivas
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra por
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundraJoomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundraJordi Catà
1.8K vistas40 diapositivas
Gearman and asynchronous processing in PHP applications por
Gearman and asynchronous processing in PHP applicationsGearman and asynchronous processing in PHP applications
Gearman and asynchronous processing in PHP applicationsDinh Pham
2.1K vistas22 diapositivas

Destacado(13)

Steganography: Hiding your secrets with PHP por Raul Fraile
Steganography: Hiding your secrets with PHPSteganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHP
Raul Fraile13.7K vistas
Detrás del Backend [phpDay 2015] por Felix Carmona
Detrás del Backend [phpDay 2015]Detrás del Backend [phpDay 2015]
Detrás del Backend [phpDay 2015]
Felix Carmona1.9K vistas
What RabbitMQ can do for you (phpnw14 Uncon) por James Titcumb
What RabbitMQ can do for you (phpnw14 Uncon)What RabbitMQ can do for you (phpnw14 Uncon)
What RabbitMQ can do for you (phpnw14 Uncon)
James Titcumb1.5K vistas
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra por Jordi Catà
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundraJoomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra
Jordi Catà1.8K vistas
Gearman and asynchronous processing in PHP applications por Dinh Pham
Gearman and asynchronous processing in PHP applicationsGearman and asynchronous processing in PHP applications
Gearman and asynchronous processing in PHP applications
Dinh Pham2.1K vistas
PHPBarcelona Conference - Optimización aplicaciones PHP - Client side por maguilar
PHPBarcelona Conference - Optimización aplicaciones PHP - Client sidePHPBarcelona Conference - Optimización aplicaciones PHP - Client side
PHPBarcelona Conference - Optimización aplicaciones PHP - Client side
maguilar2.1K vistas
Ecosistema de desarrollo en PHP con Docker y Ansible por Vicent Soria Durá
Ecosistema de desarrollo en PHP con Docker y AnsibleEcosistema de desarrollo en PHP con Docker y Ansible
Ecosistema de desarrollo en PHP con Docker y Ansible
Vicent Soria Durá2.8K vistas
Models and Service Layers, Hemoglobin and Hobgoblins por Ross Tuck
Models and Service Layers, Hemoglobin and HobgoblinsModels and Service Layers, Hemoglobin and Hobgoblins
Models and Service Layers, Hemoglobin and Hobgoblins
Ross Tuck48.3K vistas
Implementing DDD Concepts in PHP por Steve Rhoades
Implementing DDD Concepts in PHPImplementing DDD Concepts in PHP
Implementing DDD Concepts in PHP
Steve Rhoades46.2K vistas
How to Become a Thought Leader in Your Niche por Leslie Samuel
How to Become a Thought Leader in Your NicheHow to Become a Thought Leader in Your Niche
How to Become a Thought Leader in Your Niche
Leslie Samuel1.6M vistas

Similar a Dealing with fear in legacy projects #PHPDS15

Apuntes #XPweek por
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
442 vistas17 diapositivas
Los reinos de finizens - Nuestro stark tecnológico por
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoFinizens
620 vistas54 diapositivas
Frontend Developer por
Frontend DeveloperFrontend Developer
Frontend Developer★ Ander Conal Fuertes
194 vistas40 diapositivas
Cream code & front performance por
Cream code & front performanceCream code & front performance
Cream code & front performanceAna Isabel Encinar Sáez
195 vistas32 diapositivas
Improving as a developer through code reviews por
Improving as a developer through code reviewsImproving as a developer through code reviews
Improving as a developer through code reviewsAnallely Olivares
90 vistas60 diapositivas
Introducción al desarrollo guiado por pruebas por
Introducción al desarrollo guiado por pruebasIntroducción al desarrollo guiado por pruebas
Introducción al desarrollo guiado por pruebasAlejandro Hernández
289 vistas42 diapositivas

Similar a Dealing with fear in legacy projects #PHPDS15(20)

Apuntes #XPweek por Carlos Ble
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
Carlos Ble442 vistas
Los reinos de finizens - Nuestro stark tecnológico por Finizens
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológico
Finizens620 vistas
Improving as a developer through code reviews por Anallely Olivares
Improving as a developer through code reviewsImproving as a developer through code reviews
Improving as a developer through code reviews
Anallely Olivares90 vistas
Integración continua y despliegue automático en Azure  por Plain Concepts
Integración continua y despliegue automático en Azure Integración continua y despliegue automático en Azure 
Integración continua y despliegue automático en Azure 
Plain Concepts706 vistas
Modelos De Calidad para proyectos de Software Y Software Libre por EQ SOFT EIRL
Modelos De Calidad para proyectos de Software Y Software LibreModelos De Calidad para proyectos de Software Y Software Libre
Modelos De Calidad para proyectos de Software Y Software Libre
EQ SOFT EIRL3K vistas
Ejecutando proyectos de innovación tecnológica de software en intel por Hospital Español
Ejecutando proyectos de innovación tecnológica de software en intelEjecutando proyectos de innovación tecnológica de software en intel
Ejecutando proyectos de innovación tecnológica de software en intel
Hospital Español334 vistas
Joseluisseijoreig samuelsánchezmuñoz por joseluisseijo
Joseluisseijoreig samuelsánchezmuñozJoseluisseijoreig samuelsánchezmuñoz
Joseluisseijoreig samuelsánchezmuñoz
joseluisseijo184 vistas
Conceptos básicos y aplicaciones prácticas de programación para SEO por nacho mascort
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEO
nacho mascort3.6K vistas
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez por .NET UY Meetup
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup777 vistas
Desarrollo de Software Guiado por Pruebas por .. ..
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas
.. ..3K vistas

Último

Dominios de internet.pdf por
Dominios de internet.pdfDominios de internet.pdf
Dominios de internet.pdfNahomiBanchen
10 vistas2 diapositivas
Fundamentos de Electricidad y Electronica 9-3 (1).docx por
Fundamentos de Electricidad y Electronica 9-3 (1).docxFundamentos de Electricidad y Electronica 9-3 (1).docx
Fundamentos de Electricidad y Electronica 9-3 (1).docxSamuel709479
7 vistas26 diapositivas
Tarea Curso Tecnologias para la enseñanza virtual.pptx por
Tarea Curso Tecnologias para la enseñanza virtual.pptxTarea Curso Tecnologias para la enseñanza virtual.pptx
Tarea Curso Tecnologias para la enseñanza virtual.pptxlesliealejandraContr
5 vistas11 diapositivas
Tecnologías para la enseñanza virtual por
Tecnologías para la enseñanza virtual Tecnologías para la enseñanza virtual
Tecnologías para la enseñanza virtual mpachecocodem
7 vistas8 diapositivas
Fundamentos de Electricidad y Electronica 9-3 (1).docx por
Fundamentos de Electricidad y Electronica 9-3 (1).docxFundamentos de Electricidad y Electronica 9-3 (1).docx
Fundamentos de Electricidad y Electronica 9-3 (1).docxSamuel709479
5 vistas26 diapositivas
proyecto lavadora.docx por
proyecto lavadora.docxproyecto lavadora.docx
proyecto lavadora.docxpaulavallejo21
10 vistas2 diapositivas

Último(20)

Fundamentos de Electricidad y Electronica 9-3 (1).docx por Samuel709479
Fundamentos de Electricidad y Electronica 9-3 (1).docxFundamentos de Electricidad y Electronica 9-3 (1).docx
Fundamentos de Electricidad y Electronica 9-3 (1).docx
Samuel7094797 vistas
Tecnologías para la enseñanza virtual por mpachecocodem
Tecnologías para la enseñanza virtual Tecnologías para la enseñanza virtual
Tecnologías para la enseñanza virtual
mpachecocodem7 vistas
Fundamentos de Electricidad y Electronica 9-3 (1).docx por Samuel709479
Fundamentos de Electricidad y Electronica 9-3 (1).docxFundamentos de Electricidad y Electronica 9-3 (1).docx
Fundamentos de Electricidad y Electronica 9-3 (1).docx
Samuel7094795 vistas
Tecnologías para la enseñanza virtual.pptx por exprosaavedra
Tecnologías para la enseñanza virtual.pptxTecnologías para la enseñanza virtual.pptx
Tecnologías para la enseñanza virtual.pptx
exprosaavedra11 vistas
Fundamentos de electricidad y electrónica.docx por DilanTabares
Fundamentos de electricidad y electrónica.docxFundamentos de electricidad y electrónica.docx
Fundamentos de electricidad y electrónica.docx
DilanTabares5 vistas
TALLER DE ANÁLISIS DE ARTEFACTOS_.docx por DilanTabares
TALLER DE ANÁLISIS DE ARTEFACTOS_.docxTALLER DE ANÁLISIS DE ARTEFACTOS_.docx
TALLER DE ANÁLISIS DE ARTEFACTOS_.docx
DilanTabares5 vistas
Presentación: El impacto y peligro de la piratería de software por EmanuelMuoz11
Presentación: El impacto y peligro de la piratería de softwarePresentación: El impacto y peligro de la piratería de software
Presentación: El impacto y peligro de la piratería de software
EmanuelMuoz1117 vistas
Tecnologías para la enseñanza virtual_cdc.pptx por CarmenerdelHuasco
Tecnologías para la enseñanza virtual_cdc.pptxTecnologías para la enseñanza virtual_cdc.pptx
Tecnologías para la enseñanza virtual_cdc.pptx
Tarea15.pptx por illanlir
Tarea15.pptxTarea15.pptx
Tarea15.pptx
illanlir10 vistas
El Ciberespacio y sus Características.pptx por AnthlingPereira
El Ciberespacio y  sus Características.pptxEl Ciberespacio y  sus Características.pptx
El Ciberespacio y sus Características.pptx
AnthlingPereira14 vistas
MVelazco_Internet, Origenes y Evolucion.pptx por al223915
MVelazco_Internet, Origenes  y Evolucion.pptxMVelazco_Internet, Origenes  y Evolucion.pptx
MVelazco_Internet, Origenes y Evolucion.pptx
al2239155 vistas

Dealing with fear in legacy projects #PHPDS15

  • 3. Dealing with fear in legacy projects #PHPDS15 ¿Quien soy? ● Aitor Suso ● @patxi1980 ● Desarrollador PHP por 10 años ● Web developer en Atrápalo 3
  • 4. Dealing with fear in legacy projects #PHPDS15 De qué va la charla Mejorar código ya existente Generar buen código nuevo 4
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. #PHPDS15 Dealing with fear in legacy projects Test automatizados 8
  • 9. 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
  • 10. Dealing with fear in legacy projects #PHPDS15 Working Effectively with Legacy Code Michael C. Feathers http://goo.gl/gdEUGR 10
  • 11. 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
  • 12. 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
  • 13. Dealing with fear in legacy projects #PHPDS15 Tests funcionales al rescate ● Selenium ● Behat ● Comparación de Response ● Salida de texto ● ... 13
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. Dealing with fear in legacy projects #PHPDS15 Ventajas de test unitarios ● Feedback rápido ● Errores localizados ● Explican el funcionamiento de la “unidad” 18
  • 19. 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
  • 20. #PHPDS15 Dealing with fear in legacy projects Refactoring 20
  • 21. 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
  • 22. Dealing with fear in legacy projects #PHPDS15 Refactoring: Improving the Design of Existing Code Martin Fowler http://goo.gl/gUUIgw 22
  • 23. Dealing with fear in legacy projects #PHPDS15 Code smells ● Código duplicado ● Métodos largos ● Clases largas ● Switchs ● Código muerto ● …. 23
  • 24. 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
  • 25. 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
  • 26. Dealing with fear in legacy projects #PHPDS15 ¿Cuando terminar de refactorizar? Extract until you drop Robert C. Martin (Uncle Bob) 26
  • 27. #PHPDS15 Dealing with fear in legacy projects Como no generar más “legacy code” 27
  • 28. Dealing with fear in legacy projects #PHPDS15 ¿A qué llamamos “legacy code”? El código es “legacy code” tan pronto como esta escrito. 28
  • 29. 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
  • 30. Dealing with fear in legacy projects #PHPDS15 Test Driven Development by Example Kent Beck http://goo.gl/GozEAx 30
  • 31. Dealing with fear in legacy projects #PHPDS15 FizzBuzz Bowling Game Katas de TDD 31
  • 32. Dealing with fear in legacy projects #PHPDS15 Clean code Robert C. Martin http://goo.gl/xKy9uc 32
  • 33. Dealing with fear in legacy projects #PHPDS15 Clean Code ● Nombres significativos ● Funciones y clases cortas ● Control de errores ● Principios SOLID ● Comentarios 33
  • 34. 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
  • 35. 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
  • 36. #PHPDS15 Dealing with fear in legacy projects Herramientas para mejorar la generación de código 36
  • 37. 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.
  • 38. Dealing with fear in legacy projects #PHPDS15 PHP Mess Detector ● Clean Code ● Code size ● Controversial ● Naming ● Unused Code 38
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. #PHPDS15 Dealing with fear in legacy projects ¿Preguntas? 42