¿Para quién es este curso?

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

Objetivos de aprendizaje

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.

¿Cómo funciona nuestra metodología?

  • Píldoras de teoría

    Aprenderás los conceptos teóricos con videos cortos, fácilmente digeribles, que puedes ver cuantas veces quieras.

  • Katas prácticas

    Aplicarás lo aprendido con una serie de ejercicios prácticos propuestos.

  • Soporte en comunidad

    Tendrás acceso al servidor de Discord de Exeal donde podrás conversar, resolver dudas y compartir experiencias con los demás alumnos.

  • Acceso de por vida

    Tendrás acceso para siempre a todos los materiales del curso, así como a las nuevas actualizaciones del mismo.

Reviews

Meri Herrera - Software Engineer @ Voxel Group

"El training de legacy code de Exeal me dejó un montón de tips útiles que vienen muy bien para aplicar en el día a día. Además de aprender y reforzar estrategias existentes para que el código legacy sea un poco más amigable y no tan temido. ¡Lo súper recomiendo!"

Humberto Braojos - Backend engineer @ Vueling

“Hasta ahora, cambiaba el código legacy cruzando los dedos para que todo funcionara correctamente, sin ningún tipo de test. El curso con Pedro ha sido un punto de inflexión, he adquirido herramientas para que mi código sea de mucha mejor calidad, y como protegerlo con tests automáticos.”

Fermín Saez - Software Engineer @ Voxel Group

“Ahora me enfrento a los cambios en el código legacy con mucha más tranquilidad, confianza en el resultado y eficiencia. Resaltaría particularmente los ejercicios de extraer dependencias, solía ser el punto de mayor dolor al añadir cobertura de tests.”

Instructor

Technical Coach

Pedro Pardal

Software engineer y tech lead con +12 años de experiencia construyendo aplicaciones web escalables en el cloud, y liderando equipos multidisciplinares usando metodologías ágiles. Inspirado por los valores de Software Craftsmanship y prácticas de Extreme Programming y DevOps, poniendo especial énfasis en la entrega temprana de valor, comunicación transparente con el cliente y excelencia técnica.

Temario

  • 1

    ¡Te damos la bienvenida!

    • Antes de comenzar...

  • 2

    MÓDULO 1: Introducción al desarrollo sobre código legacy

  • 3

    MÓDULO 2: Ganando conocimiento

    • 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)

  • 4

    MÓDULO 3: Desacoplando dependencias

    • 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 GRATUITA
    • Tipos 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)

  • 5

    MÓDULO 4: Incrementando la cobertura

    • ¿Qué es un test de caracterización?

      VISTA PREVIA GRATUITA
    • Algoritmo 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)

  • 6

    MÓDULO 5: Realizando los cambios

  • 7

    MÓDULO 6: Heurísticas

    • 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

  • 8

    MÓDULO 7: Behavioural analysis

    • Motivación del behavioural analysis

    • Deuda técnica

      VISTA PREVIA GRATUITA
    • Legacy 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

  • 9

    Próximos pasos

    • Antes de que te vayas...

Tu código te está pidiendo auxilio

Rescátalo antes de que sea demasiado tarde. Comienza a estudiar hoy.