Saltar al contenido
Explorar conocimiento

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