Es bien sabido que las pruebas integrales y de extremo a extremo son costosas. Por supuesto, si desarrollamos aplicaciones donde las personas podrían morir si las cosas salen mal, es una inversión que vale la pena. Sin embargo, en aplicaciones donde los errores no son el fin del mundo, ¿no sería más barato omitir las pruebas E2E y las pruebas de integración por completo y, en su lugar, elaborar un plan de respaldo si algo sale mal? ¿Como es una prueba manual de historias de usuario + pruebas unitarias + usando un lenguaje estáticamente escrito suficiente?
Como, por ejemplo, si una tienda web pierde un pedido, podrían enviar el artículo gratis + otro artículo como disculpa. El usuario final podría terminar aún más feliz de esa manera y, en general, la compañía ahorra dinero.
Creo que mi pregunta es, en general, ¿cuánto cuesta una prueba de integración y una prueba E2E y cuánto dinero ahorra? ¿Hay alguna manera de hacer un cálculo de riesgo / costo para esto?
Respuestas:
No importa si implementa E2E y pruebas de integración o no, necesita un plan de respaldo de cualquier manera . Nunca espere que un sistema esté libre de errores solo porque fue probado.
Por lo tanto, en su estimación de costos, no compara el costo de implementar las pruebas E2E con los costos que su plan de respaldo estima en caso de falla, compara:
vs.
En caso de que pueda usar esas pruebas E2E varias veces, generalmente habrá una serie de pruebas en las que los costos alcanzarán un punto de equilibrio. Esa debería ser la métrica que aplique cuando desee planificar con anticipación qué pruebas E2E realizará manualmente y cuáles automatizará.
Tenga en cuenta que puede haber algunos tipos de pruebas E2E que se pueden implementar fácilmente, donde el ROI es inmediatamente claro, pero también hay tipos de pruebas E2E donde el desarrollo y el mantenimiento pueden ser más costosos que realizarlos manualmente durante un período de varios años.
fuente
Quizás en contra de la intuición, las pruebas automatizadas en realidad pueden reducir el tiempo de desarrollo frente a ninguna prueba. Entonces es una victoria gana.
La idea es que las pruebas contribuyan en varios niveles
Forzar estricta recopilación de requisitos y especificaciones
Esto tiene un gran impacto en la velocidad de desarrollo. Sin retroceder pidiendo más detalles, sin malentendidos, sin características innecesarias, etc.
Los desarrolladores saben cuándo se completa una característica
La mayoría de las pruebas las realizan los desarrolladores durante la redacción del código en lugar de que los verificadores comprueben un producto terminado. Automatizar estas pruebas reduce esta carga de trabajo
Errores introducidos por nuevas características detectadas al instante.
Estos pueden fácilmente costarle un sprint y requieren la reescritura de una función completa si no se detectan.
Ciclo de liberación más rápido
Esto significa menos código en vuelo, lo que significa menos fusión, lo que significa menos trabajo y menos complejidad para los desarrolladores
Especialmente si tiene una configuración de marco de prueba, escribir estas pruebas lleva menos tiempo del que ahorra en estas eficiencias.
Además, ahorra en tiempo de prueba manual, además obtiene un mejor producto al final.
fuente
¿Mi respuesta? Quizás, probablemente no .
Las pruebas EOE son buenas cuando son muy simples. Si planea cubrir escenarios básicos, puede lograr obtener alguna ventaja con las pruebas EOE. Pero si tiene una aplicación realmente compleja y grande (misión crítica o no), estas pruebas EOE serán costosas de mantener y necesita conocer su escenario para valorar si vale la pena.
Hace algunos años, el blog de Google Testing analiza este tema. Solo puedo estar de acuerdo con el autor. Una buena prueba debe ser rápida , confiable y aislar las fallas , características que las pruebas EOE no pueden brindarle.
Trabajé en una aplicación que tiene más de 12 horas de pruebas de extremo a extremo que cubren muchos escenarios. Finalmente, logramos distribuir estas pruebas en diferentes máquinas, controlando el inicio, la ejecución y el final de las pruebas, recopilando y fusionando los resultados. La aplicación probada era una aplicación monolítica (lo que es más fácil de poner en funcionamiento para probar) y fue una pesadilla mantener las pruebas.
La mayor parte del tiempo manteníamos las pruebas en lugar de detectar errores de sus resultados. Descubrir el origen de un error en una prueba de extremo a extremo lleva mucho tiempo. También nos ocupamos de muchas pruebas "falsas negativas" y poco tiempo para comprender el problema y corregirlo: problemas de carga del Applet Java, elemento esperado no encontrado en la página (más otros problemas sobre la velocidad de automatización), mantener el código de consulta que solo se usan en la prueba de memoria de la base de datos (porque la consulta original usa un código específico de la base de datos), etc.
Todo esto necesita personas para mantenerse en funcionamiento. Al final, comenzamos a eliminar algunas pruebas de EOE y las reemplazamos con muchas pruebas de unidad / integración.
Entonces, mi consejo conservador es usar la pirámide de prueba de Google:
fuente
En mi experiencia, las pruebas E2E, independientemente de la importancia de la aplicación, siempre son prudentes. Siempre pienso en términos del peor de los casos, si las cosas van en forma de pera, ¿te sientes cómodo frente a la gerencia y justificando tu enfoque? Si no, entonces necesita cambiar su enfoque. Muchas organizaciones minimizan la importancia y los recursos asignados a las pruebas, pero pueden estar seguros de que cuando las cosas van mal, todo el mundo está buscando a alguien a quien culpar y si usted tomó la decisión de limitar las pruebas o dio ese consejo, entonces usted es el que está disparando. línea.
El desarrollo de software con demasiada frecuencia requiere un ojo en la política organizacional.
fuente
"Es bien sabido que las pruebas integrales y de integración son costosas".
Creo que no estoy de acuerdo con esta afirmación.
En primer lugar, las pruebas E2E son lo que les importa a los usuarios finales y pueden ser las opciones más efectivas y de menor costo para probar sistemas complejos. Por ejemplo, cuando alguien compra un automóvil, la mayoría de la gente no lo hace pedazos y comienza a probar el carburador, la caja de cambios y las ruedas de forma aislada. En cambio, lo toman para una prueba de manejo.
En segundo lugar, en términos de herramientas, E2E no tiende a ralentizar la evolución interna del producto y dura más. Si lo piensa, la superficie funcional real de la mayoría de los productos rara vez cambia tanto, mientras que internamente puede estar sujeto a todo tipo de desarrollos. Como resultado, una vez que las herramientas de prueba están en funcionamiento, generalmente dura extremadamente bien. Como ejemplo, si volvemos a la analogía del automóvil. El mismo caso de prueba "tómalo para conducir" funcionaría más o menos en el Ford Modelo T que en un Tesla. Al igual que las inversiones en carreteras rodantes, túneles de viento, configuraciones de prueba de fugas, etc. ¿Cuántas de las pruebas de componentes internos habrían tenido un ROI tan bueno durante su vida útil?
Donde las pruebas E2E tienden a ser más caras / inapropiadas, sin embargo, es en la configuración inicial y si se usa para probar y probar todo. Pragmáticamente, creo que la mejor manera de evitar esta trampa es priorizar automatizando las pruebas de cosas que:
Utilice cualquier forma de prueba, incluido E2E, que considere apropiada. Sin embargo, concéntrate en eso.
fuente
Realmente no se puede comparar el costo de las pruebas de integración con el costo del mejor escenario en el que un error solo afecta a un solo pedido. Es probable que un error lógico afecte una gran cantidad de pedidos. Digamos que un error significa que no se capturan pagos, esto podría tener efectos desastrosos para cualquier negocio.
Debería preguntar cuál es el error del peor de los casos que, de manera realista, podría terminar en producción debido a la falta de pruebas E2E. Y recuerda la ley de Murphys.
fuente
Supongo que esta pregunta es sobre aplicaciones web empresariales.
Mi recomendación para cosas de importancia crítica:
Creo que la mayoría de las pruebas deberían realizarse a nivel de API o componente. No me importan las pruebas unitarias que solo ejecutan algunas funciones internas.
fuente