This post is for these who would like to prepare themselves for ISTQB exam and have difficulties with understanding the difference between various types of coverage. Let's consider following piece of a code:
public int returnInput(int input, boolean condition1, boolean condition2, boolean condition3) {
int x = input;
int y = 0;
if (condition1)
x++;
if (condition2)
x--;
if (condition3)
y=x;
return y;
}
Statement coverage
In
order to execute every statement we need only one testcase which would
set all conditions to true, every line of a code (statement) is touched.
shouldReturnInput(x, true, true, true) - 100% statement covered
But
only half of branches are covered and only one path.
Branch coverage
You can visualize every "if-statment" as two
branches (true-branch and false-branch). So it can clearly be seen
that the above testcase follows only "true-branches" of every
"if-statement". Only 50% of branches are covered.
In order to cover 100% of branches we would need to add following testcase:
shouldReturnInput(x, false, false, false)
With these two testcases we have 100% statements covered, 100% branches covered
Path coverage
Nevertheless
there is still a concept of path coverage. In order to understand path
coverage it is good to visualize the above code in a form of a binary
tree
As you probably see the above two testcases cover only two paths t-t-t and f-f-f while in fact there are 8 separate paths:
1-2-3
t -t -t - covered with testcase 1
t -t -f
t -f -t
t -f -f
f -t -t
f -t -f
f -f -t
f -f -f - covered with testcase 2