Just take a look at this website: http://www.sqlite.org/testing.html
They test everything. One particular term caught my eye, because I didn’t understand it.
100% modified condition / decision coverage
What does this mean?
First, what is 100% decision coverage? For each conditional, both the true and false branch must have test coverage.
Consider A & B, the following two cases provide 100% decision coverage:
A = true, B = true
A = true, B = false
But these cases don’t provide 100% condition coverage, which states that both A and B take on all possible values. These cases provide 100% condition coverage, but not 100% decision coverage:
A = true, B = false
B = false, A = true
What about 100% condition / decision coverage? Each decision and each conditional must take on all possible values at least once.
A = true, B = true
A = false, B = false
These test cases provide condition / decision coverage.
Finally, what is modified condition / decision coverage? Like, condition / decision coverage, each conditional and decision must take on all possible values. The additional restriction is that each condition must affect the decision independently.
The above cases don’t provide 100% MC / DC coverage, because of this case:
A = false, B = false
If we hold one fixed, the decision of A & B is not affected by the value of the other.
We would need 3 cases:
A = true, B = true
A = true, B = false
A = false, B = true
To satisfy 100% MC / DC coverage. Pretty strong requirement huh?
Oh and every entry / exit point of the program must be exercised, but that’s a minor detail.