Convertir un contraejemplo en una prueba de regresión
Un contraejemplo es una asignación completa en la que dos cosas que deberían coincidir no coinciden. Esa es también la definición de una buena prueba de regresión. El desliz de la regla de entrada de abajo produce dos filas así, y la comparación del motor las entrega listas para conservar.
La regla prevista es (member OR invited) AND NOT banned; el desliz es member OR (invited AND NOT banned). La comprobación de equivalencia informa de que no son equivalentes, con el testigo member = VERDADERO, invited = FALSO, banned = VERDADERO: un socio vetado, admitido por el desliz y rechazado por la regla. La tabla marca una segunda fila distinta, el socio vetado que además está invitado. Seis filas de ocho coinciden, y por eso el desliz supera una prueba superficial y por eso estas dos filas merecen escribirse.
Convertir el testigo en una prueba requiere tres hechos que el motor ya da: la asignación, el resultado esperado según la regla prevista, y el resultado que produjo el desliz. El testigo se reproduce con un evaluador independiente antes de mostrarse, así que se sabe que la fila se comporta como se informa, y es completa, así que cualquiera puede reproducirla en cualquier implementación de la regla.
Con el tiempo el conjunto de pruebas de una regla se convierte en un registro de sus contraejemplos: el desliz que alguien casi puso en producción, la fila que comunicó un cliente, el caso que una ejecución de mutación encontró superviviente. Cada uno es una fila con una razón, que es el tipo de prueba más defendible que existe. La lección sobre contraejemplos crea el hábito, y la página de regresión muestra el mismo flujo de trabajo para una regla que cambia a propósito.
Ejemplo
intended := (member OR invited) AND NOT banned · salidaslip := member OR (invited AND NOT banned) · salida
Comprobaciones exactas
Tabla de verdad (8 filas)
| # | member | invited | banned | intended | slip |
|---|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | VERDADERO | FALSO | FALSO |
| 2 | FALSO | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 3 | FALSO | VERDADERO | VERDADERO | FALSO | FALSO |
| 4 | VERDADERO | FALSO | FALSO | VERDADERO | VERDADERO |
| 5 | VERDADERO | FALSO | VERDADERO | FALSO | VERDADERO |
| 6 | VERDADERO | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 7 | VERDADERO | VERDADERO | VERDADERO | FALSO | VERDADERO |
Lectura en lenguaje claro
Principianteintended 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, intended 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.
Intermediointended 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, intended es falso.
Avanzadointended 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, intended es falso.
Notación formal: (member ∨ invited) ∧ ¬banned
Diagrama lógico
El error habitual
Corregir la fórmula y descartar la fila que la delató. La fila es la única evidencia de que el desliz existió; sin ella, la siguiente refactorización puede reintroducir el desliz y nadie lo notará hasta que el socio vetado vuelva a aparecer.
Preguntas
¿Un contraejemplo necesita las dos filas que difieren?
Una basta para refutar la equivalencia, y el motor informa de una. Para un conjunto de pruebas, conserva todas las filas distintas que marca la tabla; cada una es un escenario distinto en el que el desliz se equivocó.
¿El propio contraejemplo puede estar equivocado?
El motor lo reproduce con un evaluador independiente antes de mostrarlo y etiqueta el resultado si la reproducción falla. Lo que ninguna herramienta puede juzgar es si la fila es realista, y ahí entran los supuestos.
Relacionado
Véase también
- Lección 9: Contraejemplos
- Contraejemplo: definición, ejemplo y equivalente en inglés
- Testigo (asignación que satisface): definición, ejemplo y equivalente en inglés
- Pruebas de regresión para reglas de decisión que cambian
- El error de la regla de entrada: socio OR (invitado AND NOT vetado) y el caso que difiere
- La cobertura no es corrección: las pruebas siguen necesitando resultados esperados
- Comprobador de equivalencia lógica: dos expresiones, veredicto exacto, contraejemplo
Pruebas y reglas
- Tabla de decisión frente a tabla de verdad: cuándo usar cada una
- Prueba con tabla de decisión, ejemplo resuelto (estilo ISTQB Foundation 4.2.3)
- MC/DC explicado: cobertura de condición/decisión modificada para reglas booleanas
- Pares de independencia MC/DC, ejemplo resuelto con el informe de cobertura del motor
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.