Midiendo la cobertura de prueba de extremo a extremo en microservicios
Aprende a evaluar la cobertura de pruebas de manera efectiva en microservicios.
― 9 minilectura
Tabla de contenidos
- ¿Qué es la Prueba de Extremo a Extremo?
- Los Retos de Probar Microservicios
- Evaluando la Cobertura de Pruebas de extremo a extremo
- Cómo Calcular Estas Métricas
- Ejemplo de Estudio de Caso
- Importancia de Probar en Microservicios
- Desafíos y Consideraciones
- Direcciones Futuras
- Conclusión
- Fuente original
- Enlaces de referencia
Los microservicios son una forma de construir software dividiéndolo en partes pequeñas e independientes. Cada parte, llamada servicio, hace un trabajo específico y se puede desarrollar y actualizar por su cuenta. Este método ayuda a los equipos a trabajar más rápido y facilita mantener el software funcionando bien.
Sin embargo, probar estos microservicios de extremo a extremo (E2E) puede ser complicado porque trabajan juntos de maneras que no siempre son obvias. Cuando los testers miran un sistema a través de la interfaz de usuario, pueden pensar que están probando todo, pero no siempre es cierto. Pueden pasar por alto algunas partes del sistema que necesitan ser probadas porque esas partes están ocultas.
En este artículo, vamos a hablar sobre una nueva forma de medir cuánto del sistema está cubierto por pruebas. Este método ayuda a los testers a asegurarse de que todas las partes importantes de su software sean revisadas, para que puedan encontrar problemas antes de que lo hagan los usuarios.
¿Qué es la Prueba de Extremo a Extremo?
La prueba de extremo a extremo es cuando los testers revisan todo el sistema de software de principio a fin. Es como observar todo el camino que toma un usuario al usar una aplicación de software. Los testers quieren ver si todo funciona correctamente juntos y si todas las partes del software hacen lo que se supone que deben hacer.
En un sistema con microservicios, los usuarios no interactúan directamente con cada servicio. En su lugar, usan una interfaz de usuario que se conecta a varios servicios detrás de cámaras. Esto hace que sea difícil para los testers saber si están cubriendo todos los servicios con sus pruebas, especialmente si no pueden ver esos servicios.
Los Retos de Probar Microservicios
Probar microservicios se ha vuelto necesario debido a su creciente popularidad. Sin embargo, esto trae consigo un conjunto de desafíos:
Naturaleza Distribuida: Los microservicios a menudo están distribuidos en diferentes máquinas o sistemas, lo que dificulta llevar un seguimiento de lo que hace cada servicio y cómo interactúan.
Interacciones Complejas: Los servicios pueden depender unos de otros de maneras complejas. Entender cómo funcionan estas interdependencias es vital para realizar pruebas efectivas.
Detalles Ocultos: Cuando los testers miran la interfaz de usuario, no pueden ver todos los servicios que están involucrados en una transacción. Comportamientos importantes pueden pasarse por alto, lo que lleva a pruebas incompletas.
Múltiples Puntos Finales: Cada servicio puede tener varios puntos finales que necesitan ser probados. Los testers necesitan una manera de asegurarse de que todos los puntos finales relevantes estén cubiertos en sus pruebas.
Debido a estos desafíos, confiar solo en pruebas manuales puede llevar a pasar por alto algunos detalles. Los testers necesitan mejores herramientas y métodos para evaluar y mejorar su cobertura de pruebas.
Pruebas de extremo a extremo
Evaluando la Cobertura dePara ayudar a los testers, proponemos nuevas métricas para medir cuánto del sistema de servicios está cubierto por pruebas E2E. Estas métricas darán a los testers una visión más clara de qué partes del sistema están siendo probadas y cuáles se han quedado fuera.
Métricas Propuestas
Cobertura de Puntos Finales de Microservicio: Esto mide cuántos puntos finales en un servicio particular están cubiertos por pruebas. Ayuda a los testers a entender si están revisando a fondo cada servicio.
Cobertura de Puntos Finales de Casos de Prueba: Esto indica cuántos puntos finales está cubriendo cada caso de prueba. Muestra cuán efectiva es cada prueba al verificar el sistema.
Cobertura Completa de la Suite de Pruebas: Esto observa la cobertura general de todos los casos de prueba juntos. Determina cuántos puntos finales únicos de servicio están cubiertos por todas las pruebas.
Estas métricas pueden dar una imagen más clara del panorama de pruebas y ayudar a identificar áreas que necesitan más atención.
Cómo Calcular Estas Métricas
Calcular estas métricas requiere recopilar datos tanto del código como de las pruebas. Así es como funciona generalmente:
Paso 1: Extraer Puntos Finales del Código
Miramos dentro del código fuente del sistema para identificar todos los puntos finales que cada microservicio proporciona. Esto se hace con herramientas diseñadas para analizar código y encontrar detalles específicos sobre cada punto final, como su ruta y métodos HTTP.
Paso 2: Extraer Puntos Finales de los Registros de Prueba
Luego, ejecutamos las pruebas y rastreamos qué puntos finales se llaman durante la ejecución. Esto implica revisar los registros generados durante las pruebas para ver qué puntos finales fueron accedidos.
Paso 3: Asociar y Calcular Cobertura
Una vez que tenemos ambos conjuntos de datos, podemos asociar los puntos finales llamados durante las pruebas con los definidos en el código. Esto nos permite calcular la cobertura para cada métrica.
Paso 4: Visualizar los Resultados
Finalmente, es importante visualizar los resultados para que los testers puedan entender fácilmente lo que significan. Podríamos presentarlos como listas que muestran qué puntos finales están cubiertos, o podríamos usar gráficos para mostrar las relaciones entre los servicios y su cobertura.
Ejemplo de Estudio de Caso
Para mostrar cómo funciona este enfoque, veamos un estudio de caso donde aplicamos estas métricas a un sistema de código abierto.
Establecimos un sistema de reservas de boletos de tren basado en microservicios, que está compuesto por varios servicios independientes que se comunican a través de APIs. Ejecutamos una serie de pruebas en este sistema usando Selenium, una herramienta popular para automatizar aplicaciones web.
Al aplicar nuestras métricas propuestas, pudimos evaluar la cobertura de estas pruebas de manera efectiva:
Cobertura de Puntos Finales de Microservicio: Descubrimos que algunos servicios tenían todos sus puntos finales probados, mientras que otros tenían un número significativo de puntos finales sin probar.
Cobertura de Puntos Finales de Casos de Prueba: Las pruebas variaban en efectividad. Algunas cubrieron muchos puntos finales, mientras que otras apenas tocaron algunos.
Cobertura Completa de la Suite de Pruebas: La cobertura general del sistema fue menor de lo esperado, mostrando que había muchas áreas que necesitaban más pruebas.
Este estudio de caso ilustró la necesidad de mejores estrategias de prueba y cómo nuestras métricas pueden ayudar a identificar lagunas en la cobertura.
Importancia de Probar en Microservicios
Probar es una parte vital del desarrollo de software, especialmente en arquitecturas de microservicios. Asegurarse de que cada servicio esté adecuadamente probado contribuye a la calidad y confiabilidad general del sistema.
Al aplicar las métricas que propusimos, las organizaciones pueden:
Identificar Lagunas: Descubrir qué servicios no están siendo adecuadamente probados y abordarlos.
Mejorar la Calidad de Pruebas: Enfocarse en crear nuevos casos de prueba para los puntos finales que actualmente carecen de cobertura, para que todas las partes del sistema sean evaluadas.
Asegurar Confiabilidad: Mejorar la estabilidad del sistema al reducir la probabilidad de que se escapen errores.
Optimizar el Desarrollo: Facilitar que los equipos se adapten a los cambios en el sistema al asegurarse de que todas las modificaciones sean probadas correctamente.
Desafíos y Consideraciones
Si bien nuestro enfoque ofrece muchos beneficios, todavía existen ciertos desafíos:
Limitaciones de Herramientas: Algunos sistemas pueden no soportar ciertas herramientas o métodos, lo que dificulta reunir los datos necesarios.
Complejidad de Pruebas: A medida que los sistemas crecen, gestionar las pruebas puede volverse complicado. Mantener un seguimiento de todas las interacciones es esencial para determinar la cobertura con precisión.
Sistemas en Cambio: Los sistemas suelen evolucionar con el tiempo. Asegurarse de que las métricas de cobertura sigan siendo relevantes durante los cambios puede ser un desafío.
Cuestiones Culturales: Fomentar una mentalidad de prueba entre desarrolladores y gerentes puede requerir esfuerzo y educación.
Asignación de Recursos: Las organizaciones pueden necesitar invertir tiempo y recursos en mejorar sus estrategias de prueba, lo que puede ser difícil en entornos de ritmo rápido.
A pesar de estos desafíos, adoptar mejores estrategias de prueba puede mejorar significativamente la calidad de las aplicaciones de microservicios.
Direcciones Futuras
Mirando hacia adelante, hay varias áreas para la exploración futura con respecto a las métricas que hemos desarrollado y su aplicación:
Integración con Pipelines CI/CD: Podríamos integrar nuestro enfoque en flujos de trabajo de integración continua y entrega continua (CI/CD). Esto automatizaría el proceso de medir la cobertura de pruebas a medida que ocurren cambios en el código.
Expandir Métricas: Planeamos agregar más métricas que se enfoquen en diferentes aspectos de las pruebas, como cuán bien las pruebas cubren diferentes caminos o escenarios de usuario.
Comunidad y Colaboración: Fomentar discusiones y colaboración dentro de la comunidad de desarrolladores para compartir ideas y experiencias relacionadas con la prueba de microservicios.
Estudios de Caso y Aplicaciones del Mundo Real: Realizar más estudios de caso en varios entornos para validar la efectividad de nuestro enfoque y ajustarlo según experiencias del mundo real.
Adaptación a Diferentes Marcos: Explorar maneras de aplicar nuestros métodos a varios lenguajes de programación y marcos para ampliar su aplicabilidad.
Conclusión
En conclusión, probar microservicios de manera efectiva requiere nuevas estrategias y herramientas. Las métricas que hemos introducido para evaluar la cobertura de pruebas de extremo a extremo ofrecen una forma de asegurarse de que todas las partes de un sistema sean evaluadas adecuadamente. Al enfocarnos en los puntos finales y en cómo se estructuran las pruebas, podemos ayudar a los equipos a identificar lagunas y mejorar la confiabilidad del software que producen.
El mundo de los microservicios sigue creciendo, y también lo hace la necesidad de estrategias de prueba robustas. Adoptar los métodos discutidos puede llevar a una mejor calidad de software, mejoras en la experiencia del usuario y un mayor éxito general en proyectos de software. Las organizaciones que estén dispuestas a invertir en pruebas adecuadas probablemente verán recompensas sustanciales en términos de confiabilidad y satisfacción del usuario.
Título: End-to-End Test Coverage Metrics in Microservice Systems: An Automated Approach
Resumen: Microservice architecture gains momentum by fueling systems with cloud-native benefits, scalability, and decentralized evolution. However, new challenges emerge for end-to-end (E2E) testing. Testers who see the decentralized system through the user interface might assume their tests are comprehensive, covering all middleware endpoints scattered across microservices. However, they do not have instruments to verify such assumptions. This paper introduces test coverage metrics for evaluating the extent of E2E test suite coverage for microservice endpoints. Next, it presents an automated approach to compute these metrics to provide feedback on the completeness of E2E test suites. Furthermore, a visual perspective is provided to highlight test coverage across the system's microservices to guide on gaps in test suites. We implement a proof-of-concept tool and perform a case study on a well-established system benchmark showing it can generate conclusive feedback on test suite coverage over system endpoints.
Autores: Amr Elsayed, Tomas Cerny, Jorge Yero Salazar, Austin Lehman, Joshua Hunter, Ashley Bickham, Davide Taibi
Última actualización: 2023-08-17 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2308.09257
Fuente PDF: https://arxiv.org/pdf/2308.09257
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.
Enlaces de referencia
- https://www.springer.com/gp/computer-science/lncs
- https://www.selenium.dev/
- https://www.elastic.co
- https://skywalking.apache.org/docs/
- https://scholar.google.com/scholar?hl=en&as_sdt=0%2C44&q=microservice+testing&btnG=
- https://scholar.google.com/scholar?hl=en&as_sdt=0%2C44&q=microservice+test+degradation&btnG=
- https://scholar.google.com/scholar?hl=en&as_sdt=0%2C44&q=microservice+testing+practices&btnG=&oq=microservice+testing+pract
- https://scholar.google.com/scholar?hl=en&as_sdt=0%2C44&q=microservice+test+management&btnG=&oq=microservice+test+mana
- https://swagger.io
- https://developer.mozilla.org/en-US/docs/Glossary/Base64
- https://github.com/cloudhubs/test-coverage-backend
- https://github.com/javaparser/javaparser
- https://aws.amazon.com/what-is/elk-stack
- https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html
- https://github.com/cloudhubs/test-coverage-frontend
- https://github.com/cloudhubs/graal-prophet-utils
- https://github.com/cloudhubs/graal_mvp
- https://skywalking.apache.org/docs
- https://github.com/cloudhubs/train-ticket/tree/v1.0.1
- https://github.com/cloudhubs/train-ticket/tree/1.0.1-release
- https://github.com/cloudhubs/microservice-tests
- https://zenodo.org/record/8055457
- https://github.com/FudanSELab/train-ticket
- https://www.springer.com/lncs