práctica · intermedio · 1 min de lectura
Mutation Testing
El mutation testing introduce bugs artificiales en el código para verificar que los tests los detecten, midiendo la calidad de la suite de tests.
No requiere conocimientos previos.
Alcance en breve
Cubre
- Mutation Testing as a concept
No cubre
- implementation details
Supone
- The reader understands relevant fundamentals.
Resumen
Un mutation testing tool modifica el código fuente —cambia un > por >=, un + por -, elimina una condición— generando "mutantes". Luego corre la suite de tests. Si un test falla, el mutante fue "cazado". Si ningún test falla, el mutante sobrevive —hay un hueco en la cobertura de tests—.
A diferencia de la cobertura de código —que te dice qué líneas se ejecutan—, el mutation testing te dice si los tests realmente verifican el comportamiento. Un test que ejecuta una línea sin asserts la cubre pero no la prueba.
Alcance y supuestos
Cubre mutation testing, la diferencia con code coverage y herramientas. Asume familiaridad con testing.
Modelo mental
Un inspector que deliberadamente rompe una máquina —saca un tornillo, desconecta un cable— y verifica que la alarma suene. Si la alarma no suena, el sistema de detección de fallas tiene un punto ciego.
Uso práctico
- ✅ Código crítico donde la cobertura no alcanza para generar confianza.
- ❌ Proyectos con suites de tests lentas: mutation testing corre los tests cientos de veces.
Ejemplo trabajado: mutante sobreviviente
Stryker cambia if (age >= 18) por if (age > 18). El test solo verifica age = 25 y age = 15, pero no age = 18. El mutante sobrevive: el test suite no cubre el caso borde. Se agrega un test con age = 18 y el mutante es cazado.
Evidencia
- Stryker (JS/TS) y PIT (Java) son las herramientas principales de mutation testing.
Fuentes citadas
- Wikipedia, Unit testing (Síntesis, 21-07-2026)