A medida que las empresas crecen, sus productos se vuelven cada vez más complejos, por lo que es esencial aplicar pruebas rigurosas y garantizar la estabilidad. Okta no es ajeno a ese desafío. Ejecutamos cientos de miles de pruebas en cada cambio en nuestro sistema de integración continua (CI) para detectar problemas al principio del ciclo de vida del desarrollo.
Nuestra escala operativa es enorme y nuestros servicios reciben más de 500,000 confirmaciones al año. Sin embargo, incluso nosotros nos hemos enfrentado al problema de la inestabilidad de las pruebas en nuestra base de código monolítica. Nuestras confirmaciones de la línea principal tenían una tasa de aprobación de menos del 40% en la primera ejecución de una confirmación a partir de pruebas inestables. Necesitábamos un método confiable para averiguar cuándo surgía un problema, desbloquear a otros ingenieros y contactar de inmediato a los equipos correspondientes para investigar.
El proceso manual
Históricamente, una solución parcial a este problema era tener a un ingeniero de guardia vigilando si las confirmaciones en nuestra rama principal pasaban o no las pruebas en nuestra CI. Si una prueba fallaba en main, teníamos que analizar los registros y los stack traces para determinar la validez de un fallo y luego consultar con el equipo apropiado.
Cada lunes, el ingeniero de guardia revisaba las fallas de la semana anterior, compilaba manualmente una lista de tickets de Jira, recopilaba datos sobre las fallas y enviaba un correo electrónico a los equipos de ingeniería. Sin embargo, este enfoque tenía fallas obvias.
- Un fallo podría pasarse por alto o no detectarse debido a un error humano.
- Consumía mucho tiempo, ya que el ingeniero tenía que averiguar la causa raíz y, luego, descubrir quién tenía el conocimiento y el contexto para ayudar a solucionar el problema.
- El ingeniero de guardia tuvo que dedicar muchas horas a la capacitación. Cumplir con esta función nos cuesta cuatro meses de tiempo de ingeniería cada año.
- No era confiable ni escalable.
- Se requiere mucho conocimiento colectivo. Por ejemplo, existen numerosas consultas SQL heredadas y unidas a mano para descubrir fallas
¿Qué es una falla urgente?
Para que este proceso sea confiable, necesitábamos una forma estricta de determinar qué constituía una interrupción urgente o no urgente. Nos referiremos al primer escenario como P0. Quizás se pregunte por qué no abordamos cada prueba que falló en la principal de inmediato. Eso sucedería en un entorno ideal (al que ahora estamos más cerca), pero no sorprende que, de los cientos de miles de pruebas que ejecutamos, bastantes pruebas fallen de manera inconsistente (se dice que son "flaky"). Sería irrazonable e impráctico decirles a los ingenieros de otros equipos que dejen todo y arreglen cientos de pruebas flaky.
Nuestra solución inmediata fue encontrar P0s basándonos en un criterio de porcentaje de la frecuencia con la que fallaba una prueba. Sin embargo, este es un indicador rezagado y se produciría un retraso significativo en la notificación si una prueba se interrumpiera por completo. Necesitábamos una forma de detectar las roturas reales de inmediato y resolver incrementalmente las pruebas inestables. Después de crear un programa para ejecutar innumerables simulaciones, finalmente llegamos a una solución.
Nuestra solución inicial: Levantar un ticket para un método de prueba como P0 si falla en dos commits en las últimas cinco ejecuciones o si falla más del 25% de las veces en al menos 100 ejecuciones.
Ahora que hemos definido claramente el alcance del problema, finalmente podemos automatizarlo.
Presentamos AutoGuardian
AutoGuardian es nuestro servicio que monitorea periódicamente las pruebas para gestionar los fallos. A continuación, un gráfico muestra un breve resumen de sus responsabilidades.
Los beneficios de AutoGuardian han sido transformadores, mejorando significativamente el flujo de trabajo diario de nuestro equipo. Identifica e informa problemas, agiliza la comunicación y se conecta a un servicio separado que evita que nuestra CI ejecute pruebas fallidas para otros desarrolladores.
La exclusión de pruebas es fundamental para garantizar que los desarrolladores no se vean impedidos de fusionar debido a pruebas defectuosas y para ayudarnos a reducir los costos al evitar ejecuciones innecesarias en pruebas que ya sabemos que son defectuosas. En resumen, AutoGuardian permite a nuestro equipo centrarse en el progreso en lugar de empantanarse en la solución de problemas, lo que hace que nuestro proceso de desarrollo sea más eficiente y eficaz.
AutoGuardian ahora es un servicio crítico del que dependemos, que ofrece un ahorro de costos anual estimado de más de $1,000,000. Este fue solo el diseño inicial. Desde entonces, lo hemos mejorado aún más agregando la agrupación de problemas que agrupa los problemas por seguimientos de pila similares, el endurecimiento automático de los criterios y la generación de informes de datos mejorada. Como resultado, ahora estamos detectando más de un 1900% más de pruebas inestables en comparación con antes de AutoGuardian, lo que aumenta nuestra tasa de aprobación de la línea principal a más del 80%. Esta transformación agiliza el proceso de desarrollo y ayuda a reducir los tiempos de ejecución de confirmación en un 50%, lo que permite a nuestros ingenieros centrarse en la innovación en lugar de solucionar problemas, fomentando una experiencia de desarrollador más productiva.
Revolucione sus procesos con la automatización
La mayoría de las empresas de tecnología tienen alguna forma de proceso de guardia, y hemos proporcionado solo un ejemplo de por qué debe esforzarse por automatizar lo más posible. Cuando algo se tiene que hacer manualmente, siempre pregúntese a sí mismo y a los demás: “¿Por qué?” Adoptar la automatización ahorra un valioso tiempo de desarrollo y mejora la resiliencia, la fiabilidad y la seguridad de su producto.
¿Tiene preguntas sobre esta publicación de blog? Contáctenos en eng_blogs@okta.com. Explore más Blogs de Ingeniería perspicaces de Okta para ampliar sus conocimientos.
¿Listo para unirte a nuestro apasionado equipo de ingenieros excepcionales? Visita nuestra página de empleos.