Concurrencia: Pruebas con Jiggle
Las condiciones de carrera se esconden en brechas de tiempo — agitar el orden de ejecución con yields aleatorios y ejecuciones multiplataforma las expone.
Por Qué las Condiciones de Carrera Son Difíciles de Detectar
Los bugs de concurrencia dependen del tiempo: la ventana de carrera puede tener nanosegundos de ancho. Desaparecen bajo un depurador (la observación cambia el tiempo), pasan en tu máquina de desarrollo y explotan en producción bajo carga. Una prueba que pasa 1000 veces consecutivas en una máquina no demuestra seguridad de hilos — demuestra que ese patrón de tiempo particular no activó la carrera. La carrera sigue ahí; simplemente no la agitaste.
La Técnica del Jiggle
Las pruebas con jiggle desestabilizan deliberadamente el orden de ejecución para ampliar las ventanas de carrera: (1) inserta llamadas random.sleep() o thread.yield() en los puntos de cambio de hilo; (2) ejecuta la prueba miles de veces con diferentes semillas; (3) ejecuta en múltiples combinaciones de SO y hardware; (4) varía el número de hilos; (5) usa herramientas de pruebas de estrés. Jiggle automatizado + bucle de aserciones = una prueba de regresión de concurrencia.
Desafío de Código
Añade un arnés de jiggle para exponer la carrera, luego corrígela con un bloqueo.
💡Conclusión clave
Las pruebas con jiggle amplían las ventanas de carrera aleatorizando la planificación de hilos. Combínalas con muchas ejecuciones repetidas y ejecución multiplataforma para detectar bugs de concurrencia que las pruebas determinísticas pierden.
🔧 Algunos ejercicios pueden tener errores. Si algo parece incorrecto, usa el botón Feedback (abajo a la derecha) para reportarlo — nos ayuda a corregirlo rápido.
Pista: El jiggle no encuentra todos los bugs — aumenta la probabilidad de exponer los que existen. Ejecuta pruebas con jiggle miles de veces en diferentes plataformas.
✗ Tu versión