miércoles, 19 de septiembre de 2012

Test Driven Development (TDD): Desarrollo de software guiado por pruebas



Scrum es un marco de trabajo de gestión de proyectos, no una metodología de desarrollo de software, por ende, el mismo no define prácticas específicas para desarrollo o pruebas de software. Es por ello que Scrum debe utilizarse con algún marco de trabajo de desarrollo de software y las pruebas correspondientes.

En este artículo se describen los aspectos de la forma tradicional de hacer pruebas de software que pierden validez al aplicar Scrum y el desarrollo ágil de software.

Asimismo, se presentan métodos de pruebas que están más alineados con la filosofía de Scrum y desarrollo ágil, específicamente la técnica de “Test Driven Development” (TDD). Cabe destacar que TDD es más que una técnica de pruebas de software sino que es una forma de organizar todo el desarrollo.

Prácticas tradicionales de Desarrollo Pruebas de Software incompatibles con Scrum

Una de las premisas del desarrollo de software tradicional, es que se asume que el diseño de arquitectura, diseño de clases, definición de funcionalidades y la especificación de requisitos, es una etapa inicial aislada, por lo que se tiene que esperar a tener el diseño y la especificación completa para comenzar a desarrollar y definir los casos de prueba. Está práctica es incompatible con Scrum y con el desarrollo ágil, la cual favorece la paralelización de estas actividades
En cuanto a las pruebas de software, los modelos tradicionales como por ejemplo el modelo-V, establecen una secuencia de pasos en el desarrollo de software y las pruebas. Específicamente, primero se realizan las fases de requerimientos, diseño y programación del software, y luego a partir de las mismas se diseñan y ejecutan las pruebas unitarias (a partir del código), las pruebas integrales de sistema (SIT) y las pruebas de aceptación.


El modelo-V de verificación y validación no puede aplicarse a una iteración (Sprint) en Scrum o cualquier otra marco de trabajo de desarrollo ágil, en su lugar, las pruebas tradicionales (unitarias, integrales y de aceptación de usuario) son reemplazadas por técnicas que favorecen la automatización de pruebas, la integración y refactorización continua del código.

Adicionalmente, bajo el esquema tradicional, el equipo de pruebas se enfoca en realizar pruebas de caja negra (Black-box), en la cual el analista de pruebas se “coloca en el lugar del usuario”.

En desarrollo ágil esto no puede aplicarse, dado que habría que esperar hasta el final de la iteración para comenzar a hacer las pruebas, por lo que en su lugar, el enfoque a aplicar consiste en que el analista de pruebas trabaja de la mano con el desarrollador, realizando pruebas preliminares, inspecciones de código y funcionalidad, antes que esta sea integrada.

La técnica de desarrollo conducido por pruebas (TDD)

Una de las técnicas de pruebas de software que más está alineada con Scrum y con el desarrollo ágil de software es la de Desarrollo conducido por pruebas, conocida como “Test Driven Development” (TDD), que a su vez es una de las técnicas de programación extrema (“Extreme Programming” / XP).

TDD es una técnica que cambia el orden establecido en cuanto a primero desarrollar (programar) y luego probar, de manera que primero se define las pruebas (casos de prueba) y a partir de estos se va desarrollando la funcionalidad, repitiendo el ciclo.

A medida que se van añadiendo nuevas funcionalidades, se añaden nuevas pruebas, las cuales (naturalmente) fallan al no estar implementadas, luego se desarrolla el software necesario para aprobar el caso de prueba, hasta que todos tengan éxito.

Los pasos para aplicar esta técnica son:

  • Tomar un requerimiento o característica del software claramente definida y aprobada por el dueño de producto (product owner en Scrum).
  • Escribir una serie de pruebas iníciales para ese requisito, las cuales naturalmente fallan al no estar desarrollado el requerimiento. 
  • Desarrollar código necesario para pasar” ó “aprobar” esos casos de pruebas. 
  • Se verifican los casos de prueba y se marcan como aprobados. 
  • De la revisión pueden surgir nuevos casos de prueba producto del refinamiento de la definición del producto, adicionalmente, se incluyen pruebas de nuevas funcionalidades recibidas del dueño de producto. 
  • Desarrollar más código o refactorizar el existente para pasar los casos de prueba adicionales. 
  • El proceso continua hasta que no pueden idearse más casos de prueba. 

TDD permite asegurar que escribimos el código justo necesario para cubrir dicho requisito, a la vez que se cumplen los criterios de aceptación del cliente.


En el modelo tradicional, se dedica cantidad de tiempo significativa a diseñar completamente los modelos lógicos y físicos antes de desarrollar, con el TDD, el diseño se deriva en las pruebas de funcionalidad y se paraleliza el mismo con el desarrollo.

Por ende, está técnica (TDD) se alinea muy bien con los enfoques de iteraciones definidos en el desarrollo ágil y Scrum.

Cabe destacar que como premisa del TDD, se deben realizar integraciones y refactorizaciones continúas del desarrollo, así como la automatización de la mayor cantidad de pruebas, para lograr agilizar las pruebas y desarrollo en las altas exigencias demandas por el enfoque iterativo ágil y Scrum.

Por ende, al aplicar esta técnica debe tenerse en cuenta la adquisición de herramientas de automatización de pruebas y el conocimiento (know-how) del equipo en la aplicación o grupo de aplicaciones desarrollado.

Conclusión

La técnica de TDD tiene enorme potencial de agilizar el trabajo del equipo, ahorrando esfuerzo y otorgando mayor foco a trabajo de los desarrolladores, sin embargo, supone mayor reto en cuanto a la comunicación del equipo y gestión de las comunicaciones para evitar casos de prueba no identificados que ocasionen mayor trabajo adicional.


¿Y tú?, ¿Qué opinas?

¿Cuál ha sido tu experiencia para pruebas de software en desarrollo Scrum?, ¿Qué resultados has obtenido?, ¿Has aplicado el Test Driven Development?

¿Buscas más información de metodologías ágiles?

¿Quieres obtener completamente gratis y directamente en tu correo electrónico plantillas, artículos y otros recursos de gerencia de proyectos y metodologías ágiles?, entonces presiona "suscríbete" a continuación.

Suscríbete a la lista de correo electrónico:


Vía FeedBurner, se abrirá una nueva ventana

También puedes seguirnos vía Twitter, Facebook o Linkedin:

  

Lectura recomendada 

Proyectos Ágiles con Scrum: Flexibilidad, aprendizaje, innovación y colaboración en contextos complejos 

Autor: Martin Alaimo; Martin Salas.

>> Latinoamérica (amazon.com)
>> España (amazon.es)
>> Ver reseña

En este libro encontrarás un excelente compendio de las metodologías ágiles, sus procedimientos y artefactos. Excelentes ejemplos prácticos.

Gestión práctica de proyectos con Scrum: Desarrollo de software ágil para el Scrum Master

Autor: Antonio Martel.

>> Latinoamérica (amazon.com)
>> España (amazon.es)

Una gran cantidad de casos reales y experiencia práctica para el Scrum Master en los proyectos con metodologías ágiles, como hacer estimaciones, presupuestos, lecciones aprendidas y más.


¿Interesado en otros productos y últimas novedades?
>> Visita nuestra sección de productos amazon

Otros artículos sobre Desarrollo ágil y Scrum

>> Scrum de Scrum: Desarrollo ágil para grandes proyectos

>> 5 métricas de desempeño para proyectos de desarrollo ágil y Scrum

>> Herramientas de software para gestión de proyectos de desarrollo ágil

>> El Desarrollo ágil en un entorno de fechas y presupuestos predefinidos

>> Los Programas de Certificación del Scrum Alliance

>> Preguntas y respuestas sobre Scrum Alliance

>> Gestión de Proyectos PMI y el Desarrollo Ágil: ¿Que tienen en común?

>> Metodologías de desarrollo ágil

Referencias externas

>> Fernández, V. Blog de V. Javier Fernández. Desarrollo Ágil con Scrum y TDD

>> Planells, J. Avanzis. Scrum, Test Driven Development y MVC. Vamos a ser ágiles

>> Expedith, M. Scrum Alliance. Agile Testing: Key Points for Unlearning

>> Wikipedia. Test-driven development

No hay comentarios :

Publicar un comentario

Pmoinformatica.com," La Oficina de Proyectos de Informática ", es un participante en el Programa de Servicios de Amazon Associates LLC, un programa de publicidad de afiliación diseñado para proporcionar un medio para que sitios web puedan ganar honorarios por la publicidad y enlaces a amazon.com y amazon.es.