mobile menu icon
Cambiando Legacy

En este curso aprenderemos como cambiar y mejorar código legacy de una manera segura y efectiva.

Aprenderemos diferentes técnicas para introducir tests en código legacy, y cómo mejorar su diseño de forma gradual y sostenible.

El curso combinará sesiones de teoría y discusiones en los que se presentarán diferentes conceptos, técnicas, patrones y estrategias, con sesiones prácticas en forma de kata en las que aplicaremos las técnicas más importantes.

teaching logo Información

20 horas
Presencial o remoto
590€ / persona
(I.V.A no incluido)
Bonificable por FUNDAE
¡Me interesa!
// Contenidos
1. ¿Qué es el código legado?
1.1. Definiciones.
1.2. Valor en el código legado.
1.3. El código legado como problema de negocio.
1.4. El coste humano del código legado.
1.5. El código legado puede ser beneficioso para nuestra carrera.
2. Priorización de deuda técnica.
2.1. Deuda técnica.
--- 2.1.1. Metáfora original, definición inclusiva y clasificaciones.
--- 2.1.2. Costes: principal, interés recurrente e interés acumulado.
--- 2.1.3. Línea de vida de la deuda técnica.
2.2. Priorización.
--- 2.2.1. Inspección contínua.
--- 2.2.2. Contingencia de la deuda técnica.
--- 2.2.3. Análisis de comportamiento de código.
--- 2.2.4. Análisis de Hotspots.
--- 2.2.5. Product Hurricane Maps.
--- 2.2.6. Análisis de Change Coupling y dependencias implícitas.
--- 2.2.7. Análisis de Sum of Coupling (SoC).
--- 2.2.8. Combinando análisis: Hotspots, Change Coupling y SoC.
3. Evolucionando código legado: técnicas.
--- 3.1. Metáfora original, definición inclusiva y clasificaciones.
--- 3.1.1. Valor en el código legado: comportamiento.
--- 3.1.2. Tipos de cambios.
--- 3.1.3. Protegiendo el comportamiento.
--- 3.1.4. Cubrir y Modificar.
--- 3.1.5. Problemas de testeabilidad <=> Mal diseño.
4. Introducir tests en código no testeable.
4.1. Dependencias problemáticas.
4.2. Técnicas de rotura de dependencias.
--- 4.2.1. Razones.
--- 4.2.2. Modelo de costuras.
--- 4.2.3. Costuras de objetos.
--- 4.2.4. Técnicas básicas.
--- 4.2.5. Técnicas para dependencias estáticas y Singletons.
--- 4.2.6. Atajos.
5. Estrategias de testing en código legado.
5.1. Tipos de tests.
5.2. Ventajas y desventajas de cada tipo de test.
5.3. Distribución de tests: objetivos, trade offs y alternativas.
5.4. ¿Pirámide de testing en código legado?
5.5. Estrategia propuesta.
6. Tests de caracterización.
6.1. Caracterizando código legado.
6.2. Structural Testing.
--- 6.2.1. Uso de herramientas de cobertura.
--- 6.2.2. Heurísticas y criterios para seleccionar inputs relevantes.
--- 6.2.3. Criterios de cobertura.
--- 6.2.4. Análisis de valores de frontera.
6.3. Mutation Testing: concepto, herramientas y uso práctico.
7. Encontrando puntos de testeo.
7.1. Análisis de la propagación de los efectos de un cambio.
7.2. Puntos desde los que testear.
--- 7.2.1. Interception points.
--- 7.2.2. Pinch points.
7.3. Distancia desde la que testear y scope de los tests.
8. Otras maneras de caracterizar código legado.
8.1. Golden Master + Sampling.
8.2. Approval Testing.
--- 8.2.1. Combinatorics & Approval Testing.
9. Relación entre falta de cohesión y dificultad de testeo.
9.1. Análisis de diferentes casos.
--- 9.1.1. Código cohesivo.
--- 9.1.2. Falta de cohesión por divergent change (hotspots).
--- 9.1.3. Falta de cohesión por shotgun surgery (change coupling).
10. Haciendo cambios: TDD en código legado.
11. Haciendo cambios: Atajos cuando no hay tiempo de cubrir y modificar.
11.1. Sprouting.
11.2. Wrapping.
12. Reescrituras incrementales.
12.1. ¿Por qué reescrituras incrementales?.
12.2. Branch By Abstraction.
12.3. Strangler Fig Application.
12.4. Testeando reescrituras en producción con experimentos.
13. Refactorizando código legado.
13.1. Flujos de refactoring.
13.2. Objetivos y estrategias.
13.3. Estrategias de refactoring según subdominios de DDD.
13.4. Refactorings que mejoran la testeabilidad y productividad.
--- 13.4.1. Separar infraestructura de lógica de negocio.
--- 13.4.2. Mejora de la cohesión.
14. Introduciendo DDD en código legado.
14.1. Motivación.
14.2. Patrones útiles.
--- 14.2.1. Contexto Burbuja.
--- 14.2.2. Burbuja Autónoma.
--- 14.2.3. Exponiendo activos del legado como servicios.
15. Técnicas de refactoring para hotspots.
15.1. ¿Cómo se forma un hotspot?.
15.2. Heurísticas para identificar responsabilidades.
15.3. ¿Cómo dividir una hotspot en clases más cohesivas?.
--- 15.3.1. Aproximación en Working Effectively with legacy Code.
--- 15.3.2. Splinter Pattern.
--- 15.3.3. Aproximación en Object-Oriented Reengineering Patterns.
16. Orientación a objetos para mejorar código legado.
16.1. Aplicando patrones de diseño para simplificar código legado.
--- 16.1.1. Cross-cutting concerns.
--- 16.1.2. Separar tarea principal de tareas secundarias asociadas.
--- 16.1.3. Reglas de negocio bizantinas.
--- 16.1.4. Código condicional.
--- 16.1.5. Sucedáneos procedurales del polimorfismo.
--- 16.1.6. Interfaces adecuadas para código legado estable.
16.2. Code smells que perjudican o inhiben la orientación a objetos.
17. Técnicas de refactoring para costuras basadas en herencia.
17.1. Mover costura basada en herencia a delegado.
17.2. Introducir inyección de depedencias.
18. Cierre del curso: cartas de navegación.
18.1. Visión de conjunto: temas explorados y por explorar.
18.2. Cambiando perspectivas sobre el código legado.
// Lenguajes

Los ejemplos y katas están en C#, pero si te interesa otro lenguaje contacta con nosotros.

// Requisitos

Te enviaremos un email con todo lo que necesitas tener instalado para hacer este curso.

// ¿Para quién está pensado?

Fundamentalmente para programadores que trabajan en el paradigma orientado a objetos.

// In-house y en abierto

El curso se puede impartir in-house, (cerrado para la empresa que lo contrata), o en abierto. Intentamos impartir una edición en abierto cada trimestre. Suele pasar que las empresas pequeñas envían gente a nuestros cursos en abierto. Si quieres que te avisemos de las próximas ediciones en abierto, por favor rellena este formulario.

Ten en cuenta que los cursos in-house se realizan una vez nos contrate el cliente. Necesitaremos saber la fecha con más de un mes de antelación para poder cuadrar agendas.

teaching logo Información

20 horas
Presencial o remoto
590€ / persona
(I.V.A no incluido)
Bonificable por FUNDAE
¡Me interesa!
¡OK! Me interesa realizar el curso de Cambiando Legacy

Si deseas iniciar el proceso de inscripción o te ha quedado alguna duda sobre este curso, puedes escribirnos a contact@codesai.com o rellenar el formulario de contacto.

¡Intentaremos responderte con la mayor brevedad posible!

Enviar mensaje