Soy bastante nuevo en el enfoque TDD y mis primeros experimentos dicen que escribir 1 línea de código funcional significa escribir alrededor de 2-3 líneas de código de prueba. Entonces, en caso de que escriba 1000 LOC, toda la base de código, incluidas las pruebas, será algo así como ~ 3500 LOC.
¿Se considera esto normal? ¿Cuál es la proporción en el código que escribes?
testing
unit-testing
tdd
metrics
Andrey Agibalov
fuente
fuente
Respuestas:
1: 3 es normal con TDD.
Por mi experiencia, y también por otras citas que recuerdo.
fuente
Existen variaciones basadas en diferentes estilos de codificación e idiomas. Sin embargo, independientemente del idioma que use, la mayor variación es usted.
Robert Martin dijo una vez:
Eso me hizo pensar. Pruebas más específicas significan más código de prueba. Más código de producción genérico significa menos código, por lo que las proporciones de prueba / código deberían aumentar a medida que el código evoluciona.
Pero espera, eso tampoco es bueno. En algunos casos particulares, por ejemplo, cuando define un cierto algoritmo, puede tener solo 6-10 líneas de código que contienen un par de "si", un tiempo y quizás 2-3 recursiones. Puedo decirte que ese código tendrá probablemente más de 100 líneas de código de prueba.
En un proyecto real, algo más grande que unos pocos algoritmos, la relación prueba / código debe estar entre 1: 1 y 2: 1. Si supera el 2: 1, es un olor que tiene pruebas que deben refactorizarse o eliminarse (o tal vez un código que es difícil de probar). Siempre debe invertir la misma cantidad de cuidado y refactorización en sus pruebas que en su código de producción.
De todos modos, la mejor respuesta a su pregunta tal vez sea "Complejidad ciclomática" . Cuanto mayor sea la complejidad ciclomática de su método, más exponencialmente tendrá que escribir para que cubra todos los casos.
fuente
La proporción variará según el tamaño de sus métodos. El tamaño de sus métodos variará según el estilo de programación, el idioma y el dominio del problema.
Si sus métodos son cortos, entonces 3: 1 es razonable. Si sus métodos son largos, entonces 3: 1 está en el lado alto.
Entonces, para responder a su pregunta, depende. :-)
fuente
Para aplicaciones críticas de software, la proporción habitual es un día de prueba para cada 10 LoC funcionales.
Y esto no cuenta TDD, que no se trata de pruebas sino de especificaciones.
fuente
El tamaño de mi código de prueba es aproximadamente la mitad de lo que es el código 'real' en general. Hacer lo contrario es indicativo de que sus pruebas son demasiado complejas y / o su código es demasiado difícil de probar y / o su código es demasiado denso / complejo.
O simplemente está probando demasiado y desperdiciando su tiempo en rendimientos decrecientes.
Consulte también "¿cuándo la prueba de la unidad es inapropiada o innecesaria?"
fuente
Mi proporción es de alrededor de 2-1 a 10-1 (código para probar). Asegúrese de que las pruebas sean sobre valor / comportamiento y no implementación
fuente