Cómo asegurarme de que el software probado de mi unidad funciona, si me burlo de la interacción entre una unidad y otra

Respuesta corta: necesita pruebas de integración

Respuesta larga: Esto es algo por lo que muchos desarrolladores se confunden. No prueba el código simplemente escribiendo pruebas que ejercitan el código. Incluso, si ha cubierto el 100% de su código usando pruebas unitarias, no significa que su código haya sido probado. Usted prueba el comportamiento, no el código . Lo que significa que cuando ha probado su código en un entorno simulado, lo único que ha hecho es demostrar que su código se comporta como se espera en un entorno simulado. Para probar que su código se comporta como se espera en un entorno real, debe colocarlo en un entorno real. Para probar que su código funciona bien bajo carga, debe ponerlo bajo carga. Es el mismo código que necesita probar en diferentes condiciones, para asegurarse de que se comporta bien en diferentes condiciones. Estás probando el comportamiento, no el código.

Entonces, me preguntarán, ¿por qué molestarse en burlarse? ¿No es mejor simplemente ejecutar todas sus pruebas en un entorno integrado, en lugar de ejecutarlo dos veces, una en un entorno simulado y otra en real?
La razón por la que te burlas es la eficiencia . Las pruebas de integración agregan gastos generales. Debe asegurarse de que sus sistemas externos (esto podría ser un servicio web o incluso la base de datos) estén disponibles para su uso. Debe asegurarse de que tengan los datos de prueba adecuados. Cada vez que ejecute la prueba, su prueba tendrá que asegurarse de que se conecta al sistema externo al inicio, y después de que la prueba haya terminado, limpiará los efectos secundarios de la ejecución de la prueba. Hacer esto en cada prueba lleva tiempo y ralentiza las pruebas. Cuanto más lentas se ejecuten las pruebas, más probable es que nunca las ejecute. Además, si está creando aplicaciones web, es posible que tenga que empaquetar su código e implementarlo en el servidor web y reiniciar el servidor web. Esto lleva tiempo
El uso de simulacros hace que sus pruebas sean más rápidas y fáciles de ejecutar . No es un sustituto de las pruebas de integración. Esto significa que mientras escribe código, puede seguir ejecutando rápidamente las pruebas simuladas para probar su código. Esto le permite probar la lógica en su código. Al final del día, 1 hora antes de que esté listo para registrarse, ejecuta las pruebas de integración para probar si su código funciona en un entorno real. Sí, te registras, te vas a casa y tomas una margarita. No es así, o te quedas tarde, o lo arreglas mañana a primera hora. Si todo lo que tenía son pruebas de integración, entonces cada ciclo de código-construcción-implementación-prueba se vuelve tan largo que resulta muy tentador eludir el ciclo.

Entonces, ¿cuánto debe probar la integeración? ¿Debería apuntar a una cobertura de código del 100% en sus pruebas de integración? ¿Cuánto es lo suficientemente bueno? Bueno, hay una gran compensación allí, y aquí es donde entra en juego el juicio del desarrollador. Todas las pruebas están sujetas a la ley de rendimientos decrecientes. Las felices pruebas de ruta que escribes te darán la mayor explosión. Cada prueba adicional agrega esfuerzo pero ofrece un rendimiento menor. Finalmente, llega a un punto en el que está haciendo esfuerzos extraordinarios para probar los casos de error perimetral (“Oye, debería escribir algo que simule que el servidor web pierde la conexión de red con la base de datos”. Muy difícil de automatizar, realmente no sucede eso a menudo ). Al final del día, cada desarrollador debe tener confianza en su código. Cada desarrollador debe estar tan seguro de que cuando alguien le dice que su código tiene un error, deben sorprenderse genuinamente.
En general, la regla general que funciona es escribir pruebas de unidad de cuadro blanco, escribir pruebas de integración de cuadro negro. Esto garantiza que las pruebas simuladas de ejecución rápida cubran la mayor cantidad de código posible, y las pruebas de ejecución más lenta prueban si cumple con los requisitos comerciales.

Yo uso pruebas de contrato. Estas son pruebas de integración (verifique que las partes funcionen juntas), pero no pruebas integradas (ejecute varias capas juntas). Una prueba de contrato es una prueba que expresa un comportamiento que las implementaciones de una interfaz garantizan a sus clientes. Si ha oído hablar del “diseño por contrato”, entonces sabe lo que quiero decir con Prueba de contrato.

No escuches a las personas que te dicen que tienes que juntar las piezas reales para ver si funcionan. Usted no Es una forma de hacerlo, y no escala, y es por eso que eventualmente la gente me llama pidiéndome que los ayude con sus pruebas de pruebas irremediablemente lentas. Cuantas más piezas reales intentes juntar, peor será. Las pruebas integradas son una estafa: empeoran el problema que dicen resolver.

Si tiene contratos claros entre capas y tiene pruebas que comprueban que las implementaciones respetan esos contratos y que los clientes solo dependen del comportamiento que garantizan sus colaboradores, entonces las piezas funcionarán. No necesariamente resolverán el problema correcto, pero simplemente funcionarán. Necesitará pruebas de extremo a extremo (y muchas menos de las que cree) para demostrar que ha construido lo correcto, pero no necesita que demuestren que lo hizo correctamente.

Referencias
Una prueba de contrato de la vida real
El susurrador de códigos
La mejor introducción del mundo a TDD, Nivel 1 (Serie 1-6) (La Serie 4 le muestra cómo hacer esto. No es gratis).

Esta es una pregunta con trampa. Su software “funciona” solo en la medida en que lo haya probado. Si lo prueba solo en un entorno simulado, como las pruebas unitarias, es probable que solo funcione allí.

Realice una prueba unitaria para descubrir la mayoría de los errores más rápido, no para asegurarse de que su software (unidad) funcione.

Incluso si prueba en un entorno integrado, es probable que funcione solo para los casos de uso que prueba. La otra cara es que no todos los casos de uso son igualmente probables, por lo que debe priorizar por probabilidad (estimada).

Es posible demostrar que el software “funciona” para todos los efectos, pero su complejidad es exponencial al tamaño del programa.

Es por eso que la fase de prueba de integración de sistemas (SIT) sigue siendo necesaria. El 100% de cobertura de prueba unitaria no puede detectar el 100% de los errores.

More Interesting

¿Cómo compensar a los desarrolladores y otros ingenieros que están de guardia y tienen que responder a emergencias, como arreglos de código o interrupciones?

¿Qué lenguajes de programación admiten el patrón de fábrica y en qué nivel se proporciona soporte de fábrica en ese lenguaje de programación específico?

Si tiene que crear objetos para cada número de enrutador en un archivo, ¿cuál es la mejor manera si no sabe cuántas líneas obtendrá para cada enrutador?

¿Cuáles son los lenguajes de programación, utilizados recientemente en las industrias de software?

Cómo enseñar a mis socios comerciales sobre sprints

¿Cuáles son las diferencias (en calidad, confiabilidad, etc.) entre un desarrollador / ingeniero de software independiente indio y un empleado desarrollador / ingeniero de software indio?

¿Qué sucede en la vida de un desarrollador de front office en un banco de inversión?

¿Cómo manejan varias empresas el tema de la propiedad del proyecto de código abierto?

¿Hay errores de aplicación que no vale la pena manejar porque es inútil?

Cómo hacer un diagrama de flujo de datos para un sistema de gestión de bibliotecas

¿Cómo es trabajar en Nagarro? ¿Qué tipo de trabajo hacen?

¿Cómo reconocerías el software autoconsciente?

Si planea crear eventualmente una nueva empresa, ¿cuáles serían las ventajas y desventajas de obtener un título de Doctor en Filosofía (PhD) en ingeniería eléctrica o de software para alguien con un título universitario en ingeniería química?

¿Por qué la búsqueda de archivos en mi disco suele demorar entre 20 segundos y 2 minutos, mientras que Google puede buscar una página en Internet casi al instante?

¿Cuál es el producto de Microsoft más subestimado?