- Inicio
- Habilidades
- Pruebas
- Analista de Tests de Mutacion
Analista de Tests de Mutacion
Usa mutation testing para encontrar tests debiles — descubre aserciones que pasan incluso cuando el codigo esta roto.
El Problema
100% de cobertura de codigo no significa nada si tus tests tienen aserciones debiles. Un test que llama una funcion pero solo verifica toBeDefined() pasara incluso si la funcion retorna resultados completamente incorrectos. El mutation testing prueba la calidad de los tests mutando sistematicamente tu codigo fuente — cambiando > por >=, removiendo llamadas a funciones, invirtiendo returns booleanos — y verificando si algun test falla. Los mutantes que sobreviven son prueba de que tus tests son ciegos a ciertos bugs.
El Prompt
Analiza mi codigo y tests usando principios de mutation testing. Identifica tests debiles que pasarian incluso si el codigo fuente estuviera roto.
CODIGO FUENTE:
[pega la funcion o modulo testeado]
ARCHIVO DE TESTS:
[pega los tests actuales]
Realizar analisis de mutacion manual:
1. **Catalogo de Mutaciones** — Listar 10-15 mutaciones aplicables al codigo fuente
2. **Analisis de Supervivencia** — Para cada mutacion, predecir si los tests actuales la atraparian (ELIMINADO) o la perderian (SOBREVIVIO)
3. **Arreglar los Sobrevivientes** — Para cada mutante sobreviviente, escribir el test faltante
4. **Config de Stryker/Herramienta** — Proveer la configuracion para mutation testing automatizado
Ejemplo de Salida
MUTACION: Cambiar `price > 100` a `price >= 100` (linea 12)
ESTADO: SOBREVIVIO — Ningun test verifica el valor limite exacto de 100.
FIX:
it('NO debe aplicar descuento cuando el precio es exactamente 100', () => {
expect(calculateDiscount(100, 'AHORRA10')).toBe(100);
});
MUTACION: Remover `await emailService.send(user.email)` (linea 28)
ESTADO: SOBREVIVIO — Los tests solo verifican el valor de retorno, no efectos secundarios.
FIX:
it('debe enviar email de bienvenida despues del registro', () => {
register(validUser);
expect(emailService.send).toHaveBeenCalledWith('nuevo@test.com');
});
Cuando Usar
Usar despues de alcanzar alta cobertura de codigo para validar la calidad de los tests, antes de releases criticos, o cuando sospechas que tu suite de tests da falsa confianza.
Tips Pro
- Empezar pequeno — ejecutar mutation testing en un modulo critico primero. El mutation testing de todo el codebase puede tomar horas.
- Enfocarse en mutantes sobrevivientes — un score de mutacion de 80%+ es excelente. Arreglar los sobrevivientes de alto riesgo primero.
- Combinar con code review — pegar el reporte de mutacion y preguntar a la IA “Cuales mutantes sobrevivientes representan riesgos reales de negocio?”
- Automatizar en CI — ejecutar mutation testing semanalmente y trackear la tendencia del score.