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
| # | member | invited | banned | f |
|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | VERDADERO | FALSO |
| 2 | FALSO | VERDADERO | FALSO | VERDADERO |
| 3 | FALSO | VERDADERO | VERDADERO | FALSO |
| 4 | VERDADERO | FALSO | FALSO | VERDADERO |
| 5 | VERDADERO | FALSO | VERDADERO | FALSO |
| 6 | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 7 | VERDADERO | VERDADERO | VERDADERO | FALSO |
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
| Entrada | Estado | Par de independencia (solo esa entrada cambia) |
|---|---|---|
| member | found | member=F, invited=F, banned=F → F | member=T, invited=F, banned=F → T |
| invited | found | member=F, invited=F, banned=F → F | member=F, invited=T, banned=F → T |
| banned | found | member=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)
| # | armed | door | window | f |
|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | VERDADERO | FALSO |
| 2 | FALSO | VERDADERO | FALSO | FALSO |
| 3 | FALSO | VERDADERO | VERDADERO | FALSO |
| 4 | VERDADERO | FALSO | FALSO | FALSO |
| 5 | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 6 | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 7 | VERDADERO | VERDADERO | VERDADERO | VERDADERO |
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
| Entrada | Estado | Par de independencia (solo esa entrada cambia) |
|---|---|---|
| armed | found | armed=F, door=F, window=T → F | armed=T, door=F, window=T → T |
| door | found | armed=T, door=F, window=F → F | armed=T, door=T, window=F → T |
| window | found | armed=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)
| # | A | B | C | f |
|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | VERDADERO | FALSO |
| 2 | FALSO | VERDADERO | FALSO | FALSO |
| 3 | FALSO | VERDADERO | VERDADERO | FALSO |
| 4 | VERDADERO | FALSO | FALSO | FALSO |
| 5 | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 6 | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 7 | VERDADERO | VERDADERO | VERDADERO | VERDADERO |
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
| Entrada | Estado | Par de independencia (solo esa entrada cambia) |
|---|---|---|
| A | found | A=F, B=F, C=T → F | A=T, B=F, C=T → T |
| B | found | A=T, B=F, C=F → F | A=T, B=T, C=F → T |
| C | found | A=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)
| # | A | B | C | D | f |
|---|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | FALSO | VERDADERO | FALSO |
| 2 | FALSO | FALSO | VERDADERO | FALSO | FALSO |
| 3 | FALSO | FALSO | VERDADERO | VERDADERO | FALSO |
| 4 | FALSO | VERDADERO | FALSO | FALSO | FALSO |
| 5 | FALSO | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 6 | FALSO | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 7 | FALSO | VERDADERO | VERDADERO | VERDADERO | VERDADERO |
| 8 | VERDADERO | FALSO | FALSO | FALSO | FALSO |
| 9 | VERDADERO | FALSO | FALSO | VERDADERO | VERDADERO |
| 10 | VERDADERO | FALSO | VERDADERO | FALSO | VERDADERO |
| 11 | VERDADERO | FALSO | VERDADERO | VERDADERO | VERDADERO |
| 12 | VERDADERO | VERDADERO | FALSO | FALSO | FALSO |
| 13 | VERDADERO | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 14 | VERDADERO | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 15 | VERDADERO | VERDADERO | VERDADERO | VERDADERO | VERDADERO |
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
| Entrada | Estado | Par de independencia (solo esa entrada cambia) |
|---|---|---|
| A | found | A=F, B=F, C=F, D=T → F | A=T, B=F, C=F, D=T → T |
| B | found | A=F, B=F, C=F, D=T → F | A=F, B=T, C=F, D=T → T |
| C | found | A=F, B=T, C=F, D=F → F | A=F, B=T, C=T, D=F → T |
| D | found | A=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
| # | A | B | C | f |
|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | VERDADERO | FALSO |
| 2 | FALSO | VERDADERO | FALSO | FALSO |
| 3 | FALSO | VERDADERO | VERDADERO | FALSO |
| 4 | VERDADERO | FALSO | FALSO | FALSO |
| 5 | VERDADERO | FALSO | VERDADERO | FALSO |
| 6 | VERDADERO | VERDADERO | FALSO | FALSO |
| 7 | VERDADERO | VERDADERO | VERDADERO | VERDADERO |
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
| Entrada | Estado | Par de independencia (solo esa entrada cambia) |
|---|---|---|
| A | found | A=F, B=T, C=T → F | A=T, B=T, C=T → T |
| B | found | A=T, B=F, C=T → F | A=T, B=T, C=T → T |
| C | found | A=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
| # | A | B | C | f |
|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | VERDADERO | VERDADERO |
| 2 | FALSO | VERDADERO | FALSO | VERDADERO |
| 3 | FALSO | VERDADERO | VERDADERO | VERDADERO |
| 4 | VERDADERO | FALSO | FALSO | VERDADERO |
| 5 | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 6 | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 7 | VERDADERO | VERDADERO | VERDADERO | VERDADERO |
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
| Entrada | Estado | Par de independencia (solo esa entrada cambia) |
|---|---|---|
| A | found | A=F, B=F, C=F → F | A=T, B=F, C=F → T |
| B | found | A=F, B=F, C=F → F | A=F, B=T, C=F → T |
| C | found | A=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
| # | A | B | C | f |
|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | VERDADERO | VERDADERO |
| 2 | FALSO | VERDADERO | FALSO | FALSO |
| 3 | FALSO | VERDADERO | VERDADERO | VERDADERO |
| 4 | VERDADERO | FALSO | FALSO | FALSO |
| 5 | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 6 | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 7 | VERDADERO | VERDADERO | VERDADERO | VERDADERO |
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
| Entrada | Estado | Par de independencia (solo esa entrada cambia) |
|---|---|---|
| A | found | A=F, B=T, C=F → F | A=T, B=T, C=F → T |
| B | found | A=T, B=F, C=F → F | A=T, B=T, C=F → T |
| C | found | A=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
| # | A | B | f |
|---|---|---|---|
| 0 | FALSO | FALSO | FALSO |
| 1 | FALSO | VERDADERO | VERDADERO |
| 2 | VERDADERO | FALSO | VERDADERO |
| 3 | VERDADERO | VERDADERO | FALSO |
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
| Entrada | Estado | Par de independencia (solo esa entrada cambia) |
|---|---|---|
| A | found | A=F, B=F → F | A=T, B=F → T |
| B | found | A=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)
| # | start | guard_closed | estop | fault | f |
|---|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | FALSO | VERDADERO | FALSO |
| 2 | FALSO | FALSO | VERDADERO | FALSO | FALSO |
| 3 | FALSO | FALSO | VERDADERO | VERDADERO | FALSO |
| 4 | FALSO | VERDADERO | FALSO | FALSO | FALSO |
| 5 | FALSO | VERDADERO | FALSO | VERDADERO | FALSO |
| 6 | FALSO | VERDADERO | VERDADERO | FALSO | FALSO |
| 7 | FALSO | VERDADERO | VERDADERO | VERDADERO | FALSO |
| 8 | VERDADERO | FALSO | FALSO | FALSO | FALSO |
| 9 | VERDADERO | FALSO | FALSO | VERDADERO | FALSO |
| 10 | VERDADERO | FALSO | VERDADERO | FALSO | FALSO |
| 11 | VERDADERO | FALSO | VERDADERO | VERDADERO | FALSO |
| 12 | VERDADERO | VERDADERO | FALSO | FALSO | VERDADERO |
| 13 | VERDADERO | VERDADERO | FALSO | VERDADERO | FALSO |
| 14 | VERDADERO | VERDADERO | VERDADERO | FALSO | FALSO |
| 15 | VERDADERO | VERDADERO | VERDADERO | VERDADERO | FALSO |
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
| Entrada | Estado | Par de independencia (solo esa entrada cambia) |
|---|---|---|
| start | found | start=F, guard_closed=T, estop=F, fault=F → F | start=T, guard_closed=T, estop=F, fault=F → T |
| guard_closed | found | start=T, guard_closed=F, estop=F, fault=F → F | start=T, guard_closed=T, estop=F, fault=F → T |
| estop | found | start=T, guard_closed=T, estop=F, fault=F → T | start=T, guard_closed=T, estop=T, fault=F → F |
| fault | found | start=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_ok | credit_ok | guarantor | bankrupt | f |
|---|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | FALSO | VERDADERO | FALSO |
| 2 | FALSO | FALSO | VERDADERO | FALSO | FALSO |
| 3 | FALSO | FALSO | VERDADERO | VERDADERO | FALSO |
| 4 | FALSO | VERDADERO | FALSO | FALSO | FALSO |
| 5 | FALSO | VERDADERO | FALSO | VERDADERO | FALSO |
| 6 | FALSO | VERDADERO | VERDADERO | FALSO | FALSO |
| 7 | FALSO | VERDADERO | VERDADERO | VERDADERO | FALSO |
| 8 | VERDADERO | FALSO | FALSO | FALSO | FALSO |
| 9 | VERDADERO | FALSO | FALSO | VERDADERO | FALSO |
| 10 | VERDADERO | FALSO | VERDADERO | FALSO | VERDADERO |
| 11 | VERDADERO | FALSO | VERDADERO | VERDADERO | FALSO |
| 12 | VERDADERO | VERDADERO | FALSO | FALSO | VERDADERO |
| 13 | VERDADERO | VERDADERO | FALSO | VERDADERO | FALSO |
| 14 | VERDADERO | VERDADERO | VERDADERO | FALSO | VERDADERO |
| 15 | VERDADERO | VERDADERO | VERDADERO | VERDADERO | FALSO |
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
| Entrada | Estado | Par de independencia (solo esa entrada cambia) |
|---|---|---|
| income_ok | found | income_ok=F, credit_ok=F, guarantor=T, bankrupt=F → F | income_ok=T, credit_ok=F, guarantor=T, bankrupt=F → T |
| credit_ok | found | income_ok=T, credit_ok=F, guarantor=F, bankrupt=F → F | income_ok=T, credit_ok=T, guarantor=F, bankrupt=F → T |
| guarantor | found | income_ok=T, credit_ok=F, guarantor=F, bankrupt=F → F | income_ok=T, credit_ok=F, guarantor=T, bankrupt=F → T |
| bankrupt | found | income_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
- MC/DC frente a cobertura de condición y cobertura de condición múltiple
- Cobertura de condición frente a cobertura de decisión (ramas)
Véase también
- 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
- Par de independencia: definición, ejemplo y equivalente en inglés
- MC/DC (cobertura de condición/decisión modificada): definición, ejemplo y equivalente en inglés
- Regla de alarma: armada AND (puerta OR ventana OR movimiento) AND NOT codigo
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.