Saltar al contenido

Ejercicios de MC/DC

Diez decisiones para cobertura MC/DC (condición/decisión modificada). Para cada una, encuentra un par de independencia por condición, dos casos de prueba que difieren solo en esa condición y dan resultados distintos, y cuenta cuántos casos de prueba distintos necesita un conjunto de esos pares. Los pares del motor se imprimen bajo cada problema, con la tabla de verdad.

Un par de independencia para una condición mantiene fijas todas las demás, invierte esa y muestra que la decisión se invierte con ella; el par es la evidencia de que la condición importa por sí sola. Para una decisión con n condiciones, en todas las decisiones de esta serie bastan n + 1 casos de prueba cuando los pares comparten filas, y las soluciones indican ese recuento. Dentro de un AND, la fila compartida es aquella en la que todas las condiciones son verdaderas; dentro de un OR, aquella en la que todas son falsas; las decisiones mixtas combinan los dos patrones, y una condición bajo NOT simplemente invierte su valor.

Los pares que imprime el motor se eligen condición a condición, así que su unión puede usar una fila más que un conjunto elegido a mano que comparta filas; los dos son evidencia MC/DC correcta, y el recuento de cada solución es el de filas compartidas. Cada par impreso es una asignación completa con el resultado, así que puedes localizar las dos filas en la tabla de verdad y reproducirlas. Una condición para la que no exista ningún par se informaría como tal; eso ocurre cuando la decisión nunca depende de ella, que es un hallazgo en sí mismo.

1. Encuentra un par de independencia para cada condición de (member OR invited) AND NOT banned y cuenta los casos de prueba necesarios. (member OR invited) AND NOT banned
#memberinvitedbannedf
0FALSOFALSOFALSOFALSO
1FALSOFALSOVERDADEROFALSO
2FALSOVERDADEROFALSOVERDADERO
3FALSOVERDADEROVERDADEROFALSO
4VERDADEROFALSOFALSOVERDADERO
5VERDADEROFALSOVERDADEROFALSO
6VERDADEROVERDADEROFALSOVERDADERO
7VERDADEROVERDADEROVERDADEROFALSO

El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.

(member OR invited) AND NOT banned

Clasificación: contingente

EntradaEstadoPar de independencia (solo esa entrada cambia)
memberfoundmember=F, invited=F, banned=F → F  |  member=T, invited=F, banned=F → T
invitedfoundmember=F, invited=F, banned=F → F  |  member=F, invited=T, banned=F → T
bannedfoundmember=F, invited=T, banned=F → T  |  member=F, invited=T, banned=T → F

Tres condiciones, cuatro casos de prueba. Base toda falsa (sin entrada): invertir solo member o solo invited da entrada, lo que produce los pares de member e invited; después member = FALSE, invited = TRUE, banned = FALSE (entrada) frente a banned = TRUE con las demás iguales (sin entrada) es el par de banned. Filas usadas: toda falsa; solo member; solo invited; invited y banned.

2. Encuentra un par de independencia para cada condición de armed AND (door OR window) y cuenta los casos de prueba necesarios. armed AND (door OR window)
#armeddoorwindowf
0FALSOFALSOFALSOFALSO
1FALSOFALSOVERDADEROFALSO
2FALSOVERDADEROFALSOFALSO
3FALSOVERDADEROVERDADEROFALSO
4VERDADEROFALSOFALSOFALSO
5VERDADEROFALSOVERDADEROVERDADERO
6VERDADEROVERDADEROFALSOVERDADERO
7VERDADEROVERDADEROVERDADEROVERDADERO

El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.

armed AND (door OR window)

Clasificación: contingente

EntradaEstadoPar de independencia (solo esa entrada cambia)
armedfoundarmed=F, door=F, window=T → F  |  armed=T, door=F, window=T → T
doorfoundarmed=T, door=F, window=F → F  |  armed=T, door=T, window=F → T
windowfoundarmed=T, door=F, window=F → F  |  armed=T, door=F, window=T → T

Tres condiciones, cuatro casos de prueba. Para door y window, mantén armed = TRUE y el otro sensor falso, e invierte el que se prueba: armed = TRUE, door = FALSE, window = FALSE (sin alarma) es la fila compartida. Para armed, mantén un sensor verdadero e invierte armed: armed = FALSE, door = TRUE, window = FALSE frente a armed = TRUE, door = TRUE, window = FALSE.

3. Encuentra un par de independencia para cada condición de A AND (B OR C) y cuenta los casos de prueba necesarios. A AND (B OR C)
#ABCf
0FALSOFALSOFALSOFALSO
1FALSOFALSOVERDADEROFALSO
2FALSOVERDADEROFALSOFALSO
3FALSOVERDADEROVERDADEROFALSO
4VERDADEROFALSOFALSOFALSO
5VERDADEROFALSOVERDADEROVERDADERO
6VERDADEROVERDADEROFALSOVERDADERO
7VERDADEROVERDADEROVERDADEROVERDADERO

El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.

A AND (B OR C)

Clasificación: contingente

EntradaEstadoPar de independencia (solo esa entrada cambia)
AfoundA=F, B=F, C=T → F  |  A=T, B=F, C=T → T
BfoundA=T, B=F, C=F → F  |  A=T, B=T, C=F → T
CfoundA=T, B=F, C=F → F  |  A=T, B=F, C=T → T

La misma forma que la regla de la alarma: cuatro casos de prueba para tres condiciones. Pares: para B, A = TRUE, B = FALSE, C = FALSE (falso) y A = TRUE, B = TRUE, C = FALSE (verdadero); para C, la misma base con C invertida; para A, A = FALSE, B = TRUE, C = FALSE frente a A = TRUE, B = TRUE, C = FALSE.

4. Encuentra un par de independencia para cada condición de (A OR B) AND (C OR D) y cuenta los casos de prueba necesarios. (A OR B) AND (C OR D)
#ABCDf
0FALSOFALSOFALSOFALSOFALSO
1FALSOFALSOFALSOVERDADEROFALSO
2FALSOFALSOVERDADEROFALSOFALSO
3FALSOFALSOVERDADEROVERDADEROFALSO
4FALSOVERDADEROFALSOFALSOFALSO
5FALSOVERDADEROFALSOVERDADEROVERDADERO
6FALSOVERDADEROVERDADEROFALSOVERDADERO
7FALSOVERDADEROVERDADEROVERDADEROVERDADERO
8VERDADEROFALSOFALSOFALSOFALSO
9VERDADEROFALSOFALSOVERDADEROVERDADERO
10VERDADEROFALSOVERDADEROFALSOVERDADERO
11VERDADEROFALSOVERDADEROVERDADEROVERDADERO
12VERDADEROVERDADEROFALSOFALSOFALSO
13VERDADEROVERDADEROFALSOVERDADEROVERDADERO
14VERDADEROVERDADEROVERDADEROFALSOVERDADERO
15VERDADEROVERDADEROVERDADEROVERDADEROVERDADERO

El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.

(A OR B) AND (C OR D)

Clasificación: contingente

EntradaEstadoPar de independencia (solo esa entrada cambia)
AfoundA=F, B=F, C=F, D=T → F  |  A=T, B=F, C=F, D=T → T
BfoundA=F, B=F, C=F, D=T → F  |  A=F, B=T, C=F, D=T → T
CfoundA=F, B=T, C=F, D=F → F  |  A=F, B=T, C=T, D=F → T
DfoundA=F, B=T, C=F, D=F → F  |  A=F, B=T, C=F, D=T → T

Cuatro condiciones, cinco casos de prueba. Haz verdadero un lado con una sola condición e invierte las condiciones del otro lado de una en una: con C = TRUE, D = FALSE, las filas A = FALSE, B = FALSE (falso), A = TRUE, B = FALSE y A = FALSE, B = TRUE (las dos verdaderas) dan los pares de A y B; con A = TRUE, B = FALSE, las filas C = FALSE, D = FALSE, C = TRUE, D = FALSE y C = FALSE, D = TRUE dan los pares de C y D. La fila A = TRUE, B = FALSE, C = TRUE, D = FALSE es compartida, así que cinco filas en total.

5. Encuentra un par de independencia para cada condición de A AND B AND C y cuenta los casos de prueba necesarios. A AND B AND C
#ABCf
0FALSOFALSOFALSOFALSO
1FALSOFALSOVERDADEROFALSO
2FALSOVERDADEROFALSOFALSO
3FALSOVERDADEROVERDADEROFALSO
4VERDADEROFALSOFALSOFALSO
5VERDADEROFALSOVERDADEROFALSO
6VERDADEROVERDADEROFALSOFALSO
7VERDADEROVERDADEROVERDADEROVERDADERO

El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.

A AND B AND C

Clasificación: contingente

EntradaEstadoPar de independencia (solo esa entrada cambia)
AfoundA=F, B=T, C=T → F  |  A=T, B=T, C=T → T
BfoundA=T, B=F, C=T → F  |  A=T, B=T, C=T → T
CfoundA=T, B=T, C=F → F  |  A=T, B=T, C=T → T

Cuatro casos de prueba: la fila toda verdadera (verdadero) emparejada con cada fila que tiene exactamente una condición falsa (todas falsas). La fila toda verdadera la comparten los tres pares.

6. Encuentra un par de independencia para cada condición de A OR B OR C y cuenta los casos de prueba necesarios. A OR B OR C
#ABCf
0FALSOFALSOFALSOFALSO
1FALSOFALSOVERDADEROVERDADERO
2FALSOVERDADEROFALSOVERDADERO
3FALSOVERDADEROVERDADEROVERDADERO
4VERDADEROFALSOFALSOVERDADERO
5VERDADEROFALSOVERDADEROVERDADERO
6VERDADEROVERDADEROFALSOVERDADERO
7VERDADEROVERDADEROVERDADEROVERDADERO

El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.

A OR B OR C

Clasificación: contingente

EntradaEstadoPar de independencia (solo esa entrada cambia)
AfoundA=F, B=F, C=F → F  |  A=T, B=F, C=F → T
BfoundA=F, B=F, C=F → F  |  A=F, B=T, C=F → T
CfoundA=F, B=F, C=F → F  |  A=F, B=F, C=T → T

Cuatro casos de prueba, el dual del problema anterior: la fila toda falsa (falso) emparejada con cada fila que tiene exactamente una condición verdadera (todas verdaderas).

7. Encuentra un par de independencia para cada condición de (A AND B) OR C y cuenta los casos de prueba necesarios. (A AND B) OR C
#ABCf
0FALSOFALSOFALSOFALSO
1FALSOFALSOVERDADEROVERDADERO
2FALSOVERDADEROFALSOFALSO
3FALSOVERDADEROVERDADEROVERDADERO
4VERDADEROFALSOFALSOFALSO
5VERDADEROFALSOVERDADEROVERDADERO
6VERDADEROVERDADEROFALSOVERDADERO
7VERDADEROVERDADEROVERDADEROVERDADERO

El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.

(A AND B) OR C

Clasificación: contingente

EntradaEstadoPar de independencia (solo esa entrada cambia)
AfoundA=F, B=T, C=F → F  |  A=T, B=T, C=F → T
BfoundA=T, B=F, C=F → F  |  A=T, B=T, C=F → T
CfoundA=F, B=F, C=F → F  |  A=F, B=F, C=T → T

Cuatro casos de prueba. Con C = FALSE, las filas A = TRUE, B = TRUE (verdadero), A = FALSE, B = TRUE y A = TRUE, B = FALSE (las dos falsas) dan los pares de A y B; para C, mantén A = FALSE, B = TRUE e invierte C: C = FALSE (falso) frente a C = TRUE (verdadero). Los pares impresos pueden elegir otra base para C y usar cinco filas; las dos elecciones son válidas.

8. Encuentra un par de independencia para cada condición de A XOR B y cuenta los casos de prueba necesarios. A XOR B
#ABf
0FALSOFALSOFALSO
1FALSOVERDADEROVERDADERO
2VERDADEROFALSOVERDADERO
3VERDADEROVERDADEROFALSO

El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.

A XOR B

Clasificación: contingente

EntradaEstadoPar de independencia (solo esa entrada cambia)
AfoundA=F, B=F → F  |  A=T, B=F → T
BfoundA=F, B=F → F  |  A=F, B=T → T

Tres casos de prueba para dos condiciones: desde A = FALSE, B = FALSE (falso), invertir A da A = TRUE, B = FALSE (verdadero) e invertir B da A = FALSE, B = TRUE (verdadero). Con XOR cada inversión individual cambia el resultado, así que cualquier fila puede servir como base compartida.

9. Encuentra un par de independencia para cada condición de start AND guard_closed AND NOT (estop OR fault) y cuenta los casos de prueba necesarios. start AND guard_closed AND NOT (estop OR fault)
#startguard_closedestopfaultf
0FALSOFALSOFALSOFALSOFALSO
1FALSOFALSOFALSOVERDADEROFALSO
2FALSOFALSOVERDADEROFALSOFALSO
3FALSOFALSOVERDADEROVERDADEROFALSO
4FALSOVERDADEROFALSOFALSOFALSO
5FALSOVERDADEROFALSOVERDADEROFALSO
6FALSOVERDADEROVERDADEROFALSOFALSO
7FALSOVERDADEROVERDADEROVERDADEROFALSO
8VERDADEROFALSOFALSOFALSOFALSO
9VERDADEROFALSOFALSOVERDADEROFALSO
10VERDADEROFALSOVERDADEROFALSOFALSO
11VERDADEROFALSOVERDADEROVERDADEROFALSO
12VERDADEROVERDADEROFALSOFALSOVERDADERO
13VERDADEROVERDADEROFALSOVERDADEROFALSO
14VERDADEROVERDADEROVERDADEROFALSOFALSO
15VERDADEROVERDADEROVERDADEROVERDADEROFALSO

El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.

start AND guard_closed AND NOT (estop OR fault)

Clasificación: contingente

EntradaEstadoPar de independencia (solo esa entrada cambia)
startfoundstart=F, guard_closed=T, estop=F, fault=F → F  |  start=T, guard_closed=T, estop=F, fault=F → T
guard_closedfoundstart=T, guard_closed=F, estop=F, fault=F → F  |  start=T, guard_closed=T, estop=F, fault=F → T
estopfoundstart=T, guard_closed=T, estop=F, fault=F → T  |  start=T, guard_closed=T, estop=T, fault=F → F
faultfoundstart=T, guard_closed=T, estop=F, fault=F → T  |  start=T, guard_closed=T, estop=F, fault=T → F

Cuatro condiciones, cinco casos de prueba. La fila en que funciona, start = TRUE, guard_closed = TRUE, estop = FALSE, fault = FALSE, es la base compartida; invertir desde ella cualquier condición detiene la máquina, lo que da los cuatro pares de una vez. Una condición bajo NOT se trata igual: su inversión va de falso a verdadero.

10. Encuentra un par de independencia para cada condición de income_ok AND (credit_ok OR guarantor) AND NOT bankrupt y cuenta los casos de prueba necesarios. income_ok AND (credit_ok OR guarantor) AND NOT bankrupt
#income_okcredit_okguarantorbankruptf
0FALSOFALSOFALSOFALSOFALSO
1FALSOFALSOFALSOVERDADEROFALSO
2FALSOFALSOVERDADEROFALSOFALSO
3FALSOFALSOVERDADEROVERDADEROFALSO
4FALSOVERDADEROFALSOFALSOFALSO
5FALSOVERDADEROFALSOVERDADEROFALSO
6FALSOVERDADEROVERDADEROFALSOFALSO
7FALSOVERDADEROVERDADEROVERDADEROFALSO
8VERDADEROFALSOFALSOFALSOFALSO
9VERDADEROFALSOFALSOVERDADEROFALSO
10VERDADEROFALSOVERDADEROFALSOVERDADERO
11VERDADEROFALSOVERDADEROVERDADEROFALSO
12VERDADEROVERDADEROFALSOFALSOVERDADERO
13VERDADEROVERDADEROFALSOVERDADEROFALSO
14VERDADEROVERDADEROVERDADEROFALSOVERDADERO
15VERDADEROVERDADEROVERDADEROVERDADEROFALSO

El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.

income_ok AND (credit_ok OR guarantor) AND NOT bankrupt

Clasificación: contingente

EntradaEstadoPar de independencia (solo esa entrada cambia)
income_okfoundincome_ok=F, credit_ok=F, guarantor=T, bankrupt=F → F  |  income_ok=T, credit_ok=F, guarantor=T, bankrupt=F → T
credit_okfoundincome_ok=T, credit_ok=F, guarantor=F, bankrupt=F → F  |  income_ok=T, credit_ok=T, guarantor=F, bankrupt=F → T
guarantorfoundincome_ok=T, credit_ok=F, guarantor=F, bankrupt=F → F  |  income_ok=T, credit_ok=F, guarantor=T, bankrupt=F → T
bankruptfoundincome_ok=T, credit_ok=F, guarantor=T, bankrupt=F → T  |  income_ok=T, credit_ok=F, guarantor=T, bankrupt=T → F

Cuatro condiciones, cinco casos de prueba. Base income_ok = TRUE, credit_ok = TRUE, guarantor = FALSE, bankrupt = FALSE (concedido): invertir solo income_ok, credit_ok o bankrupt deniega, tres pares que comparten la base; para guarantor, mantén credit_ok = FALSE con ingresos ok y sin quiebra e invierte guarantor: guarantor = FALSE (denegado) frente a guarantor = TRUE (concedido). La fila income_ok = TRUE, credit_ok = FALSE, guarantor = FALSE, bankrupt = FALSE sirve para el par de credit_ok y para el de guarantor.

Preguntas

¿Por qué MC/DC es más fuerte que la cobertura de decisión?

La cobertura de decisión solo necesita un resultado verdadero y uno falso, dos pruebas, y no distingue A AND (B OR C) de A AND B. MC/DC pide un par por condición, de modo que una condición mal conectada, o ausente, no consigue mostrar su propio efecto; cuatro pruebas lo exponen en esa decisión. El número de pruebas crece con las condiciones, no con las filas.

Relacionado

Pruebas y reglas

Véase también

Ejercicios

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.