¿Cómo puedo saber si tengo suficiente cobertura de prueba unitaria para eliminar una prueba de integración?

15

Estoy trabajando en un sistema heredado (con esto quiero decir que fue escrito sin pruebas). Hemos intentado probar algunos de los sistemas escribiendo pruebas de integración que prueben la funcionalidad desde el exterior.

Esto me da cierta confianza para refactorizar partes del código sin preocuparme por romperlo. Pero el problema es que estas pruebas de integración requieren una implementación (2+ minutos) y muchos minutos para ejecutarse. Además, son un dolor para mantener. Cada una de ellas cubre miles de líneas de código y cuando una de ellas se rompe puede tomar una hora (s) para depurar por qué.

He estado escribiendo muchas pruebas unitarias para estos cambios funcionales que he estado haciendo últimamente, pero antes de comprometerme, siempre hago una nueva implementación y ejecuto todas las pruebas de integración, solo para asegurarme de que no me haya perdido nada. En este punto, sé que mis pruebas de unidad y algunas de las pruebas de integración se superponen con lo que prueban.

¿Cómo puedo saber cuándo mis buenas pruebas de unidad están cubriendo adecuadamente una mala prueba de integración para poder eliminar esa prueba de integración?

    
pregunta Daniel Kaplan 30.01.2013 - 22:03
fuente

2 respuestas

18

La métrica más fácil es preguntar: "¿cuándo fue la última vez que falló esta prueba de integración legítimamente ?" Si ha pasado mucho tiempo (ha habido muchos cambios) desde que falló la prueba de integración, entonces las pruebas de la unidad probablemente están haciendo un buen trabajo. Si la prueba de integración ha fallado recientemente, hubo un defecto que no fue detectado por las pruebas unitarias.

Por lo general, mi preferencia sería aumentar la solidez de las pruebas de integración, hasta el punto en que puedan ejecutarse de manera confiable sin supervisión. Si tardan mucho tiempo en ejecutarse, ejecútelos durante la noche. Todavía son valiosos, incluso si se ejecutan de vez en cuando. Si estas pruebas son demasiado frágiles o requieren intervención manual, es posible que no valga la pena el tiempo empleado en mantenerlas en funcionamiento, y puede considerar descartar aquellas que tengan éxito con mayor frecuencia.

    
respondido por el Greg Hewgill 30.01.2013 - 22:10
fuente
7

Las pruebas de unidades no son el santo grial de las pruebas, son solo una herramienta de muchas de las que deberían usarse para probar una base de código. Por lo tanto, ninguna cantidad de pruebas unitarias debe considerarse segura para reemplazar otras pruebas. Si tiene una mala prueba de integración, debería trabajar para que sea una buena prueba de integración, no reemplazarla con otra cosa, es como reemplazar la puerta frontal con una cerca perimetral y una puerta.     

respondido por el Ryathal 30.01.2013 - 22:48
fuente

Lea otras preguntas en las etiquetas