Saltar al contenido

Pruebas de regresión para reglas de decisión que cambian

Cuando una regla cambia, la cuestión es qué filas cambiaron con ella. La regla de entrada gana abajo una condición staff, y la comparación de las dos versiones por el motor encuentra exactamente una fila de dieciséis en la que difieren, que es la fila que el conjunto de pruebas de regresión debe añadir y las filas que debe conservar.

La versión uno es (member OR invited) AND NOT banned; la versión dos es (member OR invited OR staff) AND NOT banned. Añadir una entrada duplica la tabla, de ocho filas a dieciséis, y la comprobación de equivalencia informa de que las dos versiones no son equivalentes, con el testigo member = FALSO, invited = FALSO, banned = FALSO, staff = VERDADERO: un empleado que no es socio ni está invitado, ahora admitido. Es la única fila que difiere. En todas las demás filas, incluido el empleado vetado, las versiones coinciden.

Esa fila es la prueba nueva, con su resultado esperado tomado de la petición de cambio («el personal puede entrar»). Las filas que no cambiaron son el conjunto de regresión propiamente dicho: codifican todo lo que el cambio no debía tocar, y la comparación del motor es la demostración de que no lo tocó. Un cambio que hubiera producido dos filas distintas, por ejemplo admitiendo también al personal vetado, habría aparecido como un segundo testigo.

Conservar los contraejemplos de la versión anterior como pruebas, como recomienda la página de contraejemplos, significa que el conjunto acumula exactamente las filas que alguna vez importaron. En el motor las entradas se emparejan entre revisiones por identidad, así que renombrar member no rompe la comparación, y un archivo de pruebas lleva el resumen criptográfico de la lógica contra la que se escribió.

Ejemplo

v1 := (member OR invited) AND NOT banned · salidav2 := (member OR invited OR staff) AND NOT banned · salida

Comprobaciones exactas

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

Tabla de verdad (16 filas)

Pruebas de regresión para reglas de decisión que cambian
#memberinvitedbannedstaffv1v2
0FALSOFALSOFALSOFALSOFALSOFALSO
1FALSOFALSOFALSOVERDADEROFALSOVERDADERO
2FALSOFALSOVERDADEROFALSOFALSOFALSO
3FALSOFALSOVERDADEROVERDADEROFALSOFALSO
4FALSOVERDADEROFALSOFALSOVERDADEROVERDADERO
5FALSOVERDADEROFALSOVERDADEROVERDADEROVERDADERO
6FALSOVERDADEROVERDADEROFALSOFALSOFALSO
7FALSOVERDADEROVERDADEROVERDADEROFALSOFALSO
8VERDADEROFALSOFALSOFALSOVERDADEROVERDADERO
9VERDADEROFALSOFALSOVERDADEROVERDADEROVERDADERO
10VERDADEROFALSOVERDADEROFALSOFALSOFALSO
11VERDADEROFALSOVERDADEROVERDADEROFALSOFALSO
12VERDADEROVERDADEROFALSOFALSOVERDADEROVERDADERO
13VERDADEROVERDADEROFALSOVERDADEROVERDADEROVERDADERO
14VERDADEROVERDADEROVERDADEROFALSOFALSOFALSO
15VERDADEROVERDADEROVERDADEROVERDADEROFALSOFALSO

Lectura en lenguaje claro

Principiantev1 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, v1 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.
Intermediov1 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, v1 es falso.
Avanzadov1 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, v1 es falso.
Notación formal: (member ∨ invited) ∧ ¬banned

Diagrama lógico

Regression tests for decision rules that change Regression tests for decision rules that change member invited banned staff v1PRIMARY v2 AND OR NOT AND OR NOT
Regression tests for decision rules that change Regression tests for decision rules that change member invited banned staff v1PRIMARY v2 AND OR NOT AND OR NOT

El error habitual

Regenerar toda la columna de resultados esperados a partir de la regla nueva después de un cambio. El conjunto de pruebas coincide entonces con la regla nueva por construcción, incluso en cualquier fila que el cambio rompió; las filas que difieren deben revisarse contra la petición de cambio, no regenerarse.

Preguntas

¿Por qué comparar versiones en lugar de probar solo la nueva?

Porque la comparación enumera las filas cuyo resultado cambió, que es un enunciado completo del efecto del cambio. Las pruebas de la regla nueva por sí solas no distinguen un cambio previsto de uno accidental.

¿Y si el cambio añade una entrada?

La tabla se duplica y las filas antiguas se emparejan por las entradas que comparten. La comparación sigue encontrando las filas que difieren, como muestra el resultado de una fila de arriba, y el par de independencia de la nueva entrada se convierte en una prueba nueva.

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.