MC/DC frente a cobertura de condición y cobertura de condición múltiple
La cobertura de condición pasa cada condición por sus dos valores. La cobertura de condición múltiple pasa por todas las combinaciones. MC/DC está entre medias: cada condición mostrada afectando al resultado por sí sola, en unas n + 1 pruebas. El enclavamiento de máquina de abajo tiene cuatro condiciones, así que los tres criterios cuestan cuatro, dieciséis y cinco pruebas.
La regla es start AND guard_closed AND NOT (estop OR fault): la máquina funciona cuando se pulsa arranque, la protección está cerrada, y ni la parada de emergencia ni un fallo están activos. Dieciséis filas. La cobertura de condición se cumple con dos pruebas, todo VERDADERO y todo FALSO, que pasan cada condición por sus dos valores y no dicen nada de ninguna de ellas por separado. La cobertura de condición múltiple son las dieciséis filas. MC/DC necesita los cuatro pares de independencia del motor, que comparten escenarios y suman cinco filas distintas.
Los pares son: start, del escenario en marcha con arranque soltado (se para) a arranque pulsado (funciona); guard_closed, de protección abierta (se para) a cerrada (funciona); estop, de en marcha a parada de emergencia activa (se para); fault, de en marcha a fallo activo (se para). Cuatro pares, cinco escenarios, y cada escenario tiene un resultado esperado que se sigue del requisito de seguridad y no de la fórmula.
La cobertura de decisión, también llamada cobertura de ramas, es más débil todavía: el resultado en sus dos valores, que dos pruebas consiguen sin atender a las condiciones. La comparación de la página de condición frente a decisión usa una regla más pequeña para mostrar la brecha. Para la lógica de seguridad, el sentido de MC/DC es el que el enclavamiento hace evidente: una parada de emergencia atascada que nunca afectara al resultado aprobaría la cobertura de condición y suspendería su par de independencia.
Ejemplo
run := start AND guard_closed AND NOT (estop OR fault) · salida
Comprobaciones exactas
Tabla de verdad (16 filas)
| # | start | guard_closed | estop | fault | run |
|---|---|---|---|---|---|
| 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 |
Lectura en lenguaje claro
Principianterun es verdadero exactamente cuando se cumplen todas las condiciones siguientes:
1. start es verdadero
2. guard_closed es verdadero
3. no se cumple la condición siguiente:
3.1. al menos uno entre estop y fault es verdadero (pueden serlo ambos)
En todos los demás casos, run es falso.
Sobre los operadores:
- AND (Y) solo es verdadero cuando todas sus partes son verdaderas.
- NOT (NO) invierte un valor: lo verdadero pasa a ser falso y lo falso, verdadero.
- OR (O) es inclusivo: es verdadero en cuanto al menos una parte es verdadera, también cuando lo son varias.
Intermediorun es verdadero exactamente cuando se cumplen todas las condiciones siguientes:
1. start es verdadero
2. guard_closed es verdadero
3. no se cumple la condición siguiente:
3.1. al menos uno entre estop y fault es verdadero (pueden serlo ambos)
En todos los demás casos, run es falso.
Avanzadorun es verdadero exactamente cuando se cumplen todas las condiciones siguientes [conjunción ∧]:
1. start es verdadero
2. guard_closed es verdadero
3. no se cumple la condición siguiente [negación ¬]:
3.1. al menos uno entre estop y fault es verdadero (pueden serlo ambos) [disyunción inclusiva ∨]
En todos los demás casos, run es falso.
Notación formal: start ∧ guard_closed ∧ ¬(estop ∨ fault)
Diagrama lógico
MC/DC
| 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 |
El error habitual
Presentar la cobertura de condición como si mostrara el efecto de cada condición. Dos pruebas, todo VERDADERO y todo FALSO, dan el cien por cien de cobertura de condición del enclavamiento y nunca demuestran que la parada de emergencia haga nada.
Preguntas
¿Por qué MC/DC es n + 1 y no 2n?
Porque los pares comparten escenarios: el escenario en marcha sirve como una mitad de todos los pares de aquí. En el peor caso hacen falta 2n pruebas; para la mayoría de las reglas las filas base compartidas lo reducen a n + 1.
¿MC/DC garantiza que la regla es correcta?
No. Garantiza que el conjunto de pruebas muestra la influencia de cada condición sobre la regla tal como está escrita. Los resultados esperados siguen teniendo que venir del requisito, que es el punto de la página del error sobre cobertura y corrección.
Relacionado
Ejercicios
Véase también
- Cobertura de condición frente a cobertura de decisión (ramas)
- 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
- Cobertura de condición: definición, ejemplo y equivalente en inglés
- Cobertura de decisión: 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
- Enclavamiento de máquina: arranque AND resguardo_cerrado AND NOT (paro_emergencia OR fallo)
- La cobertura no es corrección: las pruebas siguen necesitando resultados esperados
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.