Test Driven Development Avanzado


Test driven development

Introducción
¿Conoces TDD, tomaste cursos, leíste libros pero no podés o no sabés como aplicarlo en tu trabajo?
¿Mantenés un sistema que está muy acoplado con la base de datos y crees que es imposible practicar TDD?
¿Tu sistema tiene muchos años y cada vez que cambias algo se rompe otra cosa?
¿Tenés que desarrollar un sistema muy complejo y no sabés cómo conviene aplicar TDD?
¡Entonces este curso es para vos!
Descripción
El objetivo de este curso es que los asistentes aprendan a utilizar TDD en contextos complejos de desarrollo y mantenimiento de software (similares a los mencionados en la sección anterior). Este curso te ayudará a realizar TDD cuando estás manteniendo un sistema legacy, altamente acoplado y te dará técnicas y herramientas que aliviarán tu proceso de re-diseño indispensable en sistemas existentes.
También se verá cómo hacer TDD cuando se utilizan frameworks que imponen un diseño particular y modelo de desarrollo generalmente no pensado para hacer TDD y que dificultan su uso. Durante este curso veremos muchas técnicas de reingeniería de software que nos permitirán aplicar TDD en contextos adversos, como refactorings, re-diseño, selección de hot-spots, etc.
Al finalizar este curso estarás capacitado para aplicar TDD para el desarrollo y mantenimiento de sistemas complejos, altamente acoplados y con diseños no pensados para ser testeados. Manejarás técnicas de refactoring y diseño avanzadas y podrás tomar buenas decisiones de diseño que favorezcan la testeabilidad de tu sistema.

Temario

  • Repaso de Fundamentos de TDD

  • Repaso de conceptos de buen diseño (Cohesión y Acoplamiento)

  • Problemas de Sistemas existentes (Entropía en el diseño)

  • Cómo escribir tests mantenibles

  • Aplicación de TDD en sistemas existentes

  • Cómo testear con base de datos relacionales
  • Ejemplos concretos de aplicación de TDD en sistemas complejos

  • Impacto del Refactoring y cómo usarlo para realizar un desarrollo incremental

  • Los 10 mandamientos de TDD

  • Tests Smells

  • Refactorings:


    • Extract Method/Inline Method

    • Extract Variable/Inline Variable

    • Change Method Signature

    • Introduce Parameter/Add Parameter Object/Extract Class from Parameter

    • Convert local to field/Encapsulate Field

    • Rename method/Rename Class/Rename variable

    • Move method

    • Pull up/Push down

    • Extract Class/Introduce Interface / Superclass

    • Generalize declared Type


  • Encadenamiento de Ractorings:

    • Extract Variable+Entract Method+Inline

    • Encapsulate Field+Move

    • Extract Interface+Generalize declared type

    • Extract Parameter Object + Move

    • Extract Parameter Object + Generalize Declared Type



Objetivos
Resultado esperado

  • Los asistentes estarán capacitados para aplicar TDD bajo situaciones complejas de desarrollo

  • Los asistentes estarán capacitados para aplicar TDD a sistemas existentes sin “morir” en el intento


Que no cubre

  • Conceptos particulares sobre los distintos tipos de testing

  • Uso de algún lenguaje de programación particular

Pre-requisitos
Haber realizado el curso Construcción de Software Robusto con TDD o conocimientos acorde a lo presentado en dicho curso

Audiencia
Programadores, Diseñadores, Arquitectos

Cursos relacionados

Duración
20 horas
Lenguajes de programación
Java - .Net