Test Driven Development (TDD)
Conceptos clave:
-
Diseño bajo contrato.
-
- Write programs that do one thing and do it well.
- Write programs to work together.
- Write programs to handle text streams, because that is a universal interface.
cat source.txt | tr ' ' '\n' | grep '\S'| sort | uniq -c |sort -nr
-
- Codigo desacoplado.
- Recibe una entrada y retorna una salida predecible.
-
Piensa en las pruebas como una Red de Seguridad para tus cambios futuros.
-
Add Test Esto define el contrato de que es lo que se espera de este código y como deseas usarlo.
-
Run all tests and see if the new test fails La prueba debe de fallar primero, pues no tienes la solución programa, con esta corrida de prueba válidas que el flujo funciona.
-
Write the code Escribe el código que resuelva tentativamente la prueba
-
Run tests Corre la prueba, si la pasa sigue adelante, si no, corrige hasta que pase la prueba.
-
Refactor code Conforme la base de código crece, limpia la estructura de tu código, hazlo sin miedo las pruebas te diran si tocaste algo que no debías.
-
Repeat
Es una extensión de la metodología que utiliza herramientas especializadas (forzosamente) a través de Lenguajes de dominio especifico (DSL)
Ejemplos de DSL:
$primary-color: #34F;
$gutter: 1em;
.btn {
border-radius: 1em;
padding: $gutter;
}
.btn.primary {
background-color: $primary-color;
}
REPEAT 8 [ REPEAT 8 [ FD 50 RT 45 ] RT 45 ]
var ex, ey;
ex = instance_nearest(x, y, enemy).x;
ey = instance_nearest(x, y, enemy).y;
with (instance_create(x, y, obj_Missile))
{
direction = point_direction(x, y, ex, ey);
}
Veamos la wikipedia para un ejemplo: Behavior Driven Development: Specialized Tooling Support.