Chapter - Four Structural (White Box) Testing Part I
Chapter - Four Structural (White Box) Testing Part I
2
White Box testing
White-box testing (also called clear box testing, glass box
testing, transparent box testing, or structural testing) is a
method of testing software that tests internal structures or
workings of an application [the tester has access to the
internal data structures and algorithms including the code
that implement these.]
White box testing methods are especially useful for
revealing design and code-based control, logic and
sequence defects, initialization defects, and data flow
defects.
3
Control flow refers to flow of control from one instruction to another
Figure 1: The process of generating test input data for control flow testing.
5
Basic Idea
Two kinds of basic program statements:
– Assignment statements (Ex. x = 2*y; )
Program path
– A program path is a sequence of statements from entry to exit.
– There can be a large number of paths in a program.
– There is an (input, expected output) pair for each path.
– Executing a path requires invoking the program unit with the
right/correct test input.
– Paths are chosen by using the concepts of path selection criteria.
6
Outline of Control Flow Testing
Inputs to the test generation process
– Source code
– Path selection criteria
Generation of control flow graph (CFG)
– A CFG is a graphical representation of a program unit.
– Compilers are modified to produce CFGs if test generation is automated
or You can draw one by hand.
Selection of paths
– Enough entry/exit paths are selected to satisfy path selection criteria.
Generation of test input data
– Two kinds of paths
• Feasible path/ Executable path: There exists input so that the
path is executed.
• Infeasible path: There is no input to execute the path.
7 – Solve the path conditions to produce test input for each path.
Control Flow Graph
• Example code: Re t ur nAve r a ge ( )
public static double ReturnAverage (int value[], int AS, int MIN, int MAX)
{
int i, ti, tv, sum;
double av;
i = 0; ti = 0; tv = 0; sum = 0;
while (ti < AS && value[i] ! = -999)
{
ti++;
if (value[i] > = MIN && value[i] < = MAX)
{
tv + + ;
sum = sum + value[i];
}
i++ ;
}
if (tv > 0)
av = (double) sum/tv;
else
av = (double) -999; return (av);
}
8
Control Flow Graph cont’d…
9
Paths in a Control Flow Graph
– Path 1: 1-2-3(F)-10(T)-12-13
– Path 2: 1-2-3(F)-10(F)-11-13
– Path 3: 1-2-3(T)-4(T)-5-6(T)-
7(T)-8-9-3(F)-10(T)-12-13
– Path 4: 1-2-3(T)-4(T)-5-6-7(T)-
8-9-3(T)-4(T)-5-6(T)-7(T)-8-9-3(F)
-10(T)-12-13
10
Path Selection Criteria
Program paths are selectively executed.
Question: What paths do I select for testing?
The concept of path selection criteria is used to answer the
above question.
Advantages of selecting paths based on defined criteria:
– Ensure that all program constructs are executed at least once. (The
12
Path Selection Criteria…
2.Statement coverage criterion
– Statement coverage means executing individual program statements (nodes) and
observing the output.
– 100% statement coverage means all the statements have been executed at least once.
•Cover all assignment statements (i=0, ti=0,tv=0, sum=0) represented by node 2 in
CFG
•Cover all conditional statements, ((ti < AS && value[i] != -999) represented by nodes
3,4, 6, 7 and 10 in CFG.
– Less than 100% statement coverage is unacceptable.
– Since a single entry–exit path includes many nodes, we need to select just a few
14 Figure 3
Path Selection Criteria…
16
Path Selection Criteria
– Example of Paths selected based on
Branch coverage criterion and CFG
17
Path Selection Criteria…
For example, if the outcomes are binary, you need to test both True and False outcomes.
The formula to calculate Branch coverage:
Branch coverage = Number of executed branch *100
Total number of Branches
• Example:
Demo(int a)
If (a> 5)
a= a*3
else Scenario 1: Value of a is 2 Scenario 2: Value of a is 6
Print (a)
}
19
Generating Test Input
1 Input vector
– An input vector is a collection of all data entities read by the
routine whose values must be fixed prior to entering the routine.
– Members of an input vector can be as follows.
• Input arguments to the routine
• Global variables and constants
• Files
• Contents of registers (in Assembly language programming)
• Network connections
• Timers
– Example: The input vector of ReturnAverega() shown in Figure 2 is
<value[], AS, MIN, MAX>.
20
Generating Test Input
2 Predicate
– A predicate is a logical function evaluated at a decision point.
– Example of a predicate: the construct ti < A S is a predicate in node 3 of
Figure 2.
– Example of a predicate: Value[i]<=Max is a predicate in node 7 of Figure 2.
3 Path predicate
– A path predicate is the set of predicates associated with a path.
– The path in Figure 2 indicates that nodes 3, 4, 6, 7, and 10 are decision
nodes
– An example path from Fig. 2:
1-2-3(T)-4(T)-5-6(T)-7(T)-8-9-3(F)-10(T)-12-13.
– The example of path predicate for the path shown in Figure 2.
ti < AS ≡ True
value[i] ! = -999≡ True
value[i] > = MIN ≡ True
value[i] < = MAX ≡ True
21 ti < AS ≡ False
tv > 0 ≡True
Generating Test Input
4-Predicate interpretation
– The path predicate shown in Figure 2 from the previous slide is composed
of elements of the input vector < value[], AS, M IN, M A X > , a vector
of local variables < i, ti, tv > , and the constant -999.
– Local variables play no role in selecting inputs that force a path to execute.
– Local variables can be eliminated by a process called symbolic execution.
– Predicate interpretation is defined as the process of
– symbolically substituting operations along a path in order to express the
predicate only in terms of the input vector and a constant vector.
– A predicate may have different interpretations depending on how control reaches
the predicate.
– Examples of Predicate interpretation
▪Example#1:
The predicate ti<AS can rewritten as 0<AS
▪Example#2:
The predicate Value[i]>=MIN can rewritten as Value[0]>=MIN
22
Generating Test Input
23
Generating Test Input…
slide.
0 < AS ≡ True …… (1)
value[0] != -999 ≡ True …… (2)
value[0] >= MIN ≡ True …… (3)
value[0] <= MAX ≡ True …… (4)
1 < AS ≡ False …… (5)
1 > 0 ≡ True …… (6)
– An example of infeasible path from Figure 2.
1-2-3(T)-4(F)-10(T)-12-13
25
Generating Test Input
26
Generating Test Input
6- Generating input data from a path predicate expression
We must solve the corresponding path predicate expression in order to
generate input data which can force a program to execute a selected path.
Consider the path predicate expression that is feasible of Figure 2
0 < AS≡ True …… (1)
value[0] != -999 ≡ True …… (2)
value[0] >= MIN ≡ True …… (3)
value[0] <= MAX ≡ True …… (4)
1 < AS ≡ False …… (5)
1 > 0 ≡ True …… (6)
– Input data satisfying constraints for the above predicate expression.
AS = 1
MIN = 25
MAX = 35
Value[0] = 30
– Note: The above set is not unique.
27
Summary
Control flow is a fundamental concept in program execution.
A program path is an instance of execution of a program unit.
Select a set of paths by considering path selection criteria.
• Statement coverage
• Branch coverage
• Predicate coverage
• All paths
From source code, derive a CFG (compilers are modified for this.)
Select paths from a CFG based on path selection criteria.
Extract path predicates from each path.
Solve the path predicate expression to generate test input data.
There are two kinds of paths.
• feasible
• infeasible
28