Las Tres Leyes de TDD


De acuerdo con Uncle Bob el TDD (Test Driven Development) se puede expresar en términos de tres reglas simples:

  1. You are not allowed to write any production code unless it is to make a failing unit test pass.
  2. You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures.
  3. You are not allowed to write any more production code than is sufficient to pass the one failing unit test.

Que en castellano sería algo como:

  1. No se permite escribir cualquier código de producción, a menos que sea para hacer pasar un test unitario fallido.
  2. No se permite escribir más que un test unitario que sea lo suficiente para que éste falle; los errores de compilación se consideran fallos.
  3. No se permite escribir cualquier código de producción mas que el que sea suficiente para hacer pasar un test unitario.

Por la regla 1, siempre se debe comenzar por escribir una prueba unitaria para cada funcionalidad que se tiene la intención de escribir. Pero por la regla 2, no se puede escribir mucho de esa prueba unitaria. Tan pronto como el código de la prueba unitaria no compile, o no arroje una afirmación (assertion), se debe detener y escribir el código de producción. Pero por la regla 3 sólo se puede escribir el código de producción que haga que el de prueba compile o pase, y no más.

Por ende, podríamos re-escribir las reglas de la siguiente forma:

  1. Solo puede escribir el código de producción (para implementar una funcionalidad) si ya ha escrito su respectivo código de prueba.
  2. Solo puede escribir el código de prueba mínimo necesario que haga que el código de producción falle.
  3. Solo puede escribir el código de producción necesario para hacer que éste pase su código de prueba.

Ahora bien, la intención de las reglas mas que reduccionista es mas bien didáctica, por lo que pensar que conociéndolas se conoce TDD sería simplista. El siguiente paso entonces es profundizar (y debatir) sobre el tema.

Así, tal vez incluso llegue a estar de acuerdo con la propuesta de Keith Ray para las tres reglas (Ciclo Rojo-Verde-Refactorización):

  1. Write enough test code so that to get a single test failure.
  2. Write enough production code to get all your tests to pass.
  3. Refactor until the code is Simple/Clean. (See elsewhere for the Rules of Simplicity/Clean)

…o tal vez no. Pero lo importante es tener en claro los puntos básicos, para así pasar al siguiente paso: practicar TDD. Tal vez el paso mas difícil de dar, pero sólo así es como se llega entender mejor.

Por otra parte, como en todo, existe el riesgo de tomar estas reglas como verdaderos mandamientos dogmáticos y querer cumplirlos a “raja-tabla”, pero lo realmente importante es reconocer sus beneficios y practicarlo en la medida en que se pueda ir dominando la técnica y brinde beneficios a los proyectos, sin olvidar nunca que el TDD es un medio y no un fin.

Actualización (29-Marzo-2010):

Giorgio Sironi a escrito una lista de verificación a utilizar durante el TDD: The TDD checklist (Red-Green-Refactor in detail), para asegurarse de que no se omitan ciertos “pasos” mientras se escribe código… La lista es, a propósito, no exhaustiva, y solo insiste en las mejores prácticas a aplicar lo antes posible en el desarrollo de las pruebas y el código de producción. La lista de verificación está escrita en forma de preguntas que debemos hacernos mientras se atraviesan las diferentes fases del ciclo Rojo-Verde-Refactorización.

Espero que esto sirva de algo.

Mayor información:

Acerca de Willy Mejia

Developer, Techie, Human... http://about.me/willyxoft
Esta entrada fue publicada en Ingeniería de Software, opinión. Guarda el enlace permanente.

Una respuesta a Las Tres Leyes de TDD

  1. leydi dijo:

    Muy útil tu post… Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s