Jaime Yáñez Peña

Agile Coach & Scrum Trainer

Official Management 3.0 Facilitator

Digital Transformation Advisor

Speaker

Jaime Yáñez Peña

Agile Coach & Scrum Trainer

Official Management 3.0 Facilitator

Digital Transformation Advisor

Speaker

Desde el Blog

¿De qué va TDD?

noviembre 25, 2019 Agile, Agilidad, Calidad, Formación
¿De qué va TDD?

TDD: Test Driven Development o desarrollo orientado a pruebas…

Suele ser una practica que se malinterpreta en los equipos ágiles, sin embargo, es una herramienta muy poderosa si se aplica de forma correcta. En este post te ayudo a comprender su importancia.

¿Qué es TDD?

Mecánicamente, TDD es muy simple.

  • PASO 1: Escribe una (pequeña) prueba que «falla» porque el código no implementa el comportamiento esperado por la prueba.
  • PASO 2: Inmediatamente después dedícate a escribir el código que hace falta para que la prueba pase. IMPORTANTE: Tenga en cuenta que, cuando hay alguna prueba fallida, el único trabajo de los programadores y equipo de desarrollo es hacer que pasen todas las pruebas, incluso si hacerlo significa revertir una serie de cambios o generar código adicional.
  • PASO 3: Con todo el coraje que te dio el poder tener pruebas de que tu código cumple su función prevista hasta el momento, tu equipo de desarrollo revisa el código y lo prueba para que la nueva funcionalidad, de existir, se adapte al código de una manera clara, intencional y obvia.
  • PASO 4: Ahora que tu código funciona de forma granular y todas las pruebas están pasando, el equipo de desarrollo confirma el código en el sistema de control de versiones o motor de integración. Todas las pruebas aún pasan.

¿Si es tan fácil, por que no se puede implementar bien?

Debido a que TDD es un proceso simple de cuatro pasos, la mayoría de las personas subestimaron la habilidad y la técnica requeridas para poder ejercer TDD de forma correcta:

  • Escribir pruebas que respalden la refactorización es una habilidad que involucra varias técnicas, la mayoría requieren estudio y práctica.
  • Escribir solo el código que se necesita para pasar la prueba requiere una restricción considerable, foco y enfoque.
  • La refactorización requiere una serie de habilidades técnicas y un grado de conocimiento de la estructura del código para mantener las pruebas aprobadas en todo momento mientras se cambia la estructura del código.
  • La integración continua con otros desarrolladores implica una especie de contrato social, tácito y transparente. Todos dependemos de que el código de otras personas esté bien escrito y que se pasen todas las pruebas.

¿Por qué TDD?

TDD es higiene en el desarrollo, mantiene el código ordenado, limpio mientras hacemos entregas continuas. Podemos identificar de forma temprana Code Smells y saber cómo remediarlos.

Pero… Centrarse solo en los olores de código no hará que un programador entienda la escritura de código ordenado. También se requieren otras habilidades.

Podríamos preferir describir el código ordenado como un código que es fácil de entender y modificar; código que es maleable y no impide un mayor desarrollo.

Ahora, hablando de entrega continua e incremental, esto es agregar características o comportamientos al código poco a poco, en lugar de intentar completar todas las funciones definidas y ajustar todas las restricciones en una sola pasada o sesión.

Cada vez que agregamos una función, le pedimos al equipo que realice un desarrollo incremental. En los equipos ágiles, planeamos producir incrementos con la mayor frecuencia posible. En el menor tiempo posible. Esto implica revisar lo ya hecho, volver a trabajarlo o mejorarlo, recuerdas? Transparencia, inspección y adaptación.

Para compartir código con otros desarrolladores, debe ser «seguro» y «terminado» (para valores pequeños de «terminado», revisa tu Definition of Done) muchas veces al día. Eso requiere un enfoque mucho más incremental y la seguridad proporcionada al tener pruebas rápidas.

Es por eso que hacemos TDD en Agile. Crea seguridad para los comportamientos de estos desarrolladores.

¿TDD solo es para el equipo de pruebas?

TDD es una higiene en desarrollo de software utilizada por el equipo de software en conjunto para permitir una refactorización exitosa y una integración continua.

TDD existe principalmente para crear las condiciones para la refactorización. El hecho de que use pruebas para este noble fin, no lo convierte en una práctica solamente del equipo de pruebas. Sin embargo, podría reducir la cantidad de defectos encontrados por los «testers», permitiéndoles enfocarse en lo realmente importante.

¿TDD es todo lo que tu equipo necesita?

No. TDD no es una bala de plata. Pero: TDD (cuando se hace bien) es fácilmente suficiente para reducir dramáticamente la cantidad de defectos.

TDD es un conjunto de habilidades y actitudes. Estas habilidades y actitudes deben desarrollarse a través de la práctica y el estudio de sus técnicas y herramientas.

Hay muchos recursos excelentes para aprender a hacer TDD bien. Hay algunos grandes libros que enseñan TDD; libros escritos por expertos como Kent Beck, Jeff Langr, James Grenning y otros. 

Taggs:
Write a comment