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.
- Si el cliente sigue cambiando los requisitos, ¿es posible evaluar adecuadamente la calidad de su software?
- ¿Qué tan común es reconstruir la mayor parte de una aplicación web o sitio web después de la compilación inicial? También estoy interesado en cuántas startups web realizan revisiones importantes de sus bases de código después de lanzar y obtener algo de tráfico por cualquier motivo.
- ¿Puedo ejecutar ejecutables de Windows desde un volcado de memoria? (archivo .dmp)
- ¿Vale más la pena obtener una maestría en ciencias de la computación o ir a un campo de entrenamiento de codificación?
- Cómo convertirse en un ingeniero de software full stack
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.