¿Qué Es el Testing Dinámico?
El testing dinámico es el proceso de evaluar software ejecutándolo. Proporcionas entradas al sistema en ejecución, este las procesa, y observas si las salidas y comportamientos reales coinciden con lo esperado.
Cada vez que haces clic en un botón de una aplicación y verificas si hizo lo correcto, estás realizando testing dinámico. Cada vez que un framework de pruebas automatizadas lanza un navegador, llena un formulario y verifica el resultado, eso es testing dinámico.
La palabra clave es ejecución. Si el código se ejecuta, es dinámico. Si solo lees o analizas el código sin ejecutarlo, es estático.
Cómo el Testing Dinámico Complementa al Estático
Testing estático y dinámico no son competidores — son socios. Cada uno detecta defectos que el otro no puede.
El testing estático encuentra: Violaciones de estándares, código inalcanzable, potenciales problemas de null, patrones de seguridad, ambigüedades en requisitos.
El testing dinámico encuentra: Fallas reales en runtime, cuellos de botella de rendimiento, fugas de memoria bajo carga, fallas de integración entre componentes, problemas de UX, race conditions.
La Relación Complementaria
Estático vs. Dinámico: Comparación
| Dimensión | Testing Estático | Testing Dinámico |
|---|---|---|
| Ejecución de código | No | Sí |
| Cuándo es posible | Desde la fase de requisitos | Desde la fase de implementación |
| Actividades típicas | Revisiones, walkthroughs, análisis estático | Unit tests, integration tests, system tests |
| Ambiente necesario | Ninguno (solo el artefacto) | Ambiente de ejecución requerido |
| Tipos de defectos | Violaciones de estándares, bugs potenciales | Fallas reales, issues de rendimiento |
| Costo de encontrar defectos | Menor (más temprano en SDLC) | Mayor (requiere ambiente, ejecución) |
| Velocidad de feedback | Rápida (minutos para herramientas) | Varía (segundos para unit, horas para E2E) |
| Puede encontrar issues de runtime | No (solo predichos) | Sí (observados directamente) |
| Verifica requisitos no funcionales | Limitado | Sí (rendimiento, usabilidad, confiabilidad) |
Técnicas de Testing Dinámico
El testing dinámico abarca muchas técnicas que ya has encontrado o encontrarás:
Por conocimiento del código:
- Black-box (Lección 2.27) — Tests basados en requisitos
- White-box (Lección 2.26) — Tests basados en estructura del código
- Grey-box (Lección 2.28) — Tests con conocimiento parcial
Por nivel de testing:
- Unitario, integración, sistema, E2E, aceptación
Por propósito:
- Funcional, rendimiento, seguridad, usabilidad, confiabilidad (Lección 2.25)
Por enfoque:
- Testing con scripts — Casos de prueba prediseñados
- Testing exploratorio (Lección 2.32) — Aprendizaje, diseño y ejecución simultáneos
- Testing ad hoc (Lección 2.33) — No planificado, basado en intuición
Cuándo Iniciar el Testing Dinámico
Un error común es creer que el testing dinámico inicia solo después de construir toda la aplicación. En realidad, debe comenzar tan pronto como exista código ejecutable:
| Fase SDLC | Actividad Dinámica |
|---|---|
| Implementación | Desarrolladores escriben y ejecutan unit tests |
| Integración | Tests de integración verifican interacciones |
| Testing de sistema | QA ejecuta pruebas funcionales y no funcionales |
| UAT | Usuarios de negocio validan en ambiente similar a producción |
| Producción | Smoke tests, monitoreo sintético, chaos engineering |
El Proceso de Testing Dinámico
- Planificar — Identificar qué probar, seleccionar técnicas, preparar datos
- Diseñar — Crear casos de prueba con entradas, pasos y resultados esperados
- Preparar — Configurar ambiente, desplegar build, configurar datos
- Ejecutar — Correr las pruebas, observar resultados reales
- Comparar — Comparar resultados reales con esperados
- Reportar — Documentar: pass, fail o bloqueado
- Re-probar — Después de correcciones, verificar resolución
Ejercicio: Clasifica Actividades de Testing
Para cada actividad, clasifícala como testing estático o dinámico y explica tu razonamiento.
- Un desarrollador ejecuta
pytestpara correr unit tests - Un QA lee una user story para verificar si los criterios de aceptación son claros
- SonarQube escanea un proyecto Java y reporta 15 code smells
- Un tester abre la app web, ingresa credenciales y verifica el login exitoso
- Un equipo realiza un walkthrough de código de un módulo de pagos
- Un test de Playwright navega al checkout y verifica el precio total
- Una herramienta SAST busca API keys hardcodeadas
- Una herramienta de rendimiento envía 1,000 requests concurrentes y mide tiempos
- Un desarrollador lee un diff de PR y comenta sobre el manejo de errores
- Un QA usa Postman para enviar un POST a /users y verifica el status code
- ESLint busca variables no utilizadas en el proyecto
- Un tester instala la app en un dispositivo y prueba el onboarding
Pista
La pregunta clave: "¿Necesita el software estar ejecutándose para esta actividad?" Si sí → dinámico. Si solo se examina un artefacto sin ejecutarlo → estático.Solución
- Dinámico —
pytestejecuta el código y verifica salidas reales. - Estático — El QA lee un documento sin ejecutar software. Es una revisión de requisitos.
- Estático — SonarQube analiza código fuente sin ejecutarlo.
- Dinámico — El tester interactúa con la aplicación en ejecución.
- Estático — Un walkthrough es una actividad de revisión sin ejecución.
- Dinámico — Playwright lanza un navegador, la aplicación se ejecuta.
- Estático — SAST escanea código fuente sin ejecutarlo.
- Dinámico — La herramienta envía requests reales a una aplicación en ejecución.
- Estático — El desarrollador lee código y da feedback sin ejecutar nada.
- Dinámico — Postman envía un request HTTP real a un servidor en ejecución.
- Estático — ESLint lee archivos fuente y aplica reglas sin ejecutar.
- Dinámico — El tester ejecuta la app real en un dispositivo.
Resumen: 1, 4, 6, 8, 10, 12 son dinámicas. 2, 3, 5, 7, 9, 11 son estáticas.
Por Qué Ambos Importan: Ejemplo Real
Considera una función que calcula costos de envío:
Análisis estático podría encontrar: complejidad ciclomática alta, variable no usada, rama siempre verdadera.
Revisión de código podría encontrar: no maneja envío internacional, lógica de descuento contradice los requisitos.
Test unitario dinámico podría encontrar: para un pedido de $49.99, envío gratis aplicado incorrectamente (bug de valor límite).
Test de integración dinámico podría encontrar: el servicio de envío retorna pesos en kilogramos pero la calculadora espera libras.
Cada técnica revela problemas diferentes. Depender de solo una deja vacíos significativos.
Puntos Clave
- El testing dinámico requiere ejecutar el software; el estático no
- Ambos enfoques son esenciales — detectan diferentes tipos de defectos a diferentes costos
- El testing dinámico comienza cuando hay código ejecutable, no solo después de completar la aplicación
- El testing estático detecta issues potenciales más temprano; el dinámico confirma comportamiento real
- Los requisitos no funcionales solo se validan completamente mediante testing dinámico
- Los equipos modernos combinan análisis estático en CI con tests dinámicos en múltiples niveles