Mejora de la confiabilidad y eficiencia de las pruebas en canalizaciones de CI/CD
Una prueba inestable es una prueba que a veces pasa y a veces falla sin ningún cambio en el código que se está probando. Estas pruebas pueden resultar particularmente problemáticas porque socavan la confiabilidad del conjunto de pruebas.
Considere que su proceso de CI/CD está configurado de manera que solo después de pasar la compilación, solo si su código pasa un conjunto de casos de prueba predefinidos.
En una situación ideal, debe haber establecido la prioridad para cada caso de prueba y asumir que la última base de código pasa al menos un porcentaje de casos.
Pero debido a los casos de prueba inestables, que siguen fallando, ya que pueden estar obsoletos o el caso de uso ha cambiado, su caso de prueba falla y fusionar la solicitud de extracción se convierte en una pesadilla. En lugar de reducir el porcentaje de casos aprobados, deberíamos considerar renovar esos casos de prueba.
Resultados de pruebas impredecibles: Las pruebas inestables causan imprevisibilidad al pasar algunas veces y otras fallar, aunque el código no haya cambiado. Esta aleatoriedad puede dificultar la confianza en los resultados de las pruebas.
Depuración compleja: rastrear la causa raíz de una prueba incorrecta puede ser un desafío porque es posible que el problema no se reproduzca de manera consistente, lo que dificulta su identificación y solución.
Tiempo y recursos perdidos: los desarrolladores pueden dedicar una cantidad significativa de tiempo a volver a ejecutar pruebas, investigar falsos positivos y depurar problemas que en realidad no están relacionados con la funcionalidad del código.
Impacto en la integración continua (CI): Las pruebas inestables pueden interrumpir los procesos de integración continua, lo que genera fallos de compilación innecesarios y reduce la eficiencia general de los procesos de prueba automatizados.
Falsa confianza o desconfianza: Las pruebas inestables pueden crear una falsa confianza cuando se aprueban esporádicamente o causar desconfianza en el conjunto de pruebas cuando fallan de manera impredecible, lo que hace que sea más difícil confiar en los resultados de las pruebas.
Mejores prácticas para mitigar: para reducir las pruebas inestables, los desarrolladores pueden burlarse de las dependencias externas, usar datos deterministas, asegurarse de que las pruebas estén aisladas y evitar depender del tiempo o el orden de ejecución.
Detección automatizada: implementar herramientas automatizadas que detecten pruebas defectuosas ejecutando pruebas varias veces y comparando resultados puede ayudar a identificar y abordar las debilidades en las primeras etapas del ciclo de desarrollo.
Aislamiento de prueba: garantizar que cada prueba se ejecute de forma completamente aislada, sin depender de estados compartidos o factores externos, puede reducir significativamente las posibilidades de descamación.
Mantenimiento regular: revisar y refactorizar periódicamente el conjunto de pruebas para eliminar o corregir pruebas deficientes ayuda a mantener la integridad y confiabilidad del proceso de prueba a lo largo del tiempo.
Jenkins, CircleCI, Travis CI: herramientas de integración continua/implementación continua (CI/CD) como estas se pueden configurar para volver a ejecutar pruebas que fallan, lo que ayuda a identificar pruebas inestables. A menudo tienen complementos o soporte integrado para manejar pruebas inestables.
Docker: las empresas utilizan Docker para crear entornos aislados para ejecutar pruebas. Esto garantiza que las pruebas tengan un entorno limpio y consistente cada vez que se ejecutan, lo que reduce la descamación causada por las diferencias ambientales.
Máquinas virtuales (VM): similar a Docker, las VM se pueden utilizar para garantizar que las pruebas se ejecuten en un entorno controlado y aislado, minimizando la interferencia de otros procesos o dependencias.
Análisis estadístico mediante aprendizaje automático: algunos sistemas avanzados utilizan el aprendizaje automático para analizar los resultados de las pruebas e identificar patrones indicativos de pruebas deficientes. Esto puede ayudar a identificar y abordar de forma proactiva la descamación.
Políticas de revisión de código y ganchos de control de versiones: la implementación de políticas estrictas de revisión de código que incluyan comprobaciones de posibles fuentes de inestabilidad puede evitar que se introduzcan pruebas inestables.
El uso de ganchos de confirmación previa u otros mecanismos de control de versiones para ejecutar pruebas de manera controlada antes de que se fusionen los cambios puede detectar pruebas deficientes temprano.
Volver a ejecutar pruebas fallidas: Google tiene una política en la que vuelve a ejecutar pruebas que no logran determinar si la falla es consistente. Esto ayuda a identificar pruebas inestables. También cuentan con herramientas e infraestructura internas para gestionar y mitigar la inestabilidad en sus amplios conjuntos de pruebas.
Aislamiento de pruebas: Google enfatiza la importancia del aislamiento de las pruebas para garantizar que las pruebas no interfieran entre sí, lo cual es fundamental para reducir la descamación.
Análisis e informes de pruebas: Microsoft utiliza herramientas de informes y análisis de pruebas detalladas para realizar un seguimiento de las pruebas inestables. Al analizar los resultados de las pruebas a lo largo del tiempo, pueden identificar patrones y señalar pruebas deficientes.
Poner en cuarentena pruebas inestables: Microsoft a veces pone en cuarentena las pruebas inestables, separándolas del conjunto de pruebas principal hasta que se solucionan para evitar que afecten los resultados generales de las pruebas.
3. Facebook:
Detox: Facebook desarrolló una biblioteca de código abierto llamada Detox para probar sus aplicaciones móviles. Detox garantiza que las pruebas se ejecuten en un estado y un entorno consistentes, lo que reduce la inestabilidad causada por operaciones asincrónicas y otros problemas de sincronización.
Pruebas continuas: Facebook integra pruebas continuas en su proceso de desarrollo, utilizando herramientas para volver a ejecutar pruebas automáticamente e identificar comportamientos inusuales en las primeras etapas del ciclo de desarrollo.
4. Netflix:
Ingeniería del caos: Netflix emplea prácticas de ingeniería del caos para probar la resiliencia de sus sistemas. Al introducir fallas e interrupciones intencionalmente, pueden identificar pruebas deficientes y mejorar la solidez de sus pruebas y sistemas.
Reintentos automatizados: Netflix utiliza mecanismos de reintento automatizados dentro de sus canalizaciones de CI/CD para volver a ejecutar las pruebas que fallan de forma intermitente, lo que ayuda a identificar y administrar pruebas inestables.
5. LinkedIn:
Herramientas de gestión de pruebas inestables: LinkedIn ha desarrollado herramientas específicas para gestionar pruebas inestables. Estas herramientas ayudan a realizar un seguimiento de las pruebas inestables, brindan visibilidad sobre su ocurrencia y priorizan su resolución.
Estandarización del entorno de prueba: LinkedIn se centra en estandarizar los entornos de prueba para reducir la variabilidad y garantizar que las pruebas se ejecuten en condiciones consistentes, lo que ayuda a mitigar la inestabilidad.
Apoorv Tomar es desarrollador de software y bloguea en **Mindroast. Puedes conectarte en las redes sociales. Suscríbase al **boletín informativo para obtener el contenido seleccionado más reciente.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3