Saltar al contenido

La cobertura no es corrección: las pruebas siguen necesitando resultados esperados

Un conjunto de pruebas puede cubrir todas las entradas y todas las ramas de una regla y aun así no detectar el error, porque la cobertura mide lo que las pruebas tocaron, no si los resultados esperados eran correctos. Las dos fórmulas de abajo difieren en dos filas, y un conjunto de pruebas puede cubrir las dos fórmulas por completo sin visitar ninguna de ellas.

La regla prevista es (member OR invited) AND NOT banned; la errónea es member OR (invited AND NOT banned), el desliz de agrupación. Difieren en las filas member = VERDADERO, invited = FALSO, banned = VERDADERO y member = VERDADERO, invited = VERDADERO, banned = VERDADERO: la regla errónea admite a los socios vetados. La comprobación de equivalencia informa de la primera como contraejemplo. Todas las demás filas coinciden, seis de ocho.

Considera ahora un conjunto de cuatro pruebas: un socio normal, una persona invitada no socia, un desconocido, y una persona invitada que está vetada. Ejercita todas las entradas en sus dos valores, los dos resultados y todas las ramas de la fórmula errónea, así que toda medida de cobertura marca el cien por cien. Nunca prueba a un socio vetado, así que aprueba sobre la regla errónea. La cobertura era real; el oráculo estaba incompleto.

La cobertura te dice qué filas alcanzaron tus pruebas. La corrección necesita que el resultado esperado de cada fila venga del requisito, no de ejecutar el código, y necesita las filas en las que un error se vería, que es lo que te dan los pares de independencia y los contraejemplos. La sección de pruebas tiene el flujo de trabajo completo; el paso de la lección sobre diseño de pruebas lo resume en una frase: los resultados esperados vienen del requisito.

intended := (member OR invited) AND NOT banned · salidabuggy := member OR (invited AND NOT banned) · salida
¿Son equivalentes intended y buggy? No Contraejemplo: member = V, invited = F, banned = V · Exhaustively checked and solver cross-checked · 6 filas

Tabla de verdad

Difieren en esta fila: #5, #7

La cobertura no es corrección: las pruebas siguen necesitando resultados esperados
#memberinvitedbannedintendedbuggy
0FALSOFALSOFALSOFALSOFALSO
1FALSOFALSOVERDADEROFALSOFALSO
2FALSOVERDADEROFALSOVERDADEROVERDADERO
3FALSOVERDADEROVERDADEROFALSOFALSO
4VERDADEROFALSOFALSOVERDADEROVERDADERO
5VERDADEROFALSOVERDADEROFALSOVERDADERO
6VERDADEROVERDADEROFALSOVERDADEROVERDADERO
7VERDADEROVERDADEROVERDADEROFALSOVERDADERO

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
Coverage is not correctness: tests still need expected results Coverage is not correctness: tests still need expected results member invited banned intendedPRIMARY buggy AND OR NOT OR AND NOT
Coverage is not correctness: tests still need expected results Coverage is not correctness: tests still need expected results member invited banned intendedPRIMARY buggy AND OR NOT OR AND NOT

El error habitual

Presentar una cifra de cobertura como evidencia de que una regla es correcta. La cifra dice que las pruebas ejecutaron el código; no dice nada sobre si alguien contrastó las respuestas con el requisito, y las dos filas que exponen este error pueden faltar en un conjunto de pruebas con cobertura completa.

Preguntas

¿Qué habría atrapado este error?

Una prueba para un socio vetado, que es el contraejemplo que reproduce la comprobación de equivalencia, y en general un par de independencia para banned: dos filas que difieren solo en esa entrada y dan resultados distintos bajo la regla prevista.

¿La cobertura MC/DC garantiza atraparlo?

MC/DC sobre la regla prevista exige un par de filas que muestre que banned importa, y una de esas filas es un socio vetado, así que para este desliz sí. Sigue siendo cobertura de la estructura de la regla prevista, no una demostración de corrección en general.

Relacionado

Ejemplos resueltos

Herramientas

Véase también

Errores comunes

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.