Desarrollo sobre legacy code
Aprende a trabajar sobre un proyecto de Legacy Code sin miedo a romper todo el sistema.
Software developers* o tech leads que mantengan un proyecto legacy, y que quieran:
- reducir el coste de mantenimiento
- reducir el riesgo de introducir bugs
- dormir más tranquilos por las noches
*Para los ejemplos del curso, se usan IDEs de Jetbrains (IntelliJ IDEA, Rider, etc.) y el lenguaje de programación C#, aunque los conceptos aplican a cualquier lenguaje orientado a objetos (Java, Kotlin, PHP, etc.)
Cuando completes este curso, serás capaz de:
Enfrentarte a una base de código heredado desconocida.
Técnicas de refactorización: cómo cambiar el código de forma segura sin afectar a su comportamiento actual.
Técnicas de eliminación de dependencias: cómo separar módulos que están tan unidos que no se pueden testear.
Realizar análisis de deuda técnica y riesgos de un proyecto legacy.
Identificar code smells: síntomas indicativos de problemas de mantenibilidad en el código.
Construir una red de seguridad para cambiar el código basada en tests automáticos.
Añadir nueva funcionalidad o corregir errores sobre legacy code usando TDD.
Aplicar con éxito estas técnicas a tu propio proyecto, independientemente del lenguaje en el que esté escrito.
Pedro Pardal
Antes de comenzar...
La fábula del escritor de código legacy
Por qué los proyectos greenfield se convierten en legacy
VISTA PREVIA GRATUITALa teoría de las ventanas rotas
Los 10 minutos de refactoring diarios
¿Qué es código legacy en definitva? Las 4 reglas de diseño simple
El algoritmo de cambio de código legacy y próximos pasos
Bibliografía y recursos
Introducción: enfrentándonos a código desconocido
Tips para navegar una base de código desconocida
La técnica de Scratch Refactoring
Refactorizar para mejorar la legibilidad: la regla del 80/20
Kata: Ugly trivia, free fall (tarea)
La fase de desacoplar dependencias del algoritmo de cambiar código legacy
Inyección de dependencias: por qué es necesaria para escribir código testeable
Cómo cambiar código sin tests
VISTA PREVIA GRATUITATipos de escenarios de dependencias no testeables
Práctica: testeando una interacción con una dependencia con un mock
Práctica: testear una interacción con una clase concreta sin interfaz
Práctica: testear una dependencia que se instancia dentro de nuestra clase
Práctica: Caso excepcional 1: Cómo gestionar cambios de firma en métodos públicos de un paquete
Práctica: Caso excepcional 2 como gestionar cambios en el constructor cuando nuestra clase la instancia el inyector de dependencias
Práctica: testear una interacción con un Singleton
Práctica: testear una llamada a un método estático (opción 1)
Práctica: testear una llamada a un método estático (opción 2)
Ejercicio de práctica deliberada para romper dependencias
Legacy Code Koans (tarea)
¿Qué es un test de caracterización?
VISTA PREVIA GRATUITAAlgoritmo para implementar un test de caracterización
Kata: Trip Service
Kata: Trip Service (tarea)
La técnica del Golden Master
Algoritmo del Golden Master
Aplicabilidad del Golden Master
Ejemplos de entrada y salida capturables
Fuentes de indeterminismo
Kata: Ugly Trivial con Golden Master
Kata: Ugly Trivia con Golden Master (tarea)
Cambiar codigo legacy
Arreglar bugs con TDD
VISTA PREVIA GRATUITAAñadir features a código legacy con TDD
Las técnicas Sprout y Wrap
Kata: Duplicate Files
Esqueletizar monster methods
Romper God Classes con el Splinter Pattern
Heurísticas para identificar múltiples responsabilidades en una God Class
Principios SOLID aplicados a refactorizar legacy code
Casos comunes de God Classes y cómo abordarlos
Mantener la retrocompatibilidad con Parallel Change
Por qué un big rewrite suele ser una mala idea y cómo evitarlo
Fasear una gran migración con el Strangle Fig Pattern
El método Mikado para afrontar tareas grandes con alta incertidumbre
Motivación del behavioural analysis
Deuda técnica
VISTA PREVIA GRATUITALegacy hotspots
Medir el ratio de interés y la complejidad de un fichero
Cómo identificar hotspots con Git desde línea de comandos
Como identificar hotspots usando la tool Code Forensics
Análisis de hotspots de un proyecto usando Code Forensics (tarea)
Las tres generaciones de código
Kata: Mejoras en la estructura del proyecto
Bibliografía y recursos
Antes de que te vayas...