SlideShare una empresa de Scribd logo
1 de 42
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

Más contenido relacionado

La actualidad más candente

ATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónPaulo Clavijo
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development TechniquesEduardo Turiño
 
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
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 CompostelaCarlos Ble
 
Introducción a TDD
Introducción a TDDIntroducción a TDD
Introducción a TDDFran Grau
 
Malas prácticas de código
Malas prácticas de códigoMalas prácticas de código
Malas prácticas de códigoMatias Iacono
 
Introducción a automatización de pruebas web
Introducción a automatización de pruebas webIntroducción a automatización de pruebas web
Introducción a automatización de pruebas webFrancisco Moreno Sanz
 
Uso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomlaUso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomlaRoberto Segura
 
Plugin para-joomla-45-minutos
Plugin para-joomla-45-minutosPlugin para-joomla-45-minutos
Plugin para-joomla-45-minutosRoberto Segura
 
Joomla como plataforma de eCommerce - Joomla Day La Rioja 2016
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 2016Pablo Arias
 

La actualidad más candente (19)

Cobertura de pruebas unitarias - NetBaires
Cobertura de pruebas unitarias - NetBairesCobertura de pruebas unitarias - NetBaires
Cobertura de pruebas unitarias - NetBaires
 
ATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de Aceptación
 
[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques[ES] webcat 2014-03 Demystifying Development Techniques
[ES] webcat 2014-03 Demystifying Development Techniques
 
BDD y tests automatizados
BDD y tests automatizadosBDD y tests automatizados
BDD y tests automatizados
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
Tdd desde las trincheras
Tdd desde las trincherasTdd desde las trincheras
Tdd desde las trincheras
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Workshop: Testeando nuestra aplicaciones.
Workshop: Testeando nuestra aplicaciones.Workshop: Testeando nuestra aplicaciones.
Workshop: Testeando nuestra aplicaciones.
 
Introduccion a TDD y XP en la Universidad de Santiago de Compostela
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
 
Introducción a TDD
Introducción a TDDIntroducción a TDD
Introducción a TDD
 
Malas prácticas de código
Malas prácticas de códigoMalas prácticas de código
Malas prácticas de código
 
Unit Test y TDD
Unit Test y TDDUnit Test y TDD
Unit Test y TDD
 
Introducción a automatización de pruebas web
Introducción a automatización de pruebas webIntroducción a automatización de pruebas web
Introducción a automatización de pruebas web
 
Uso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomlaUso de tecnologías modernas en joomla
Uso de tecnologías modernas en joomla
 
Maven (EN ESPANOL)
Maven (EN ESPANOL)Maven (EN ESPANOL)
Maven (EN ESPANOL)
 
Tdd on the rocks
Tdd on the rocks Tdd on the rocks
Tdd on the rocks
 
El coste de no usar integración continua
El coste de no usar integración continuaEl coste de no usar integración continua
El coste de no usar integración continua
 
Plugin para-joomla-45-minutos
Plugin para-joomla-45-minutosPlugin para-joomla-45-minutos
Plugin para-joomla-45-minutos
 
Joomla como plataforma de eCommerce - Joomla Day La Rioja 2016
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
 

Destacado

Steganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHPSteganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHPRaul Fraile
 
Detrás del Backend [phpDay 2015]
Detrás del Backend [phpDay 2015]Detrás del Backend [phpDay 2015]
Detrás del Backend [phpDay 2015]Felix Carmona
 
What RabbitMQ can do for you (phpnw14 Uncon)
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
 
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra
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à
 
Gearman and asynchronous processing in PHP applications
Gearman and asynchronous processing in PHP applicationsGearman and asynchronous processing in PHP applications
Gearman and asynchronous processing in PHP applicationsDinh Pham
 
PHPBarcelona Conference - Optimización aplicaciones PHP - Client side
PHPBarcelona Conference - Optimización aplicaciones PHP - Client sidePHPBarcelona Conference - Optimización aplicaciones PHP - Client side
PHPBarcelona Conference - Optimización aplicaciones PHP - Client sidemaguilar
 
Ecosistema de desarrollo en PHP con Docker y Ansible
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 AnsibleVicent Soria Durá
 
From Legacy to DDD in PHP | Tech Talks | Privalia
From Legacy to DDD in PHP | Tech Talks | PrivaliaFrom Legacy to DDD in PHP | Tech Talks | Privalia
From Legacy to DDD in PHP | Tech Talks | PrivaliaJordi Vila Gallardo
 
Models and Service Layers, Hemoglobin and Hobgoblins
Models and Service Layers, Hemoglobin and HobgoblinsModels and Service Layers, Hemoglobin and Hobgoblins
Models and Service Layers, Hemoglobin and HobgoblinsRoss Tuck
 
Implementing DDD Concepts in PHP
Implementing DDD Concepts in PHPImplementing DDD Concepts in PHP
Implementing DDD Concepts in PHPSteve Rhoades
 
How to Become a Thought Leader in Your Niche
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 NicheLeslie Samuel
 

Destacado (13)

Steganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHPSteganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHP
 
Detrás del Backend [phpDay 2015]
Detrás del Backend [phpDay 2015]Detrás del Backend [phpDay 2015]
Detrás del Backend [phpDay 2015]
 
What RabbitMQ can do for you (phpnw14 Uncon)
What RabbitMQ can do for you (phpnw14 Uncon)What RabbitMQ can do for you (phpnw14 Uncon)
What RabbitMQ can do for you (phpnw14 Uncon)
 
PHP Barcelona Monthly Talk Feb 2015
PHP Barcelona Monthly Talk Feb 2015PHP Barcelona Monthly Talk Feb 2015
PHP Barcelona Monthly Talk Feb 2015
 
Joomla!day2013 Albacete Spain, Responsive, Adaptive y la tundra
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
 
Gearman and asynchronous processing in PHP applications
Gearman and asynchronous processing in PHP applicationsGearman and asynchronous processing in PHP applications
Gearman and asynchronous processing in PHP applications
 
PHPBarcelona Conference - Optimización aplicaciones PHP - Client side
PHPBarcelona Conference - Optimización aplicaciones PHP - Client sidePHPBarcelona Conference - Optimización aplicaciones PHP - Client side
PHPBarcelona Conference - Optimización aplicaciones PHP - Client side
 
Ecosistema de desarrollo en PHP con Docker y Ansible
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
 
From Legacy to DDD in PHP | Tech Talks | Privalia
From Legacy to DDD in PHP | Tech Talks | PrivaliaFrom Legacy to DDD in PHP | Tech Talks | Privalia
From Legacy to DDD in PHP | Tech Talks | Privalia
 
RabbitMQ y Symfony
RabbitMQ y SymfonyRabbitMQ y Symfony
RabbitMQ y Symfony
 
Models and Service Layers, Hemoglobin and Hobgoblins
Models and Service Layers, Hemoglobin and HobgoblinsModels and Service Layers, Hemoglobin and Hobgoblins
Models and Service Layers, Hemoglobin and Hobgoblins
 
Implementing DDD Concepts in PHP
Implementing DDD Concepts in PHPImplementing DDD Concepts in PHP
Implementing DDD Concepts in PHP
 
How to Become a Thought Leader in Your Niche
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
 

Similar a DealingFearLegacyProjects

Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoFinizens
 
Improving as a developer through code reviews
Improving as a developer through code reviewsImproving as a developer through code reviews
Improving as a developer through code reviewsAnallely Olivares
 
Introducción al desarrollo guiado por pruebas
Introducción al desarrollo guiado por pruebasIntroducción al desarrollo guiado por pruebas
Introducción al desarrollo guiado por pruebasAlejandro Hernández
 
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 
Integración continua y despliegue automático en Azure Plain Concepts
 
#PhpirstAid - Replanteamiento de diseño de software
#PhpirstAid - Replanteamiento de diseño de software#PhpirstAid - Replanteamiento de diseño de software
#PhpirstAid - Replanteamiento de diseño de softwareJavier Ferrer González
 
Modelos De Calidad para proyectos de Software Y Software Libre
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 LibreEQ SOFT EIRL
 
Ejecutando proyectos de innovación tecnológica de software en intel
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 intelHospital Español
 
Joseluisseijoreig samuelsánchezmuñoz
Joseluisseijoreig samuelsánchezmuñozJoseluisseijoreig samuelsánchezmuñoz
Joseluisseijoreig samuelsánchezmuñozjoseluisseijo
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
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 SEOnacho mascort
 
.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 Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas.. ..
 

Similar a DealingFearLegacyProjects (20)

Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológico
 
Frontend Developer
Frontend DeveloperFrontend Developer
Frontend Developer
 
Cream code & front performance
Cream code & front performanceCream code & front performance
Cream code & front performance
 
Improving as a developer through code reviews
Improving as a developer through code reviewsImproving as a developer through code reviews
Improving as a developer through code reviews
 
Introducción al desarrollo guiado por pruebas
Introducción al desarrollo guiado por pruebasIntroducción al desarrollo guiado por pruebas
Introducción al desarrollo guiado por pruebas
 
Testing, tipos y otros flamewars
Testing, tipos y otros flamewarsTesting, tipos y otros flamewars
Testing, tipos y otros flamewars
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 
Unit Testing en iOS
Unit Testing en iOSUnit Testing en iOS
Unit Testing en iOS
 
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 
Integración continua y despliegue automático en Azure 
 
Working with a design system
Working with a design systemWorking with a design system
Working with a design system
 
#PhpirstAid - Replanteamiento de diseño de software
#PhpirstAid - Replanteamiento de diseño de software#PhpirstAid - Replanteamiento de diseño de software
#PhpirstAid - Replanteamiento de diseño de software
 
Modelos De Calidad para proyectos de Software Y Software Libre
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
 
Ejecutando proyectos de innovación tecnológica de software en intel
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
 
Diseño emergente
Diseño emergenteDiseño emergente
Diseño emergente
 
Creando rascacielos con tdd
Creando rascacielos con tddCreando rascacielos con tdd
Creando rascacielos con tdd
 
Joseluisseijoreig samuelsánchezmuñoz
Joseluisseijoreig samuelsánchezmuñozJoseluisseijoreig samuelsánchezmuñoz
Joseluisseijoreig samuelsánchezmuñoz
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
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
 
.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 Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas
 

Último

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 

Último (16)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 

DealingFearLegacyProjects

  • 1.
  • 2.
  • 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