terminating conditions of For-loops, While loops and Repeat loops may cause defects to move around the boundary conditions.
c) The requirements themselves may not be clearly understood, especially around the boundaries, thus causing even the correctly coded program to not perform the correct way.
The basic idea of BVA is to use input variable values at their minimum, just above the minimum, a nominal value, just below their maximum and at their maximum. Meaning thereby (min, min+, nom, max-, max), as shown in the fiollowing figure.
BVA is based upon a critical assumption that is known as “Single fault assumption theory”. According to this assumption, we derive the test cases on the basis of the fact that failures are not due to simultaneous occurrence of two (or more) faults. So, we derive test cases by holding the values of all but one variable at their nominal values and allowing that variable assume its extreme values.
If we have a function of n-variables, we hold all but one at the nominal values and let the remaining variable assume the min, min+, nom, max-and max values, repeating this for each variable. Thus, for a function of n variables, BVA yields (4n + 1) test cases.
Limitations of BVA:
1) Boolean and logical variables present a problem for Boundary Value Analysis.
2) BVA assumes the variables to be truly independent which is not always possible.
3) BVA test cases have been found to be rudimentary because they are obtained with very little insight and imagination.
Robustness Testing is another variant of BVA
In BVA, we remain within the legitimate boundary of our range i.e. for testing we consider values like (min, min+, nom, max-, max) whereas in Robustness testing, we try to cross these legitimate boundaries as well.
Thus for testing here we consider the values like (min-, min, min+, nom, max-, max, max+)
Again, with robustness testing, we can focus on exception handling. With strongly typed languages, robustness testing may be very awkward. For example, in PASCAL, if a variable is defined to be within a certain range, values outside that range result in run-time errors thereby aborting the normal execution.
For a program with n-variables, robustness testing will yield (6n + 1) test-cases. Thus we can draw the following Robustness Test Cases graph.
Each dot represents a test value at which the program is to be tested. In Robustness testing, we cross the legitimate boundaries of input domain. In the above graph, we show this by dots that are outside the range [a, b] of variable x1. Similarly, for variable x2, we have crossed its legitimate boundary of [c, d] of variable x2.
This type of testing is quite common in electric and electronic circuits. Furthermore, this type of testing also works on 'single fault assumption theory'.
Worst Case Testing:
If we reject our basic assumption of single fault assumption theory and focus on what happens when we reject this theory-it simply means that we want to see that what happens when more than one variable has an extreme value. In electronic circuit analysis, this is called as "worst-case analysis". We use this idea here to generate worst-case test cases.
For each variable, we start with the five-element set that contains the min, min+, nom, max-, and max values. We then take the Cartesian product of these sets to generate test cases. This is shown in following graph
For a program with n-variables, 5n test cases are generated.
Guidelines for BVA:
1) The normal versus robust values and the single fault versus the multiple-fault assumption theory result in better ttjung. These methods can be applied to both input and output domain of any program.
2) Robustness testing is a good choice for testing internal variables.
3) We must bear in mind that we can create extreme boundary results from non-extreme input values.
Many More Articles & Tutorials on Black Box Testing