Qué es Mutation Testing y por qué cambió mi forma de probar código

Cuando empecé en QA Automation, pensaba que tener tests que “pasan” era suficiente.
Escribía mis automatizaciones, las ejecutaba en CI, y si todo salía verde… misión cumplida, ¿no?

Hasta que conocí el mutation testing.

Este enfoque me abrió los ojos. Me di cuenta de que muchos de mis tests no detectaban fallos reales. Eran decorativos.
A continuación te explico qué es, cómo lo uso y por qué transformó mi manera de evaluar la calidad de las pruebas.


💡 ¿Qué es Mutation Testing?

Mutation testing (o prueba de mutaciones) es una técnica que evalúa la calidad de tus tests introduciendo cambios artificiales (mutaciones) en tu código y viendo si tus tests los detectan.

Un ejemplo simple:

# Código original
def es_par(numero):
    return numero % 2 == 0

# Mutación: cambia el operador
def es_par(numero):
    return numero % 2 != 0

Si tus tests no fallan con ese cambio, significa que no están validando bien ese comportamiento. Y eso es grave.

⚙️ ¿Cómo lo aplico?

Yo utilizo Infection en proyectos PHP con PHPUnit, y también he explorado herramientas como:

  • Mutmut (Python)

  • StrykerJS (JavaScript/TS)

  • P****ITest (Java)

Wor****kflow básico:

  1. Escribo los tests como siempre.

  2. Ejecuto mutation testing en CI o local.

  3. Reviso el “Mutation Score” (porcentaje de mutaciones detectadas).

  4. Refactorizo o refuerzo los tests que no detectaron cambios.

📈 ¿Por qué cambió mi forma de testear?

Antes, me enfocaba solo en la cobertura del código (coverage), pero esto me enseñó que:

  • Tener 100% coverage no significa tener buenos tests.

  • Algunos tests “verdes” no sirven de nada si no detectan errores sutiles.

  • Puedo escribir menos tests pero más efectivos.

Además, me ayudó a identificar código muerto, lógica innecesaria y zonas mal protegidas.


🧠 Consejos si quieres empezar

  1. No lo apliques a todo el código al principio. Empieza por clases críticas.

  2. Integra en tu flujo CI/CD si puedes, con umbrales mínimos.

  3. No te obsesiones con el 100% de detección, pero sí con entender por qué una mutación no fue atrapada.

🚀 Conclusión

Mutation testing me enseñó a pensar más como un atacante del sistema que como un autor de tests.

Hoy no me basta con que mis pruebas pasen.
Quiero que demuestren que pueden fallar cuando el código se rompe, y mutation testing es una de las formas más inteligentes de comprobarlo.

Si nunca lo has probado, te lo recomiendo.
Es desafiante, pero transforma cómo pensás en calidad de verdad.

✉️ ¿Usás mutation testing en tu equipo?
¿Querés que escriba un tutorial paso a paso con Infection o Mutmut?

Déjamelo saber en los comentarios o en LinkedIn 😉

0
Subscribe to my newsletter

Read articles from yury yver ortuño calvo directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

yury yver ortuño calvo
yury yver ortuño calvo