2002Nov26Testing

advertisement
Business results
Business
modeling process
A Traditional Software
Development Process
Requirements
analysis
System test
Analysis
Integration test
Architectural
design
Unit test
Detailed design
Nov 2002
91.3913
R McFadyen
1
Black Team
Peopleware: Productive Projects and Teams
by Tom Demarco and Timothy Lister
Ch 19: The Black Team
•"legendary" Black Team at IBM in 60’s
•a particularly effective testing team
•the best testers at the company
•testers delighted in finding new ways to break
software
•programmers dreaded having their software go
through Black Team testing
•promoted themselves by dressing all in black
•the spirit of the Black Team has survived
Nov 2002
91.3913
R McFadyen
2
Testing
Unit testing
•White-box testing
•Black-box testing
Nov 2002
91.3913
R McFadyen
3
White-box Testing
•Tests are derived from knowledge of the software’s
construction
•aka structural, glass-box, or clear-box testing
•Tester analyzes the code, the algorithm, to derive tests
Nov 2002
91.3913
R McFadyen
4
Whitebox testing
Tests are derived from knowledge of the software’s construction
Path testing: A whitebox testing technique based on flow of
control
•Construct a flow graph for Cyclomatic Complexity
•gives us the maximum number of tests necessary to cover all
edges in the flow graph
•Design test cases such that each transition is traversed at least
once - examine each condition and select an input for the true
branch and another for the false branch
•Each test should contain an edge that is not contained in any
other test
Nov 2002
91.3913
R McFadyen
5
White-box Testing Example
FindMean(float Mean, FILE ScoreFile)
…see next slide
What is the flow graph for FindMean?
What is the CC?
What tests can we generate from the flowgraph/CC … to
know all paths have been executed?
Nov 2002
91.3913
R McFadyen
6
White-box Testing Example
FindMean(float Mean, FILE ScoreFile)
{ SumOfScores = 0.0; NumberOfScores = 0; Mean = 0;
Read(ScoreFile, Score);
/*Read in and sum the scores*/
while (! EOF(ScoreFile) {
if ( Score > 0.0 ) {
SumOfScores = SumOfScores + Score;
NumberOfScores++;
}
Read(ScoreFile, Score);
}
/* Compute the mean and print the result */
if (NumberOfScores > 0 ) {
Mean = SumOfScores/NumberOfScores;
printf("The mean score is %f \n", Mean);
} else
printf("No scores found in file\n");
}
Nov 2002
91.3913
R McFadyen
7
Prepare for Flow Graph
FindMean (FILE ScoreFile)
{ float SumOfScores = 0.0;
int NumberOfScores = 0;
float Mean=0.0; float Score;
Read(ScoreFile, Score);
2 while (! EOF(ScoreFile) {
3 if (Score > 0.0 ) {
SumOfScores = SumOfScores + Score;
NumberOfScores++;
}
4
5
Read(ScoreFile, Score);
}
/* Compute the mean and print the result */
6 if (NumberOfScores > 0) {
Mean = SumOfScores / NumberOfScores;
printf(“ The mean score is %f\n”, Mean);
} else
printf (“No scores found in file\n”);
9 }
Nov 2002
1
91.3913
R McFadyen
7
8
8
Constructing the Logic Flow Diagram
CC = 11-9+2 = 4
1
Note: If node 4 is included then
node 7 must be included
1, 2, 6, 8, 9 ok
2
1, 2, 6, 7, 9 is not possible
1, 2, 3, 4, 5, 2, 6, 7, 9 ok
3
4
1, 2, 3, 4, 5, 2, 6, 8, 9 is not possible
5
1, 2, 3, 5, 2, 6, 8, 9 ok
6
1, 2, 3, 5, 2, 6, 7, 9 is not possible
7
8
9
Nov 2002
These 3 tests cover all paths!
We didn’t need 4!
Every line of code is tested!
91.3913
R McFadyen
9
Constructing the Logic Flow Diagram
CC = 11-9+2 = 4
1
1, 2, 6, 8, 9
2
Test with no records in
the file
3
4
5
6
7
8
9
Nov 2002
91.3913
R McFadyen
10
Constructing the Logic Flow Diagram
CC = 11-9+2 = 4
1
2
1, 2, 3, 4, 5, 2, 6, 7, 9
3
4
A test with one
positive score
5
6
7
8
9
Nov 2002
91.3913
R McFadyen
11
Constructing the Logic Flow Diagram
CC = 11-9+2 = 4
1
2
1, 2, 3, 5, 2, 6, 8, 9
3
A test with one negative
score
4
5
6
7
8
9
Nov 2002
91.3913
R McFadyen
12
Black-box Testing
• A blackbox test is one that focuses on the input/output
behaviour of a component without considering its
implementation
• The system being tested is a black box, whose behaviour is
determined by studying its inputs and outputs
• aka functional testing since it is concerned with
functionality and not implementation
• Can use equivalence classes and boundary conditions
Nov 2002
91.3913
R McFadyen
13
Equivalence class testing
•
•
•
•
•
A technique to minimize the number of test cases
An equivalence class is a set of tests with common characteristics
A test case is selected for each class
We use our domain knowledge to generate equivalence classes
Example: suppose a method returns the number of days in a
month, given the month and year.
– When we consider months, we could arrive at 3 equivalence
classes:
• months with 31 days
• months with 30 days
• months with 28 or 29 days
– When we consider years, we have two equivalence classes: leap
years and non-leap years
– Combining, we have 6 equivalence classes
Nov 2002
91.3913
R McFadyen
14
Six equivalence classes
Input values
month
year
Equivalence class
31 day month, non-leap year
7
1901
31 day month, leap year
7
1904
30 day month, non-leap year
6
1901
30 day month, leap year
6
1904
28/29 day month, non-leap year
2
1901
28/29 day month, leap year
2
1904
Nov 2002
91.3913
R McFadyen
15
Boundary class testing
•We focus on the boundary conditions of equivalence classes
•Rather than selecting any element in an equivalence class,
boundary testing requires that elements be selected from the
“edges”
Example
•In general, years that are multiples of 4 are leap years; years
that are multiples of 100 are not leap years, unless they are
multiples of 400.
•2000 is a leap year, but 1900 is not
•For Year, 2000 and 1900 are good boundary cases
•0 and 13 would be good boundary cases for month
Nov 2002
91.3913
R McFadyen
16
Ten testing classes
Equivalence class
Input values
month
year
31 day month, non-leap year
7
1901
31 day month, leap year
7
1904
30 day month, non-leap year
6
1901
30 day month, leap year
6
1904
28/29 day month, non-leap year
2
1901
28/29 day month, leap year
2
1904
Leap year divisible by 400
2
2000
Non-leap year divisible by 100
2
1900
Non-positive invalid month
0
1904
positive invalid month
13
1904
Nov 2002
91.3913
R McFadyen
17
Example
How would knowledge of the algorithm (the code) affect your
choices of equivalence classes and boundary classes?
• First, suppose you are testing a search method. What
equivalence and boundary test classes would you use?
What are your black-box test classes?
• Next, suppose you learn the search is a binary search …
how might this knowledge affect your set of test classes
…
Nov 2002
91.3913
R McFadyen
18
Example (continued):
Suppose we have a search module to test. We know:
– the list, elt, must have at least one element
– if the element, key, is found, found will be true and
elt[L] = key
– if the key is not found, found will be false
How do we structure, or organize, our test cases?
Nov 2002
91.3913
R McFadyen
19
Example (continued):
• How do we structure, or organize, our test cases?
• We have two types of searches: successful and
unsuccessful. So, we can partition our search test cases
into two classifications: found and not found
• When it comes to lists of elements, we know that lists of
length 1, are special cases or boundary points. So, we
should have 2 partitions of lists: length 1, and length of
more than one.
• When an element is searched for, it can be found in
boundary positions. So, we can should have 3 partitions:
found at the start, found at the end, and then we should
include where it is found in the middle.
Nov 2002
91.3913
R McFadyen
20
Example (continued):
•combining the partitions
Found
Not Found
1 List of 1 element
2 List of 1 element
List of >1 element
4 In 1st position
3 List of >1 element
5 In last position
6 In middle position
Nov 2002
91.3913
R McFadyen
21
Example (continued):
•sample tests for the 6 partitions
Inputs
List
Key
Outputs
Found, L
1
55
55
true, 1
2
44
55
false, ?
6
55 33 88 44
55
true, 1
4 22 33 6 77 88 44
44
true, 6
5
33 66 77 88 22
77
true, 3
3
22 55 88 66 77
99
false, ?
Nov 2002
91.3913
R McFadyen
22
Example (continued):
•Now, suppose we are examining the algorithm that
searches an ordered list for a specific value in Key.
•On examination we see it’s a binary search and we see
that it really treats the List as having 3 sections:
elements < mid
Nov 2002
midelements > mid
point
91.3913
R McFadyen
23
Example (continued):
•:We can use this knowledge to further refine our
partitioning - we need to test for where the Key we are
looking for is at the boundary points for these partitions.
elements < mid
midelements > mid
point
We’ll add two more tests relating to the boundary points –
finding a key just before, and just after the midpoint.
(Could there be more that we should add related to not
finding a key? What is the control flowgraph?)
Nov 2002
91.3913
R McFadyen
24
Example (continued)
Inputs
List
Key
Outputs
Found, L
55
55
true, 1
false, ?
55
true, 1
4 22 33 44 50 56 61 76
50
true, 4
5 22 33 44 50 56 61 76
76
true, 7
7 22 33 44 50 56 61 76
8 22 33 44 50 56 61 76
3
22 55 88 66 77
44
true, 3
56
99
true, 5
false, ?
1
2
6
Nov 2002
55
44
55 66 77 88 99
91.3913
R McFadyen
25
Download