¿Qué Es el Testing Ad Hoc?
El testing ad hoc es testing no planificado e informal impulsado por la intuición, experiencia y conocimiento del tester sobre la aplicación. No hay casos de prueba preescritos, documentación formal ni enfoque estructurado.
El término “ad hoc” literalmente significa “para este propósito” — las pruebas se inventan en el momento para la situación inmediata.
Cuándo el Testing Ad Hoc Agrega Valor
Verificaciones rápidas de sanidad. Un desarrollador termina un fix y pide a QA que “eche un vistazo rápido.”
Llenar gaps. Después de ejecutar todos los test cases con scripts, pasas 15 minutos explorando áreas no cubiertas por pruebas formales.
Exploración de nuevos integrantes. Un nuevo miembro prueba la aplicación sin entrenamiento para ver si la UI es intuitiva.
Smoke post-deployment. Después de desplegar a staging, verificas rápidamente los flujos críticos.
Limitaciones del Testing Ad Hoc
- No repetible — Sin documentación, no puedes re-ejecutar las mismas pruebas
- No medible — No puedes reportar cobertura o progreso
- Depende de la habilidad — Testers experimentados encuentran bugs; los inexpertos pierden tiempo
- No trazable — No puedes demostrar qué se probó
- Bugs difíciles de reportar — Sin pasos documentados, reproducir es complicado
¿Qué Es el Monkey Testing?
El monkey testing consiste en proporcionar entradas aleatorias, inesperadas o inválidas a una aplicación para verificar si se cuelga o se comporta inesperadamente. El nombre viene de la idea de un mono presionando teclas al azar en un teclado.
Dumb Monkey Testing
Un dumb monkey genera eventos completamente aleatorios sin comprensión de la aplicación: taps en pantalla, entrada de teclado, swipes, navegación aleatoria.
Fortaleza: Encuentra crashes causados por combinaciones de entrada completamente inesperadas.
Debilidad: Muy ineficiente — la mayoría de entradas aleatorias son sin sentido.
Smart Monkey Testing
Un smart monkey tiene conocimiento de la aplicación: conoce formatos de entrada válidos e inválidos, entiende la estructura de navegación, puede simular comportamiento realista con errores ocasionales.
Fortaleza: Mucho más eficiente. Alcanza más profundidad en la aplicación.
Debilidad: Requiere esfuerzo de configuración.
Comparación
| Aspecto | Dumb Monkey | Smart Monkey |
|---|---|---|
| Esfuerzo de setup | Ninguno | Moderado a alto |
| Conocimiento de la app | Ninguno | Parcial/completo |
| Eficiencia | Muy baja | Moderada a alta |
| Profundidad | Superficial | Profunda |
| Tipos de bugs | Crashes por entrada aleatoria | Errores de lógica, problemas de estado |
| Reproducibilidad | Muy difícil | Mejor (rutas registradas) |
Herramientas de Monkey Testing
Android Monkey (Built-in)
# Enviar 10,000 eventos aleatorios
adb shell monkey -p com.tu.app -v 10000
# Con throttle y tipos de eventos específicos
adb shell monkey -p com.tu.app \
--throttle 300 \
--pct-touch 40 \
--pct-motion 25 \
--pct-nav 15 \
-v -v 50000
Gremlins.js (Aplicaciones Web)
// Uso básico
gremlins.createHorde().unleash();
// Configuración personalizada
gremlins.createHorde()
.gremlin(gremlins.species.clicker())
.gremlin(gremlins.species.formFiller())
.gremlin(gremlins.species.scroller())
.gremlin(gremlins.species.typer())
.unleash();
Otras Herramientas
| Herramienta | Plataforma | Tipo |
|---|---|---|
| Android Monkey | Android | Dumb monkey |
| Gremlins.js | Web | Dumb/configurable |
| Netflix Chaos Monkey | Infraestructura | Inyección aleatoria de fallas |
| AFL | Cualquiera (entrada binaria) | Smart fuzzer |
| Burp Suite Intruder | Web APIs | Smart monkey para seguridad |
Monkey Testing vs. Fuzz Testing
Monkey testing genera interacciones aleatorias de usuario (clics, taps, navegación). Simula un usuario caótico.
Fuzz testing (fuzzing) genera datos de entrada aleatorios o malformados (formatos de archivo, paquetes de red, payloads API). Apunta al procesamiento de datos.
Ambos buscan crashes y vulnerabilidades, pero operan en niveles diferentes.
Ejercicio: Realiza Monkey Testing y Documenta Hallazgos
Parte 1: Monkey Testing Manual
Elige cualquier aplicación web accesible. Realiza 15 minutos de “monkey humano”:
- Haz clic en elementos aleatorios rápidamente
- Ingresa texto aleatorio (caracteres especiales, emoji, strings muy largos) en cada campo
- Usa los botones atrás/adelante en momentos inesperados
- Intenta enviar formularios con campos obligatorios vacíos
- Abre múltiples tabs e interactúa simultáneamente
- Redimensiona el navegador rápidamente
Documenta cada crash, error o comportamiento inesperado.
Parte 2: Monkey Testing con Herramienta
En un ambiente de prueba, inyecta Gremlins.js y ejecútalo 5 minutos. Documenta: ¿Encontró crashes? ¿Errores en consola? ¿Glitches de UI?
Parte 3: Análisis
- ¿Qué tipos de bugs encontró el monkey testing que el testing estructurado probablemente no detectaría?
- ¿Cuáles son los desafíos de reproducir los bugs encontrados?
- ¿En qué contexto recomendarías incluir monkey testing en la estrategia?
Pista
Para la Parte 1, enfócate en interacciones rápidas e inesperadas. Para la Parte 3, considera el costo-beneficio: monkey testing es barato de ejecutar pero costoso de investigar.Solución
Parte 1: Hallazgos típicos
- Errores de consola JavaScript al hacer clic durante transiciones de página
- Elementos de UI que se superponen al redimensionar rápidamente
- Bypass de validación de formularios al enviar rápidamente
- Estado obsoleto al modificar en múltiples tabs
- Layouts rotos con strings de entrada muy largos
Parte 2: Resultados de Gremlins.js
- Múltiples errores de consola al hacer clic en elementos no interactivos
- Modales abriéndose y cerrándose rápidamente, ocasionalmente quedándose atascados
- Campos de formulario llenos con datos basura que activan validaciones
Parte 3:
- Race conditions de interacciones rápidas, crashes de combinaciones inesperadas, bugs de manejo de estado por navegación inusual, issues de robustez de UI
- La secuencia exacta de acciones es desconocida. Solución: Usar herramientas de desarrollo para capturar errores y registrar acciones
- Apps móviles: Android Monkey en CI. Apps web consumer-facing: Antes de releases de producción. Siempre como suplemento, nunca como método principal
Puntos Clave
- El testing ad hoc es no planificado y basado en intuición — útil para verificaciones rápidas pero no trazable ni repetible
- El monkey testing genera entradas aleatorias para encontrar crashes y excepciones no manejadas
- Los dumb monkeys generan eventos puramente aleatorios; los smart monkeys entienden la aplicación
- Herramientas como Android Monkey y Gremlins.js automatizan la generación de entradas aleatorias
- El principal desafío es la reproducibilidad
- El monkey testing es más valioso como suplemento al testing estructurado, no como reemplazo
- El fuzz testing es el primo del monkey testing enfocado en datos