Saltar al contenido

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

¿Siempre verdadera (tautología)? No Contraejemplo: start = F, guard_closed = F, estop = F, fault = F · Exhaustively checked and solver cross-checked · 1 filas
¿Siempre falsa (contradicción)? No Contraejemplo: start = V, guard_closed = V, estop = F, fault = F · Exhaustively checked and solver cross-checked · 13 filas
¿Puede ser verdadera? Sí Asignación de ejemplo: start = V, guard_closed = V, estop = F, fault = F · Exhaustively checked and solver cross-checked · 13 filas

Tabla de verdad (16 filas)

MC/DC frente a cobertura de condición y cobertura de condición múltiple
#startguard_closedestopfaultrun
0FALSOFALSOFALSOFALSOFALSO
1FALSOFALSOFALSOVERDADEROFALSO
2FALSOFALSOVERDADEROFALSOFALSO
3FALSOFALSOVERDADEROVERDADEROFALSO
4FALSOVERDADEROFALSOFALSOFALSO
5FALSOVERDADEROFALSOVERDADEROFALSO
6FALSOVERDADEROVERDADEROFALSOFALSO
7FALSOVERDADEROVERDADEROVERDADEROFALSO
8VERDADEROFALSOFALSOFALSOFALSO
9VERDADEROFALSOFALSOVERDADEROFALSO
10VERDADEROFALSOVERDADEROFALSOFALSO
11VERDADEROFALSOVERDADEROVERDADEROFALSO
12VERDADEROVERDADEROFALSOFALSOVERDADERO
13VERDADEROVERDADEROFALSOVERDADEROFALSO
14VERDADEROVERDADEROVERDADEROFALSOFALSO
15VERDADEROVERDADEROVERDADEROVERDADEROFALSO

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 vs condition coverage vs multiple condition coverage MC/DC vs condition coverage vs multiple condition coverage start guard_closed estop fault run AND NOT OR
MC/DC vs condition coverage vs multiple condition coverage MC/DC vs condition coverage vs multiple condition coverage start guard_closed estop fault run AND NOT OR

MC/DC

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

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

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.