Decision Table Testing
Map every combination of conditions to their expected actions in a table. Each column is a test case. This technique is the gold standard for testing complex business rules.
What it is
A decision table is a matrix that systematically covers all combinations of input conditions and shows what action should result from each combination. It forces you to think about every scenario — including the ones you'd otherwise miss.
It's most useful when: multiple conditions interact, business rules are complex, or you need to prove exhaustive coverage to stakeholders.
Table structure
- Conditions (rows, top half) — the inputs or rules that can be true or false.
- Actions (rows, bottom half) — what the system does in response.
- Rules (columns) — each column is one combination of conditions. Each column = one test case.
For N binary conditions, the full table has 2N columns. 3 conditions = 8 test cases. Many can be merged when the action is identical regardless of one condition's value.
Worked example
A discount system: users get a discount if they are a member AND their order total is > $100. Members always get free shipping; non-members only get free shipping on orders > $100.
| Condition / Action | Rule 1 | Rule 2 | Rule 3 | Rule 4 |
|---|---|---|---|---|
| Is member? | Y | Y | N | N |
| Order > $100? | Y | N | Y | N |
| Apply discount? | Yes | No | No | No |
| Free shipping? | Yes | Yes | Yes | No |
Each column (Rule 1–4) maps directly to a test case with defined inputs and expected outcomes. No ambiguity, no missed scenarios.
Reducing the table
When an action is the same regardless of one condition's value, you can collapse columns using a "don't care" value (often written as — or *). This reduces test count while maintaining coverage.
In the example above, free shipping for members applies regardless of order total — Rules 1 and 2 could be merged for the free-shipping action.
ISTQB mapping
| Ref | Topic | Level |
|---|---|---|
| 4.2.3 | Decision Table Testing | CTFL Foundation |
| FL-4.2.3 K3 | Apply decision table testing to derive test cases | Foundation LO |
| CTAL-TA 3.2.3 | Advanced decision tables, minimisation, cause-effect | Advanced / Senior |
When to use it
- When there are 2–5 conditions with interactions that matter
- When business logic is defined as "if A and B but not C, then..."
- When you need to show a stakeholder you've covered all scenarios
- As a precursor to test case writing — the table is your test design
Avoid for simple cases: If there's only one condition, use EP/BVA instead. Decision tables shine with 2+ interacting conditions.
Practice this technique: Try Junior Practice 09 — Checkbox & radio logic, Junior Practice 04 — NZ checkout form.
NZ example — GST pricing rules
New Zealand GST (Goods and Services Tax) is 15%. An e-commerce checkout must apply GST correctly based on two conditions: whether the customer is GST-registered (they can claim it back) and whether the product is GST-exempt (some items like financial services are exempt).
| Condition / Action | Rule 1 | Rule 2 | Rule 3 | Rule 4 |
|---|---|---|---|---|
| Customer is GST-registered? | Y | Y | N | N |
| Product is GST-exempt? | N | Y | N | Y |
| Show price | Ex-GST | GST-exempt | GST-inclusive | GST-exempt |
| Add GST line item? | Yes | No | No | No |
Each rule = one test case. The decision table ensures all four combinations are covered. A common bug is that GST-registered customers get charged GST on exempt products (Rule 2 missing or wrong).
NZ online store — free shipping decision table
A NZ online store gives free shipping based on two conditions: (A) customer has an active loyalty card, (B) order total is $75 or more. The condition rows are filled in for you — complete the action rows by selecting Yes or No for each rule.
| Condition / Action | Rule 1 | Rule 2 | Rule 3 | Rule 4 |
|---|---|---|---|---|
| Loyalty card? | Y | Y | N | N |
| Order ≥ $75? | Y | N | Y | N |
| Free shipping? | ||||
| Loyalty discount? |
| Condition / Action | Rule 1 | Rule 2 | Rule 3 | Rule 4 |
|---|---|---|---|---|
| Loyalty card? | Y | Y | N | N |
| Order ≥ $75? | Y | N | Y | N |
| Free shipping? | Yes | Yes | Yes | No |
| Loyalty discount? | Yes | Yes | No | No |
Free shipping: loyalty card OR order ≥ $75 (either condition is sufficient).
Loyalty discount: loyalty card only (regardless of order total).