Un Flaky Test, o 'prueba inestable', es una prueba automatizada que no produce un resultado determinista. Es decir, para un conjunto idéntico de código fuente y configuración, la prueba puede pasar en una ejecución y fallar en otra, o viceversa, sin que haya habido cambios explícitos. Esta inconsistencia se debe a dependencias externas no controladas, condiciones de carrera, problemas de concurrencia, inicialización incorrecta del estado, interacción con sistemas externos con latencia variable, o temporizaciones imprecisas. Su naturaleza no determinista dificulta la identificación de fallos reales y socava la confianza en el sistema de integración continua.
Los Flaky Tests son un problema común en una amplia gama de sistemas y herramientas de testing. Por ejemplo, en entornos de microservicios, las pruebas de integración que interactúan con servicios dependientes (bases de datos, APIs externas, colas de mensajes) son propensas a la inestabilidad debido a la latencia de red o la disponibilidad de los servicios. Herramientas como JUnit, NUnit, Pytest o Go's testing package pueden ejecutar pruebas inestables. En sistemas de CI/CD como Jenkins, GitLab CI, GitHub Actions o CircleCI, la detección de Flaky Tests a menudo implica reintentos automáticos o análisis de historial de ejecuciones. Frameworks de testing de UI como Selenium o Cypress también son susceptibles a Flaky Tests debido a la variabilidad en la carga de la página, animaciones o tiempos de renderizado del DOM.
Para un Arquitecto de Sistemas, la existencia de Flaky Tests es una señal de alerta crítica. Afectan directamente la velocidad de desarrollo, la calidad del software y la moral del equipo. Estratégicamente, un alto número de pruebas inestables puede llevar a los desarrolladores a ignorar los fallos del CI/CD, retrasando la detección de errores reales y aumentando el riesgo de regresiones en producción. Los trade-offs incluyen la inversión en infraestructura de testing más robusta (entornos aislados, mocks/stubs), la adopción de patrones de diseño que faciliten la testabilidad (inyección de dependencias), y la implementación de herramientas para identificar y aislar Flaky Tests (ej. análisis estadístico de ejecuciones). Ignorar los Flaky Tests puede resultar en un 'broken window effect' en la calidad del código y la cultura de ingeniería, mientras que abordarlos proactivamente mejora la fiabilidad del ciclo de desarrollo y la confianza en las entregas.