Pruebas de mutación: definición, ejemplo y equivalente en inglés
Las pruebas de mutación juzgan una batería de pruebas sembrando pequeños fallos deliberados, mutantes, en la regla bajo prueba y comprobando si las pruebas lo notan. Un mutante que hace fallar una prueba queda eliminado; uno que supera todas sobrevive y descubre un hueco.
Un mutante se produce con un cambio mecánico: intercambiar un operador, quitar una negación, sustituir un literal. Si la batería es buena, todo mutante que cambie el comportamiento lo detecta al menos una prueba. La puntuación de mutación, mutantes eliminados sobre mutantes no equivalentes, mide la batería y no el código. Los mutantes equivalentes al original no pueden eliminarse y hay que reconocerlos, lo que para reglas booleanas el motor hace de forma exacta, con una comprobación de equivalencia en todas las filas. El motor muta una regla con mutantes de operador, de negación y de literal y ejecuta la batería de la regla contra cada uno.
El artefacto de esta página es un mutante comparado con su original como par de fórmulas, no una ejecución de mutación: original = (member OR invited) AND NOT banned y negation_mutant = (member OR invited) AND banned, con la negación quitada. Las dos columnas difieren en las filas 2 a 7, y la comprobación de equivalencia se viola con el contraejemplo member = FALSE, invited = TRUE, banned = FALSE, donde el original es TRUE y el mutante FALSE. Cualquier prueba con esa entrada y resultado esperado TRUE elimina este mutante; una batería sin esa prueba lo deja sobrevivir.
Las pruebas de mutación son la respuesta habitual a «¿sirven de algo mis pruebas?», usadas en proyectos de compiladores y bibliotecas y cada vez más en reglas de negocio, donde la regla es pequeña y los mutantes pocos. Su coste es ejecutar la batería una vez por mutante. El término se confunde con el fuzzing (entradas aleatorias en lugar de código alterado), con las pruebas de propiedades y con las pruebas de regresión, que comparan versiones escritas por personas y no fallos generados.
Ejemplo
original := (member OR invited) AND NOT banned · salidanegation_mutant := (member OR invited) AND banned · salida
Comprobaciones exactas
Tabla de verdad (8 filas)
| # | member | invited | banned | original | negation_mutant |
|---|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | VERDADERO | FALSO | FALSO |
| 2 | FALSO | VERDADERO | FALSO | VERDADERO | FALSO |
| 3 | FALSO | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 4 | VERDADERO | FALSO | FALSO | VERDADERO | FALSO |
| 5 | VERDADERO | FALSO | VERDADERO | FALSO | VERDADERO |
| 6 | VERDADERO | VERDADERO | FALSO | VERDADERO | FALSO |
| 7 | VERDADERO | VERDADERO | VERDADERO | FALSO | VERDADERO |
Lectura en lenguaje claro
Principianteoriginal es verdadero exactamente cuando se cumplen las dos condiciones siguientes:
1. al menos uno entre member e invited es verdadero (pueden serlo ambos)
2. banned es falso
En todos los demás casos, original es falso.
Sobre los operadores:
- AND (Y) solo es verdadero cuando todas sus partes son verdaderas.
- OR (O) es inclusivo: es verdadero en cuanto al menos una parte es verdadera, también cuando lo son varias.
- NOT (NO) invierte un valor: lo verdadero pasa a ser falso y lo falso, verdadero.
Intermediooriginal es verdadero exactamente cuando se cumplen las dos condiciones siguientes:
1. al menos uno entre member e invited es verdadero (pueden serlo ambos)
2. banned es falso
En todos los demás casos, original es falso.
Avanzadooriginal es verdadero exactamente cuando se cumplen las dos condiciones siguientes [conjunción ∧]:
1. al menos uno entre member e invited es verdadero (pueden serlo ambos) [disyunción inclusiva ∨]
2. banned es falso [negación ¬]
En todos los demás casos, original es falso.
Notación formal: (member ∨ invited) ∧ ¬banned
El error habitual
Contar un mutante superviviente como un error en la regla. Un superviviente significa que las pruebas no distinguieron el mutante del original; la regla puede ser correcta y estar poco probada. El arreglo es una prueba nueva en una fila que difiera, como la fila contraejemplo de esta página, no un cambio en la regla.
Preguntas
¿Qué es un mutante equivalente?
Un mutante cuyo cambio no altera la función, como intercambiar los operandos de un AND. Ninguna prueba puede eliminarlo, así que se excluye de la puntuación. Para reglas booleanas el motor lo detecta de forma exacta: la comprobación de equivalencia se cumple en todas las filas y el mutante se informa como equivalente, no como superviviente.
Relacionado
Véase también
- Pruebas de mutación para reglas booleanas: mutantes de operador, negación y literal
- Mutante (superviviente, eliminado): definición, ejemplo y equivalente en inglés
- Oráculo de prueba (resultado esperado): definición, ejemplo y equivalente en inglés
- Prueba de regresión: definición, ejemplo y equivalente en inglés
- Comprobador de equivalencia lógica: dos expresiones, veredicto exacto, contraejemplo
- Lección 12: Diseñar pruebas que encuentren errores
Glosario
Generado a partir del motor de Tangibool, semántica tangibool-semantics/1, motor 1.0.0, compilación . Cada tabla, mapa, simplificación y veredicto de estas páginas lo calculó el motor de Tangibool al compilar el sitio, y cada afirmación la volvió a comprobar el mismo verificador exacto que usa la app. Los límites se indican donde aplican. © 2026 Foreranger LTD.