Testing - Blackbox
Testing - Blackbox
Testing - Blackbox
(Unit 5)
1
How Do You Test a
Program?
● Input test data to the
program.
● Observe the output:
– Checkif the program
behaved as expected.
2
How Do You Test a
Program?
3
How Do You Test a
Program?
● If the program does not
behave as expected:
– Notethe conditions under
which it failed.
– Later debug and correct.
4
Important Terminologies
Mistake, Error, Failure, Test case, Test
scenario, Test script, Test suite,
Testability, Failure mode, Equivalent
faults
5
● Mistake: It is essentially any programmer
action that later shows up as an incorrect
result during program execution. E.g,
uninitialization of some variables,
overlooking exceptional conditions like
division by zero. It can lead to an
incorrect result.
● Error: It is the result of a mistake
committed by a developer in any of the
development activities. E.g an error is call
made to a wrong function. 6
● Failure : A failure is a manifestation of
an error (aka defect or bug).
– Mere presence of an error may not lead
to a failure.
E.g A program crashes on an input, A robot
fails to avoid an obstacle and collides with
it.
7
● Test Case is a triplet [I,S,O]
–I is the data to be input to the
system,
–S is the state of the system at
which the data will be input,
–O is the expected output of the
system.
Example
8
● Positive Test Case: It is designed to
test whether the software correctly
performs a required functionality.
● Negative Test case: It is designed to
test whether the software carries out
something that is not required of the
system.
Example: Login related test case
9
● Test scenario: It is an abstract test
case as it only identifies the aspects of
the program that are to be tested without
identifying the input, state or output.
The test case is an implementation of a test
scenario.
10
● Test Script : It is an encoding of a test
case as a short program. Developed for
automated execution of test cases.
11
● Testability: testability of a requirement
is the degree to which an implementation
of it can be adequately tested to
determine its conformance to the
requirement.
● Failure Mode: of a software denotes an
observable way in which it can fail. E.g. for
a online train reservation system, the
failure modes are: failing to book an
available seat, incorrect seat booking and
system crash. 12
● Equivalent Fault: It denote two or more
bugs that result in the system failing in
the same failure mode.
● E.g. division by zero and illegal memory
access errors leads to program crash.
13
Verification versus
Validation
● Verification is the process of
determining:
– Whether output of one phase of
development conforms to its previous
phase.
15
Overview of Testing Activities
● Test Suite Design
● Run test cases and observe
results to detect failures.
● Debug to locate errors
● Correct errors.
16
Testing process
17
Design of Test Cases
● Exhaustive testing of any non-
trivial system is impractical:
– Input data domain is extremely large.
18
Design of Test Cases
● If test cases are selected randomly:
– Many test cases would not contribute to
the significance of the test suite,
– Would not detect errors not already being
detected by other test cases in the suite.
● Number of test cases in a randomly
selected test suite:
– Not an indication of effectiveness of
testing.
19
Design of Test Cases
● Testing a system using a large
number of randomly selected test
cases:
– Doesnot mean that many errors in
the system will be uncovered.
● Consider following example:
– Find
the maximum of two integers x
and y.
20
Design of Test Cases
● The code has a simple programming error:
● If (x>y) max = x;
else max = x;
● Test suite {(x=3,y=2);(x=2,y=3)} can
detect the error,
● A larger test suite {(x=3,y=2);(x=4,y=3);
(x=5,y=1)} does not detect the error.
21
Design of Test Cases
● Systematic approaches are
required to design an optimal
test suite:
– Each test case in the suite
should detect different errors.
22
Design of Test Cases
● There are essentially two
main approaches to design
test cases:
– Black-box approach/ Functional
testing
– White-box (or glass-box) /
structural testing approach
23
Black-Box Testing
● Test cases are designed using only
functional specification of the
software:
– Without any knowledge of the
internal structure of the software.
● For this reason, black-box testing
is also known as functional
testing.
24
White-box Testing
● Designing white-box test cases:
– Requires knowledge about the
internal structure of software.
– White-box testing is also called
structural testing.
– In this unit we will not study white-
box testing.
25
Black-Box Testing
● There are essentially two
main approaches to design
black box test cases:
– Equivalence class partitioning
– Boundary value analysis
26
Equivalence Class
Partitioning
● Input values to a program are
partitioned into equivalence
classes.
● Partitioning is done such that:
– Program behaves in similar ways
to every input value belonging to
an equivalence class.
27
Why Define Equivalence
Classes?
● Test the code with just one
representative value from
each equivalence class:
– As good as testing using any
other values from the
equivalence classes.
28
Equivalence Class
Partitioning
● How do you determine the
equivalence classes?
– Examine the input data.
– Few general guidelines for
determining the equivalence
classes can be given
29
Equivalence Class
Partitioning
● If the input data to the program is
specified by a range of values:
– e.g. numbers between 1 to 5000.
– One valid and two invalid equivalence
classes are defined.
1 5000
30
Equivalence Class Partitioning
● If input is an enumerated set of
values:
– e.g. {a,b,c}
– One equivalence class for valid input
values.
– Another equivalence class for invalid input
values should be defined.
31
Example
● A program reads an input value
in the range of 1 and 5000:
– Computes the square root of the
input number
SQR
T
32
Example (cont.)
● There are three equivalence classes:
– The set of negative integers,
1 5000
33
Example (cont.)
1 5000
34
Boundary Value Analysis
● Some typical programming errors occur:
– At boundaries of equivalence classes
35
Boundary Value Analysis
● Programmers may improperly
use < instead of <=
● Boundary value analysis:
– Select test cases at the
boundaries of different
equivalence classes.
36
Example
● For a function that computes
the square root of an integer in
the range of 1 and 5000:
– Test cases must include the
values: {0,1,5000,5001}.
1 5000
37
Examples
38
Software Testing
Example- 8.I
39
39
Software Testing
Solution
40
40
Software Testing
The boundary value test cases are :
Test Case a b c Expected output
1 0 50 50 Not Quadratic
2 1 50 50 Real Roots
3 50 50 50 Imaginary Roots
4 99 50 50 Imaginary Roots
5 100 50 50 Imaginary Roots
6 50 0 50 Imaginary Roots
7 50 1 50 Imaginary Roots
8 50 99 50 Imaginary Roots
9 50 100 50 Equal Roots
10 50 50 0 Real Roots
11 50 50 1 Real Roots
12 50 50 99 Imaginary Roots
13 50 50 100 Imaginary Roots
41
41
Software Testing
Example – 8.2
Consider a program for determining the Previous date. Its input is a triple of day,
month and year with the values in the range
1 ≤ month ≤ 12
1 ≤ day ≤ 31
1900 ≤ year ≤ 2025
The possible outputs would be Previous date or invalid input date. Design the
boundary value test cases.
42
42
Software Testing
Solution
The Previous date program takes a date as input and checks it for validity. If valid,
it returns the previous date as its output.
With single fault assumption theory, 4n+1 test cases can be designed and which are
equal to 13.
43
43
Software Testing
The boundary value test cases are:
Test Case Month Day Year Expected output
44
44
Software Testing
Example – 8.3
45
45
Software Testing
Solution
The boundary value test cases are shown below:
1 50 50 1 Isosceles
2 50 50 2 Isosceles
3 50 50 50 Equilateral
4 50 50 99 Isosceles
5 50 50 100 Not a triangle
6 50 1 50 Isosceles
7 50 2 50 Isosceles
8 50 99 50 Isosceles
9 50 100 50 Not a triangle
10 1 50 50 Isosceles
11 2 50 50 Isosceles
12 99 50 50 Isosceles
13 100 50 50 Not a triangle
46
46
Software Testing
Example 8.7
47
47
Software Testing
Solution
Output domain equivalence class test cases can be identified as follows:
O1={<a,b,c>:Not a quadratic equation if a = 0}
O1={<a,b,c>:Real roots if (b2-4ac)>0}
O1={<a,b,c>:Imaginary roots if (b2-4ac)<0}
O1={<a,b,c>:Equal roots if (b2-4ac)=0}`
The number of test cases can be derived form above relations and shown below:
48
Software Testing
We may have another set of test cases based on input domain.
I1= {a: a = 0}
I2= {a: a < 0}
II3=
= {a: 1a >
{a: ≤ 100}
a ≤ 100}
4
I5= {b: 0 ≤ b ≤ 100}
II67=
= {b:
{b: b
b<> 0}
100}
I8= {c: 0 ≤ c ≤ 100}
I9= {c: c < 0}
I10={c: c > 100}
49
49
Software Testing
Here test cases 5 and 8 are redundant test cases. If we choose any
value other than nominal, we may not have redundant test cases.
50
Hence total test cases are 10+4=14 for this problem.
50
Software Testing
Example 8.8
Consider the program for determining the previous date in a calendar as explained in
example 8.3. Identify the equivalence class test cases for output & input domains.
51
51
Software Testing
Solution
Output domain equivalence class are:
O1={<D,M,Y>: Previous date if all are valid inputs}
O1={<D,M,Y>: Invalid date if any input makes the date invalid}
52
52
Software Testing
We may have another set of test cases which are based on input
domain.
I1={month: 1 ≤ m ≤ 12}
I2={month: m < 1}
I3={month: m > 12}
={day: D
I54={day: 1 ≤<D1}≤ 31}
I6={day: D > 31}
I7={year: 1900 ≤ Y ≤ 2025}
I8={year: Y < 1900}
I9={year: Y > 2025}
53
53
Software Testing
54
54
Software Testing
Example – 8.9
Consider the triangle problem specified in a example 8.3. Identify the equivalence
class test cases for output and input domain.
55
55
Software Testing
Solution
Output domain equivalence classes are:
1 50 50 50 Equilateral
2 50 50 99 Isosceles
3 100 99 50 Scalene
4 50 100 50 Not a triangle
56
56
Software Testing
57
57
Software Testing
58
Software Testing
1 0 50 50 Invalid input
2 101 50 50 Invalid input
3 50 50 50 Equilateral
4 50 0 50 Invalid input
5 50 101 50 Invalid input
6 50 50 50 Equilateral
7 50 50 0 Invalid input
8 50 50 101 Invalid input
9 50 50 50 Equilateral
10 60 60 60 Equilateral
11 50 50 60 Isosceles
12 50 60 50 Isosceles
13 60 50 50 Isosceles
59
59
Software Testing
14 100 99 50 Scalene
15 100 50 50 Not a triangle
60
60
Debugging
● Once errors are identified:
– Itis necessary identify the precise
location of the errors and to fix
them.
● Each debugging approach has its
own advantages and disadvantages:
– Each is useful in appropriate
circumstances.
61
Brute-Force method
● This is the most common method of
debugging:
– Least efficient method.
– Program is loaded with print statements
– Print the intermediate values
– Hope that some of printed values will
help identify the error.
62
Symbolic Debugger
● Brute force approach becomes more
systematic:
– With the use of a symbolic debugger,
– Symbolic debuggers get their name for
historical reasons
– Early debuggers let you only see
values from a program dump:
● Determine which variable it corresponds to.
63
Symbolic Debugger
● Using a symbolic debugger:
– Values of different variables can be
easily checked and modified
– Singlestepping to execute one
instruction at a time
– Break points and watch points can be
set to test the values of variables.
64
Backtracking
● This is a fairly common
approach.
● Beginning at the statement where
an error symptom has been
observed:
– Source code is traced
backwards until the error is
discovered.
65
Backtracking
● Unfortunately, as the number of
source lines to be traced back
increases,
– the number of potential backward
paths increases
– becomes unmanageably large for
complex programs.
66
Cause-elimination method
● Determine a list of causes:
– which could possibly have contributed
to the error symptom.
– tests are conducted to eliminate each.
● A related technique of identifying
error by examining error symptoms:
– software fault tree analysis.
67
Program Slicing
● This technique is similar to back
tracking.
● However, the search space is reduced
by defining slices.
● A slice is defined for a particular
variable at a particular statement:
– set of source lines preceding this statement
which can influence the value of the
variable.
68
Example
int main(){
int i,s;
i=1; s=1;
while(i<=10){
s=s+i;
i++;}
printf(“%d”,s);
printf(“%d”,i);
}
69
Debugging Guidelines
● Debugging usually requires a thorough
understanding of the program design.
● Debugging may sometimes require full
redesign of the system.
● A common mistake novice programmers
often make:
– not fixing the error but the error
symptoms.
70
Debugging Guidelines
● Be aware of the possibility:
– anerror correction may introduce
new errors.
● After every round of error-
fixing:
– regression testing must be
carried out.
71
Summary
● Exhaustive testing of almost
any non-trivial system is
impractical.
– weneed to design an optimal
test suite that would expose
as many errors as possible.
72
Summary
● If we select test cases randomly:
– many of the test cases may not add
to the significance of the test suite.
● There are two approaches to testing:
– black-box testing
– white-box testing.
73
Summary
● Black box testing is also known as
functional testing.
● Designing black box test cases:
– Requires understanding only SRS document
– Does not require any knowledge about design
and code.
74
Summary
● We discussed black-box test
case design strategies:
– Equivalence partitioning
– Boundary value analysis
● We discussed some important
issues in integration and system
testing.
75