Skip to content

MC/DC (modified condition/decision coverage): meaning and examples

MC/DC, modified condition/decision coverage, requires that every condition in a decision be shown to independently affect the outcome: for each condition, a pair of tests that differ only in that condition and give different decisions.

MC/DC combines three requirements: every decision takes both values, every condition takes both values, and every condition has an independence pair. A decision with n conditions therefore needs at least n + 1 test cases, far fewer than the 2 to the power n of the full table, which is why avionics and other safety standards adopted it. The criterion catches errors that decision and condition coverage miss, such as a condition that is present in the expression but combined in a way that never lets it matter.

The artefact on this page is the entry rule (member OR invited) AND NOT banned, true on rows 2, 4 and 6. An independence pair for invited can be read from the two assignments the checks report: the tautology counterexample member = FALSE, invited = FALSE, banned = FALSE gives the decision FALSE, the satisfiable witness member = FALSE, invited = TRUE, banned = FALSE gives it TRUE, and the two differ only in invited. Pairs for member and banned are found the same way on the table.

MC/DC is required for the most critical software levels in aerospace and used in automotive and medical standards; outside those fields it is the most familiar name for “test each condition, not just the whole”. The engine computes independence pairs for each input of a rule. The term is confused with multiple condition coverage, which needs every combination, and with condition coverage, which lacks the independence requirement.

Example

allow := (member OR invited) AND NOT banned · output

Exact checks

Always true (tautology)? No Counterexample: member = F, invited = F, banned = F · Exhaustively checked and solver cross-checked · 1 rows
Always false (contradiction)? No Counterexample: member = F, invited = T, banned = F · Exhaustively checked and solver cross-checked · 3 rows
Can be true? Yes Example assignment: member = F, invited = T, banned = F · Exhaustively checked and solver cross-checked · 3 rows

Truth table (8 rows)

MC/DC (modified condition/decision coverage): meaning and examples
#memberinvitedbannedallow
0FALSEFALSEFALSEFALSE
1FALSEFALSETRUEFALSE
2FALSETRUEFALSETRUE
3FALSETRUETRUEFALSE
4TRUEFALSEFALSETRUE
5TRUEFALSETRUEFALSE
6TRUETRUEFALSETRUE
7TRUETRUETRUEFALSE

Plain-language reading

Beginnerallow is true exactly when both of the following hold:
1. at least one of member or invited is true (both may be true)
2. banned is false
In every other case, allow is false.
About the operators:
- AND is true only when all of its parts are true.
- OR is inclusive: it is true when at least one part is true, including when several are.
- NOT reverses a value: true becomes false and false becomes true.
Intermediateallow is true exactly when both of the following hold:
1. at least one of member or invited is true (both may be true)
2. banned is false
In every other case, allow is false.
Advancedallow is true exactly when both of the following hold [conjunction ∧]:
1. at least one of member or invited is true (both may be true) [inclusive disjunction ∨]
2. banned is false [negation ¬]
In every other case, allow is false.
Formal notation: (member ∨ invited) ∧ ¬banned

The common slip

Choosing test cases that flip two conditions at once. If both member and banned change between two tests, a different outcome proves nothing about either; an independence pair must hold every other condition fixed. The pitfall page on coverage versus correctness adds that even full MC/DC does not prove the rule right.

Questions

How many tests does MC/DC need for this rule?

At least four for three conditions, since each independence pair shares cases with the others. The testing page on MC/DC explained builds such a set for a rule like this one, and the exercises page gives practice.

Related

See also

Glossary

Generated from the Tangibool engine, semantics tangibool-semantics/1, engine 1.0.0, build . Every table, map, simplification and verdict on these pages was computed by the Tangibool engine when the site was built, and every claim was re-checked by the same exact checker the app uses. Limits are stated where they apply. © 2026 Foreranger LTD.