Pruebas de mutación para reglas booleanas: mutantes de operador, negación y literal
Las pruebas de mutación plantan pequeños errores deliberados en una regla, como cambiar un operador, eliminar una negación o sustituir un literal, y preguntan si el conjunto de pruebas lo nota. Un mutante sobre el que ninguna prueba falla es superviviente, y un mutante superviviente es un hueco en el conjunto de pruebas.
Toma la regla de entrada (member OR invited) AND NOT banned. Un mutante de operador cambia OR por AND: (member AND invited) AND NOT banned. Un mutante de negación elimina el NOT: (member OR invited) AND banned. Un mutante de literal sustituye una entrada por otra o por una constante. Cada mutante es una fórmula con su propia tabla de verdad, y una prueba lo mata cuando el resultado esperado de la prueba difiere de lo que el mutante calcula en esa fila. El informe de mutación del motor ejecuta el conjunto de pruebas contra cada mutante y clasifica cada uno como muerto, superviviente o equivalente, con una fila testigo para los supervivientes.
La clasificación es exacta y no muestreada, porque los mutantes son fórmulas y el conjunto de pruebas es un conjunto de filas: el motor evalúa las dos cosas. Un mutante equivalente calcula la misma función que el original, por ejemplo una reordenación de operandos, y ninguna prueba puede matarlo; señalarlo como equivalente y no como superviviente es lo que mantiene honesta la puntuación de mutación. La puntuación es la proporción de muertos entre los mutantes no equivalentes.
Para una regla booleana, las pruebas de mutación son el reverso de la cobertura: la cobertura pregunta qué tocaron las pruebas, la mutación pregunta qué atraparían. Un conjunto de pruebas que satisface MC/DC suele matar a los mutantes de operador y de negación, porque cada par de independencia es exactamente la fila en la que se muestra el efecto de una condición. La lección sobre diseño de pruebas tiene el caso resuelto, y la app ofrece convertir el testigo de un superviviente en una prueba nueva.
Ejemplo
allow := (member OR invited) AND NOT banned · salida
Comprobaciones exactas
Tabla de verdad (8 filas)
| # | member | invited | banned | allow |
|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | VERDADERO | FALSO |
| 2 | FALSO | VERDADERO | FALSO | VERDADERO |
| 3 | FALSO | VERDADERO | VERDADERO | FALSO |
| 4 | VERDADERO | FALSO | FALSO | VERDADERO |
| 5 | VERDADERO | FALSO | VERDADERO | FALSO |
| 6 | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 7 | VERDADERO | VERDADERO | VERDADERO | FALSO |
Lectura en lenguaje claro
Principianteallow 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, allow 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.
Intermedioallow 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, allow es falso.
Avanzadoallow 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, allow es falso.
Notación formal: (member ∨ invited) ∧ ¬banned
Diagrama lógico
El error habitual
Contar los mutantes equivalentes como supervivientes y perseguirlos. Un mutante que solo reordena operandos no puede ser matado por ninguna prueba; el motor lo marca como equivalente, y el tiempo dedicado a escribir una prueba para él se pierde.
Preguntas
¿Cuántos mutantes tiene una regla?
Uno por posición de operador, de negación y de literal, lo que crece con el tamaño de la regla; la regla de entrada tiene unos pocos. El informe los enumera todos con su clase, dentro de los límites del motor.
¿Qué significa un mutante superviviente?
Que el conjunto de pruebas no notaría ese cambio concreto. El informe da una fila testigo en la que el mutante y el original difieren, que es la prueba que hay que añadir.
Relacionado
Véase también
- Pruebas de mutación: definición, ejemplo y equivalente en inglés
- Mutante (superviviente, eliminado): definición, ejemplo y equivalente en inglés
- Lección 12: Diseñar pruebas que encuentren errores
- MC/DC explicado: cobertura de condición/decisión modificada para reglas booleanas
- Convertir un contraejemplo en una prueba de regresión
- La cobertura no es corrección: las pruebas siguen necesitando resultados esperados
- Regla de entrada: (socio OR invitado) AND NOT vetado, comprobada de todas las formas
Pruebas y reglas
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.