2010-03-25 5 views
5

Estaba leyendo TDD - How to start really thinking TDD? y noté que muchas de las respuestas indican que las pruebas + la aplicación deberían tomar menos tiempo que simplemente escribir la aplicación. En mi experiencia, esto no es verdad. Mi problema es que el 90% del código que escribo tiene una TONELADA de llamadas al sistema operativo. El tiempo dedicado a simular realmente esto toma mucho más que simplemente escribir el código en primer lugar. A veces 4 o 5 veces más tiempo para escribir la prueba que para escribir el código real.¿Ha estado en casos donde TDD aumentó el tiempo de desarrollo?

Tengo curiosidad por saber si hay otros desarrolladores en este tipo de situación.

Respuesta

0

No es necesario que obtenga una cobertura de código del 100%. Si un fragmento de código es un envoltorio simple alrededor de una llamada al sistema operativo, entonces tiene que llegar el momento en que suponga que la llamada al sistema operativo hará lo que se supone que debe hacer (es decir, no necesita llamar al contenedor simple).

Ahora, si tiene la lógica compleja alrededor de que llama al sistema operativo, entonces tendría sentido simular la llamada al sistema operativo y probar la lógica de la unidad. Por supuesto, si tiene una buena capa de abstracción en la parte superior de la llamada al sistema operativo, esto no sería difícil.

sólo hay que centrar sus esfuerzos en las piezas que le dan el mejor partido de su inversión de mantenimiento

+0

Y ahí está el problema. El 90% del código que escribo no hace más que absorber datos del sistema operativo e imprimirlos. –

+0

@BillyONeal Resume el sistema operativo y TDD el resto. Valdrá la pena. Tal vez no desde el primer día, pero (con suerte) habrá un día en el que su código sea tan grande que le ayude a desarrollarse más rápido o cuando llegue el día en que alguien más deba hacerse cargo y luego sea de gran beneficio. –

-1

Unfortgunately, este no es el lenguaje agnóstico. En lenguajes apropiadamente simulables (mi experiencia es con Perl), burlarse de CUALQUIER COSA, incluidas las llamadas al sistema, es, dada una biblioteca de burlas apropiada, MUY barata, rápida y fácil.

+0

Esto es independiente del idioma. Incluso si es fácil hacer el simulacro, todavía tienes que hacer el trabajo para configurar el simulacro. Si se trata de un método de 5 líneas con 4 llamadas O/S, entonces todavía tiene que configurar 4 burlas para cada prueba anormal. –

+0

El sistema de burla adecuado registra sus propios simulacros, por lo que dije que depende de un idioma.No puedo hacer eso en C++ hasta donde yo sé, pero puede en Perl – DVK

+0

Puede hacerse en C++ - está creando los datos de muestra que se supone que devuelven las llamadas API que toman el tiempo, no el material "ExpectCall" . –

4

En general, cuando las personas tienen la experiencia de que TDD hace que el tiempo que se tarda en realizar un trabajo lleve más tiempo es porque tienen una definición incorrecta de "hecho" o de "trabajo". Normalmente, estas personas creen en el mito del "código completo".

Cualquiera puede golpear a algún código más rápido de lo que pueden golpear a algo de código y algunas pruebas. Sin embargo, escribir no es realmente donde va el tiempo. Si comienza a medir todo el tiempo, desde el concepto hasta la implementación, que toma una característica completa, desde la sopa hasta las nueces, dejará de tener la experiencia de TDD "por más tiempo".

También, la cosa OS no es tan importante, ya que implica Joel: burlan el sistema operativo para que pueda texto de su complejo utiliza de las llamadas del sistema operativo, pero no molestar a probar el sistema operativo a menos que tenga una razón necesita invocar una suposición como prueba.

+0

¿Qué quieres decir con eso exactamente? ¿Qué más hay para implementar que no sea el producto? Aquí soy un equipo de desarrollo de un solo hombre y el único proceso de "implementación" que tengo es 1. Generar código y 2. Poner servidor FTP. Quizás en un gran equipo con muchos desarrolladores trabajando en el mismo código, las pruebas te ayuden a saber que no vas a romper el código de otra persona, pero no tengo ese problema en particular. –

+0

Con respecto a su último párrafo, estoy de acuerdo. El problema es el tiempo que lleva configurar realmente los simulacros. –

+0

@BillyONeal: ¿Realmente hace un cambio, lo construye y lo despliega esperando/"saber" que lo que entrega funcionará correctamente todo el tiempo? A menos que esté escribiendo un código que nadie usa, hay por lo menos un paso más: alguien obtiene lo que puso en el FTP, lo usa y decide si fue lo suficientemente bueno o no. Si escribió un error, el tiempo que lleva implementar una característica se mide desde el momento en que comenzó a trabajar en la función hasta que encuentra y repara el error en esa característica, no hasta el momento en que la construye y la tira por la pared para alguien intentar. –

1

TDD no se burla. A veces, un buen TDD emplea burlas, pero se puede hacer mucho TDD sin burlarse, y si te enfrentas a demasiadas burlas con tu TDD, tal vez necesites pasar a la "vieja escuela" y escribir pruebas más simples.

+1

99% del código que escribo no hace más que capturar datos API e imprimirlos. ¿Cómo demonios probarías un código así sin burlarse? –

Cuestiones relacionadas