En software tenemos muy radicado el ciclo de vida de desarrollo, donde vemos el proceso de la siguiente forma:
ANÁLISIS ->DISEÑO -> DESARROLLO -> PRUEBAS ->IMPLEMENTACIÓN -> MANTENIMIENTO
Cada fase tiene un responsable que tiene las habilidades necesarias para completar su ciclo y pasar al siguiente, como si fuera un proceso de ensamblaje por fases.
Llevamos un par de décadas trabajando así, para algunos funciona y genera muy buenos resultados , para otros es algo que tiene que evolucionar y adaptarse a las nuevas tendencias mundiales , donde necesitamos software en producción en pocos periodos de tiempo para generar ventaja competitiva(Time to Market).
Test Driven Development (Desarrollo guiado por pruebas) es una práctica que tiene sus cimientos en XP(Programación Extrema) , para algunos autores el nombre no es preciso ya que realmente se considera como “Diseño Guiado por Ejemplos”.
Pilares
- La implementación de las funciones justas que el cliente necesita y no más.
- La minimización del número de defectos que llegan al software en Fase de producción.
- La producción de software modular, altamente reutilizable y preparado para el cambio.
Para utilizar T.D.D debemos cumplir el ciclo [R.G.R] conocido como:
RED -> GREEN -> REFACTOR -> Repetir de nuevo
Consiste en que cambiemos el mindset y comencemos a realizar los Ejemplos antes de codificar, para ello utilizamos un framework conocidos como Xunit (Existe en muchos lenguajes de programación), que permiten realizar las pruebas unitarias de forma automática, Programar Pruebas.
Se comienza creando un test que compruebe como sería el comportamiento en cierta situación (un Ejemplo), ejecutamos el ejemplo que va a fallar (RED) debido a que todavía no se ha codificado ninguna línea que permita cumplir satisfactoriamente el ejemplo.
Luego codificamos el mínimo código posible (principio K.I.S.S) para que el ejemplo pases correctamente (VERDE). Por ultimo realizamos una Refactorización, según Martín Fowler, Refactorizar es modificar el diseño sin alterar su comportamiento, consiste en “limpiar el código y los test”, buscamos que el código cumpla estándares de codificación o principios de diseño como S.O.L.I.D o sea semántico y agradable para leer y entender.
PASOS
- Elegir una necesidad desarrollar (Puede ser un criterio de aceptación de una Historia de usuario)
- Crear el test ( Utilizando un framework Xunit)
- Ejecutar los tests: falla (ROJO)
- Crear código específico para resolver el test (keep it simple stupid)
- Ejecutar de nuevo los tests: pasa (VERDE)
- Refactorizar el código
- Volver a Ejecutar los tests para comprobar que el refactor no genero un cambio en el comportamiento : pasa (VERDE)
- Repetir el ciclo hasta que se abarque todos los posibles caminos que puede tener la necesidad (Caminos felices y caminos tristes).
NOTA : en el siguiente link esta un ejemplo de un programa utilizando T.D.D realizado en java.
https://github.com/igacifuentes/TallerTDDMaquinaDeCafe
Fuentes
Libro Diseño Ágil con T.D.D (Carlos Blé Jurado y colaboradores.)
Blogs
Desarrollo ágil potenciado por prácticas! Láminas sobre TDD, ATDD y CI
http://lordudun.es/2011/04/introduccion-a-tdd-test-driven-development/