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.
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