Ejercicios de tablas de decisión (estilo ISTQB)
Diez reglas de negocio con tres o cuatro condiciones, al estilo de los ejercicios de tablas de decisión del ISTQB. Para cada una, construye la tabla de decisión completa, marca las filas en las que se ejecuta la acción y colapsa la tabla fusionando combinaciones que difieren en una condición que no afecta a la acción, contando las reglas que quedan. La tabla de verdad bajo cada problema es la tabla completa, con la columna de la acción incluida.
Una tabla de decisión completa enumera todas las combinaciones de las condiciones, 8 filas con tres y 16 con cuatro, con la acción por fila; es la tabla de verdad de la regla, con las condiciones como entradas y la acción como salida, y la tabla del motor bajo el problema es exactamente eso. Las filas se numeran con la primera condición como bit más significativo, en el orden en que las condiciones aparecen en la regla; las soluciones dan las filas de acción como asignaciones y como números de fila en ese orden.
Colapsar sustituye dos filas que difieren solo en una condición y coinciden en la acción por una regla con un guion en esa condición. Colapsa una condición cada vez y comprueba que cada fila original sigue cubierta exactamente una vez. Las soluciones dan una tabla colapsada por regla; otra agrupación con el mismo número de reglas es igual de válida, y la prueba que importa es que las reglas colapsadas reproduzcan la columna de la acción fila a fila.
1. El envío es gratis para pedidos de más de 50 o para socios Prime, pero no para artículos voluminosos. Condiciones over_50, prime, oversized. Construye la tabla de decisión, enumera las filas con envío gratis y colápsala. (over_50 OR prime) AND NOT oversized
| # | over_50 | prime | oversized | 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.
(over_50 OR prime) AND NOT oversized Clasificación: contingente
Tres filas tienen envío gratis, todas con oversized = FALSE: over_50 = FALSE, prime = TRUE (fila 2), over_50 = TRUE, prime = FALSE (fila 4) y over_50 = TRUE, prime = TRUE (fila 6). Colapsada a cuatro reglas: voluminoso → no; no voluminoso y más de 50 (Prime: guion) → sí; no voluminoso, no más de 50, Prime → sí; no voluminoso, no más de 50, no Prime → no.
2. Un descuento se aplica a estudiantes y a mayores cuyo carné no haya caducado. Condiciones student, senior, expired. Construye la tabla, enumera las filas con descuento y colápsala. (student OR senior) AND NOT expired
| # | student | senior | expired | 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.
(student OR senior) AND NOT expired Clasificación: contingente
Descuento en student = FALSE, senior = TRUE, expired = FALSE (fila 2), student = TRUE, senior = FALSE, expired = FALSE (fila 4) y student = TRUE, senior = TRUE, expired = FALSE (fila 6). Colapsada a cuatro reglas: caducado → no; no caducado y estudiante (mayor: guion) → sí; no caducado, no estudiante, mayor → sí; no caducado, ninguna de las dos → no.
3. Se concede un préstamo cuando los ingresos son suficientes, el solicitante tiene buen historial de crédito o un avalista, y no está en quiebra. Condiciones income_ok, credit_ok, guarantor, bankrupt. Construye la tabla de 16 filas, enumera las filas que conceden el préstamo y colápsala. 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
Tres de las dieciséis filas conceden el préstamo, todas con income_ok = TRUE, bankrupt = FALSE: credit_ok = FALSE, guarantor = TRUE (fila 10), credit_ok = TRUE, guarantor = FALSE (fila 12) y credit_ok = TRUE, guarantor = TRUE (fila 14). Colapsada a cinco reglas: ingresos insuficientes → no; en quiebra → no; ingresos ok, sin quiebra, crédito ok (avalista: guion) → sí; ingresos ok, sin quiebra, sin crédito, con avalista → sí; ingresos ok, sin quiebra, sin crédito, sin avalista → no.
4. La alarma suena cuando el sistema está armado y hay una puerta o una ventana abierta. Condiciones armed, door, window. Construye la tabla, enumera las filas con alarma y colápsala. 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
Alarma con armed = TRUE y door = FALSE, window = TRUE (fila 5), door = TRUE, window = FALSE (fila 6) y door = TRUE, window = TRUE (fila 7). Colapsada a cuatro reglas: no armado → no; armado y puerta abierta (ventana: guion) → sí; armado, puerta cerrada, ventana abierta → sí; armado, las dos cerradas → no.
5. Un visitante es admitido con pasaporte, o con documento de identidad si es mayor de edad. Condiciones passport, age_ok, id_card. Construye la tabla, enumera las filas admitidas y colápsala. passport OR (age_ok AND id_card)
| # | passport | age_ok | id_card | f |
|---|---|---|---|---|
| 0 | FALSO | FALSO | FALSO | FALSO |
| 1 | FALSO | FALSO | VERDADERO | FALSO |
| 2 | FALSO | VERDADERO | FALSO | FALSO |
| 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.
passport OR (age_ok AND id_card) Clasificación: contingente
Cinco filas admiten: las cuatro con passport = TRUE (filas 4 a 7) y passport = FALSE, age_ok = TRUE, id_card = TRUE (fila 3). Colapsada a cuatro reglas: pasaporte (las demás: guion) → sí; sin pasaporte, mayor de edad, con documento → sí; sin pasaporte, menor de edad → no; sin pasaporte, mayor de edad, sin documento → no.
6. Un registro puede editarlo un usuario con sesión iniciada, cuya cuenta no esté bloqueada y que sea su propietario o administrador. Condiciones logged_in, locked, owner, admin. Construye la tabla de 16 filas, enumera las filas que permiten editar y colápsala. logged_in AND NOT locked AND (owner OR admin)
| # | logged_in | locked | owner | admin | 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 | VERDADERO |
| 10 | VERDADERO | FALSO | VERDADERO | FALSO | VERDADERO |
| 11 | VERDADERO | FALSO | VERDADERO | VERDADERO | VERDADERO |
| 12 | VERDADERO | VERDADERO | FALSO | FALSO | FALSO |
| 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.
logged_in AND NOT locked AND (owner OR admin) Clasificación: contingente
Tres filas permiten editar, todas con logged_in = TRUE, locked = FALSE: owner = FALSE, admin = TRUE (fila 9), owner = TRUE, admin = FALSE (fila 10) y owner = TRUE, admin = TRUE (fila 11). Colapsada a cinco reglas: sin sesión → no; con sesión pero bloqueado → no; con sesión, no bloqueado, propietario (administrador: guion) → sí; con sesión, no bloqueado, no propietario, administrador → sí; con sesión, no bloqueado, ninguno de los dos → no.
7. Un año es bisiesto cuando es divisible por 4, salvo los años divisibles por 100, a menos que también sean divisibles por 400. Condiciones divisible_by_4, divisible_by_100, divisible_by_400. Construye la tabla, enumera las filas bisiestas y colápsala. divisible_by_4 AND (NOT divisible_by_100 OR divisible_by_400)
| # | divisible_by_4 | divisible_by_100 | divisible_by_400 | 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 | VERDADERO |
| 5 | VERDADERO | FALSO | VERDADERO | VERDADERO |
| 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.
divisible_by_4 AND (NOT divisible_by_100 OR divisible_by_400) Clasificación: contingente
Bisiesto con divisible_by_4 = TRUE y divisible_by_100 = FALSE, divisible_by_400 = FALSE (fila 4), con divisible_by_100 = FALSE, divisible_by_400 = TRUE (fila 5, inviable en la realidad) y con las dos verdaderas (fila 7). Colapsada a cuatro reglas: no divisible por 4 → no; divisible por 4, no por 100 (400: guion) → sí; por 4, por 100 y por 400 → sí; por 4 y por 100, no por 400 → no.
8. Un pedido confirmado se acepta cuando se paga exactamente con un método, efectivo o tarjeta. Condiciones confirmed, cash, card. Construye la tabla, enumera las filas aceptadas y colápsala. confirmed AND (cash XOR card)
| # | confirmed | cash | card | 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 | FALSO |
El motor no encontró ninguna ley que acorte esta expresión; ya es tan corta como sus leyes de reescritura permiten.
confirmed AND (cash XOR card) Clasificación: contingente
Dos filas aceptan: confirmed = TRUE, cash = FALSE, card = TRUE (fila 5) y confirmed = TRUE, cash = TRUE, card = FALSE (fila 6). Colapsada a cinco reglas: no confirmado → no; confirmado, solo efectivo → sí; confirmado, solo tarjeta → sí; confirmado, los dos → no; confirmado, ninguno → no. El XOR no colapsa más, porque las dos filas aceptadas difieren en dos condiciones.
9. Un cliente recibe un cupón si es VIP, o si ha hecho tres pedidos y nunca ha devuelto uno. Condiciones vip, orders_3, returned. Construye la tabla, enumera las filas con cupón y colápsala. vip OR (orders_3 AND NOT returned)
| # | vip | orders_3 | returned | 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 | 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.
vip OR (orders_3 AND NOT returned) Clasificación: contingente
Cinco filas dan cupón: las cuatro con vip = TRUE (filas 4 a 7) y vip = FALSE, orders_3 = TRUE, returned = FALSE (fila 2). Colapsada a cuatro reglas: VIP (las demás: guion) → sí; no VIP, tres pedidos, sin devolución → sí; no VIP, menos de tres pedidos → no; no VIP, tres pedidos, con devolución → no.
10. Una máquina funciona cuando se pulsa arranque, la protección está cerrada, y no están activos ni la parada de emergencia ni un fallo. Condiciones start, guard_closed, estop, fault. Construye la tabla de 16 filas, enumera las filas en que funciona y colápsala. 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
Una sola fila funciona: start = TRUE, guard_closed = TRUE, estop = FALSE, fault = FALSE (fila 12). Colapsada a cinco reglas: sin arranque → no; arranque, protección abierta → no; arranque, protección cerrada, parada de emergencia → no; arranque, protección cerrada, sin parada, fallo → no; las cuatro condiciones como se exige → sí. Cada condición bloqueante colapsa las filas posteriores, así que las cinco reglas cubren las dieciséis combinaciones.
Preguntas
¿Qué combinaciones son inviables y qué hago con ellas?
Algunas combinaciones no pueden darse: un año divisible por 400 siempre es divisible por 100, así que divisible_by_100 = FALSE, divisible_by_400 = TRUE nunca ocurre. La tabla completa sigue listando la fila, y el motor calcula la regla en ella; en un diseño de pruebas la marcas como inviable en lugar de escribir una prueba para ella, y lo dices en la tabla.
Relacionado
Comparar
Véase también
- Prueba con tabla de decisión, ejemplo resuelto (estilo ISTQB Foundation 4.2.3)
- Tabla de decisión frente a tabla de verdad: cuándo usar cada una
- Tabla de decisión: definición, ejemplo y equivalente en inglés
- Regla de envío gratis: (mas_de_50 OR prime) AND NOT voluminoso AND nacional
- Regla del año bisiesto: (div4 AND NOT div100) OR div400
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.