ConstructiCat Logo
CodeBust.
Browse section ▾

Desarrollo guiado por pruebas.

Also known as — TDD, Rojo-Verde-Refactorizar

Una disciplina de desarrollo en la que escribes una prueba que falla antes que el código que la hace pasar y, a continuación, refactorizas, dejando que las pruebas guíen el diseño en ciclos cortos y ajustados.

##Intent

Guiar el diseño y verificar la corrección del código escribiendo una prueba que falle para cada pequeña porción de comportamiento antes de escribir el código que la satisface, y mejorando después el diseño mientras las pruebas te mantienen a salvo.

##Problem

El código escrito sin pruebas es arriesgado de cambiar: no hay una forma rápida de saber si una modificación rompió algo. Las pruebas escritas a posteriori tienden a ser superficiales, moldeadas para encajar con un código que quizá ya sea difícil de probar, y rara vez influyen en el diseño.

Sin una función forzante, los diseños también tienden a enredarse y a volverse difíciles de ejercitar de forma aislada.

##Solution

Trabaja en un ciclo corto Rojo-Verde-Refactorizar:

  1. Rojo: escribe una pequeña prueba para el siguiente fragmento de comportamiento y mírala fallar.
  2. Verde: escribe el código más simple que hace pasar la prueba, aunque sea feo.
  3. Refactorizar: limpia el código (y las pruebas) ahora que están en verde, con la suite protegiéndote frente a regresiones.

Repite en bucles de pocos minutos. Como las pruebas van primero, el código es testeable por construcción y la suite documenta el comportamiento previsto.

##Structure

  • El ciclo: Rojo → Verde → Refactorizar, repetido de forma continua.
  • Lista de pruebas: la lista en curso de comportamientos que aún faltan por cubrir.
  • Arrange–Act–Assert (Preparar–Actuar–Afirmar): la forma de una prueba unitaria enfocada.
  • Unidad bajo prueba: la pequeña porción de comportamiento que fija cada prueba.

##Applicability

  • Úsalo para código con lógica y ramificación reales, y para código de larga vida que cambiará a menudo.
  • Especialmente valioso allí donde importan un ciclo de retroalimentación rápido y la seguridad frente a regresiones.
  • Menos adecuado para experimentos desechables (spikes) o trabajo de UI exploratorio donde el diseño aún está en flujo.

##How to Implement

  1. Elige el siguiente comportamiento pequeño de tu lista de pruebas.
  2. Escribe una prueba que lo afirme y ejecuta la suite para verla fallar (rojo).
  3. Escribe el código mínimo necesario para que pase; ejecuta la suite (verde).
  4. Refactoriza el código de producción y de pruebas manteniendo la suite en verde.
  5. Repite, añadiendo comportamientos a la lista a medida que los descubras.

##Pros & Cons

Pros
  • Alta cobertura de pruebas como subproducto, no como ocurrencia tardía.
  • La retroalimentación rápida detecta regresiones en cuestión de segundos.
  • Fomenta diseños desacoplados y testeables.
  • La suite actúa como documentación viva y ejecutable.
Cons
  • Ritmo inicial más lento y una curva de aprendizaje real.
  • Puede sobreenfatizar las unidades aisladas y pasar por alto huecos de integración.
  • Las pruebas también son código: hay que mantenerlas y refactorizarlas.
  • No sustituye a las pruebas exploratorias, de integración o de extremo a extremo.