¿Las pruebas integrales y de integración valen la pena para cosas que no son de misión crítica?


9

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?


44
¿Hay alguna manera de hacer un cálculo de riesgo / costo para esto? Aparte de hacer ambas cosas y luego comparar, no.
Robbie Dee

44
Debe considerar el ROI de todo en el proceso de desarrollo. ¿Merecen la pena las pruebas unitarias? ¿Vale la pena la prueba manual? ¿Vale la pena la calidad del código? ¿Vale la pena crear el software en primer lugar? Esas son preguntas comerciales importantes. Lo cual, por supuesto, no se puede responder en general. Y tienen más que ver con la administración de empresas que con la ingeniería de software.
Christian Hackl

¿Cuál cree que es el impacto comercial si una tienda web como Amazon pierde unas pocas horas o pedidos? Pueden intentar reenviar los artículos sin costo, pero ¿qué le haría a su reputación?
Bart van Ingen Schenau

@BartvanIngenSchenau Creo que una compañía masiva como Amazon puede permitirse pruebas de integración y E2E. Es fácil ver pocas horas de pedidos que les cuestan millones. Pero me pregunto si para las empresas más pequeñas el costo para la reputación es menor que el costo de las pruebas mismas. Especialmente porque convertir a clientes insatisfechos en felices puede ser extremadamente valioso, lo que significa que puede que ni siquiera sea un costo para empezar. Simplemente no tengo ninguna experiencia para sacar conclusiones, por eso pregunto.
Marc

Respuestas:


12

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:

  • Costos para realizar pruebas E2E manualmente (varias veces, antes de cada nueva versión)

vs.

  • Costos para construir (y mantener) pruebas automatizadas E2E

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.


Gracias, esta es una gran respuesta. ¿Cuáles son ejemplos de pruebas E2E que son fáciles de implementar pero que conducen a un mayor desarrollo y mantenimiento en el futuro?
Marc

2
@Marc: Supongo que entendiste mal mi última oración, estaba hablando de diferentes pruebas: las que son fáciles de implementar / mantener, y las que no lo son.
Doc Brown

Correcto, la versión editada lo hace más claro.
Marc

@Marc: Según mi experiencia, las pruebas a través de interfaces de usuario (especialmente las complejas) a menudo son un candidato donde la automatización de pruebas es menos rentable que otras pruebas, pero depende mucho de la categoría de software, las herramientas disponibles y las especificaciones. Tecnologías involucradas.
Doc Brown

7

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

  1. 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.

  2. 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

  3. 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.

  4. 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.


Para mí, esta respuesta se mantiene o disminuye dependiendo de si el OP está hablando de pruebas de integración más allá de las pruebas unitarias. Si ya hay pruebas unitarias, la respuesta parece ser especulativa en el mejor de los casos . Si no hay pruebas unitarias, entonces, naturalmente, algunas pruebas automatizadas son mejores que ninguna.
Robbie Dee

Sí, supongo que tenemos pruebas unitarias en marcha
Marc

1

¿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:

Como una buena primera suposición, Google a menudo sugiere una división 70/20/10: 70% de pruebas unitarias, 20% de pruebas de integración y 10% de pruebas de extremo a extremo. La combinación exacta será diferente para cada equipo, pero en general, debe mantener esa forma piramidal.


0

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.


0

"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:

  1. Son fáciles de automatizar y es poco probable que necesiten mucho mantenimiento para seguir funcionando.
  2. Consume la mayor cantidad de tiempo para aplicar procesos de prueba manuales consistentes, adecuados.
  3. Se arriesga a hacer que usted o su jefe se vean como idiotas si se lanza el producto roto.

Utilice cualquier forma de prueba, incluido E2E, que considere apropiada. Sin embargo, concéntrate en eso.


0

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.


0

Supongo que esta pregunta es sobre aplicaciones web empresariales.

Mi recomendación para cosas de importancia crítica:

  • Realice pruebas automatizadas para sus API de back-end, asegurándose de que el back-end funcione como se espera. Los desarrolladores deben escribir estas pruebas al implementar una API.
  • No se preocupe por las pruebas de IU automatizadas, es decir, realice las pruebas frontend manualmente.

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.