Saltar al contenido

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

¿Siempre verdadera (tautología)? No Contraejemplo: member = F, invited = F, banned = F · Exhaustively checked and solver cross-checked · 1 filas
¿Siempre falsa (contradicción)? No Contraejemplo: member = F, invited = V, banned = F · Exhaustively checked and solver cross-checked · 3 filas
¿Puede ser verdadera? Sí Asignación de ejemplo: member = F, invited = V, banned = F · Exhaustively checked and solver cross-checked · 3 filas

Tabla de verdad (8 filas)

Pruebas de mutación para reglas booleanas: mutantes de operador, negación y literal
#memberinvitedbannedallow
0FALSOFALSOFALSOFALSO
1FALSOFALSOVERDADEROFALSO
2FALSOVERDADEROFALSOVERDADERO
3FALSOVERDADEROVERDADEROFALSO
4VERDADEROFALSOFALSOVERDADERO
5VERDADEROFALSOVERDADEROFALSO
6VERDADEROVERDADEROFALSOVERDADERO
7VERDADEROVERDADEROVERDADEROFALSO

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

Mutation testing for Boolean rules: operator, negation and literal mutants Mutation testing for Boolean rules: operator, negation and literal mutants member invited banned allow AND OR NOT
Mutation testing for Boolean rules: operator, negation and literal mutants Mutation testing for Boolean rules: operator, negation and literal mutants member invited banned allow AND OR NOT

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 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.