Test Driven Development Avanzado

Av. Alem 896, 6to Piso     20 horas     11.000 + IVA    
Del 20/05 al 24/05. Días: 9 a 13 hrs.
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
Comentario
    
Lenguajes de programación
Smalltalk - Java - .Net

Hernán Wilkinson desarrolla software de manera profesional desde el año 1991 y utiliza TDD para hacerlo desde el año 2000. Ha programado innumerables sistemas utilizando esta técnica y la enseña sistemáticamente desde el año 2004. Es profesor hace 11 años de las materias de Programación Orientada a Objetos y Diseño Avanzado con Objetos de la Facultad de Ciencias Exactas de la UBA. Da clases de diseño en la cátedra de Ingeniería de Software 2 y participa de la materia de Paradigmas de Lenguajes de Programación de la misma facultad. Es también profesor titular de la materia Métodos de Desarrollo con Objetos del Master de Ingeniería de Software de la UCA. Ha participado activamente en varios congresos internacionales y nacionales como OOPSLA, ESUG, Agiles y Smalltalks. Es miembro fundador de FAST, Fundación Argentina de Smalltalk, organizadora de los congresos argentinos de Smalltalk. Se ha desempeñado como programador, líder de grupos de arquitectura, gerente de desarrollo y actualmente es socio de 10Pines, pero nunca ha dejado de hacer aquello que es su pasión: desarrollar software.