Hace unas semanas comencé mi primer proyecto con TDD. Hasta ahora, solo he leído un libro sobre eso.Cómo desarrollar métodos complejos con TDD
Mi principal preocupación: cómo escribir pruebas para métodos/clases complejos. Escribí una clase que calcula una distribución binomial. Por lo tanto, un método de esta clase toma n, k, y p como entrada, y calcula el resp. probabilidad. (De hecho, hace un poco más, es por eso que tuve que escribirlo yo mismo, pero sigamos con esta descripción de la clase, para facilitar el argumento.)
Lo que hice para probar este método es: copiar algunos tablas con n diferentes que encontré en la web en mi código, escogiendo aleatoriamente una entrada en esta tabla, me pasé el resp. valores para n, k y p en mi función, y busqué si el resultado estaba cerca del valor en la tabla. Repito esto varias veces para cada mesa.
Todo esto funciona bien ahora, pero después de escribir la prueba, tuve que tanquear durante unas horas para realmente codificar la funcionalidad. Después de leer el libro, tuve la impresión de que no debería codificar más de unos minutos, hasta que la prueba muestre el color verde nuevamente. ¿Qué hice mal aquí? Por supuesto que he roto esta tarea en muchos métodos, pero todos son privados.
Una pregunta relacionada: ¿fue una mala idea elegir números al azar de la mesa? En caso de error, mostraré la semilla aleatoria utilizada por esta ejecución, para poder reproducir el error.
"Tuve la impresión de que no debería programar más de unos minutos, hasta que la prueba vuelva a mostrarse en verde". ¿Dónde - específicamente - obtuvo esta impresión? Por favor, proporcione la cita o referencia. Esto rara vez es verdad, y tengo curiosidad por dónde lo leíste/lo viste/escuchaste. –
Estaba en un libro alemán, "Testegetriebene Entwicklung mit JUnit & FIT", de Frank Westphal, 1ra Edición. P.ej. en la página 13, las dos primeras oraciones. – matthias
Y como es muy probable que no tenga acceso al libro, intento una traducción: "La interacción entre el desarrollo impulsado por prueba y el diseño simple resulta en un ciclo de codificación minuto a minuto. De hecho, no codifica más tiempo que solo unos minutos, sin cerrar el ciclo de retroalimentación por medio de pruebas ". (Bueno, me estoy acercando a las limitaciones de mi inglés aquí, espero que esta traducción sea correcta.) – matthias