introduction to software engineering lecture 11 andré van der hoek
TRANSCRIPT
![Page 1: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/1.jpg)
Introduction to Software EngineeringLecture 11
André van der Hoek
![Page 2: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/2.jpg)
Today’s Lecture
Structural testing
Specification-based testing
![Page 3: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/3.jpg)
Testing
Exercise a module, collection of modules, or system Use predetermined inputs (“test case”) Capture actual outputs Compare actual outputs to expected outputs
Actual outputs equal to expected outputs
test case succeeds
Actual outputs unequal to expected outputs test case fails
![Page 4: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/4.jpg)
Two Approaches
White box testing Structural testing Test cases designed, selected, and ran
based on structure of the source code Scale: tests the nitty-gritty Drawbacks: need access to source
Black box testing Specification-based testing Test cases designed, selected, and ran
based on specifications Scale: tests the overall system behavior Drawback: less systematic
![Page 5: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/5.jpg)
Structural Testing
Use source code to derive test cases Build a graph model of the system
Control flow Data flow
State test cases in terms of graph coverage Choose test cases that guarantee
different types of coverage Node coverage Edge coverage Loop coverage Condition coverage Path coverage
![Page 6: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/6.jpg)
Example
1 Node getSecondElement() {
2 Node head = getHead();
3 if (head == null)
4 return null;
5 if (head.next == null)
6 return null;
7 return head.next.node;
8 }
1 32 4 5 6 7
![Page 7: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/7.jpg)
Example
1 float homeworkAverage(float[] scores) {
2 float min = 99999;
3 float total = 0;
4 for (int i = 0 ; i < scores.length ; i++) {
5 if (scores[i] < min)
6 min = scores[i];
7 total += scores[i];
8 }
9 total = total – min;
10 return total / (scores.length – 1);
11 }
1 3 7 82 4 5 6 9 10
![Page 8: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/8.jpg)
Node Coverage
Select test cases such that every node in the graph is visited Also called statement coverage
Guarantees that every statement in the source code is executed at least once
Selects minimal number of test cases
1 3 7 82 4 5 6 9 10
Test case: { 2 }
![Page 9: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/9.jpg)
Edge Coverage
Select test cases such that every edge in the graph is visited Also called branch coverage
Guarantees that every branch in the source code is executed at least once
More thorough than node coverage More likely to reveal logical errors
1 3 7 82 4 5 6 9 10
Test case: { 1, 2 }
![Page 10: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/10.jpg)
Other Coverage Criteria
Loop coverage Select test cases such that every loop boundary and interior is tested
Boundary: 0 iterations Interior: 1 iteration and > 1 iterations
Watch out for nested loops Less precise than edge coverage
Condition coverage Select test cases such that all conditions are
tested if (a > b || c > d) …
More precise than edge coverage
![Page 11: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/11.jpg)
Other Coverage Criteria
Path coverage Select test cases such that every path in the
graph is visited Loops are a problem
0, 1, average, max iterations
Most thorough… …but is it feasible?
![Page 12: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/12.jpg)
Challenges
Structural testing can cover all nodes or edges without revealing obvious faults No matter what input, program always
returns 0 Some nodes, edges, or loop
combinations may be infeasible Unreachable/unexecutable code
“Thoroughness” A test suite that guarantees edge coverage
also guarantees node coverage… …but it may not find as many faults as a
different test suite that only guarantees node coverage
![Page 13: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/13.jpg)
More Challenges
Interactive programs Listeners or event-driven programs Concurrent programs Exceptions Self-modifying programs Mobile code Constructors/destructors Garbage collection
![Page 14: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/14.jpg)
Specification-Based Testing
Use specifications to derive test cases Requirements Design Function signature
Based on some kind of input domain Choose test cases that guarantee a
wide range of coverage Typical values Boundary values Special cases Invalid input values
![Page 15: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/15.jpg)
“Some Kind of Input Domain”
Determine a basis for dividing the input domain into subdomains Subdomains may overlap
Possible bases Size Order Structure Correctness Your creative thinking
Select test cases from each subdomain One test case may suffice
![Page 16: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/16.jpg)
Example
1 float homeworkAverage(float[] scores) {
2 float min = 99999;
3 float total = 0;
4 for (int i = 0 ; i < scores.length ; i++) {
5 if (scores[i] < min)
6 min = scores[i];
7 total += scores[i];
8 }
9 total = total – min;
10 return total / (scores.length – 1);
11 }
![Page 17: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/17.jpg)
Possible Bases
Array length Empty array One element Two or three elements Lots of elements
Input domain: float[]Basis: array length
one
small
emptylarge
![Page 18: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/18.jpg)
Possible Bases
Position of minimum score Smallest element first Smallest element in middle Smallest element last
Input domain: float[]Basis: position of minima
somewhere in middlefirst last
![Page 19: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/19.jpg)
Possible Bases
Number of minima Unique minimum A few minima All minima
Input domain: float[]Basis: number of minima
all data equal1 minimum2 minima
![Page 20: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/20.jpg)
Testing Matrix
Test case(input)
Basis(subdomain)
Expected output
Notes
![Page 21: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/21.jpg)
homeworkAverage 1
Test case(input)
Basis: Array length Expected output
Notes
Empty
One Small Large
() x 0.0 99999!
(87.3) x 87.3 crashes!
(90,95,85) x 92.5
(80,81,82,83, 84,85,86,87, 88,89,90,91)
x 86.0
![Page 22: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/22.jpg)
homeworkAverage 2
Test case(input)
Position of minimum Expected output
Notes
First Middle Last
(80,87,88,89) x 88.0
(87,88,80,89) x 88.0
(99,98,0,97,96)
x 97.5
(87,88,89,80) x 88.0
![Page 23: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/23.jpg)
homeworkAverage 3
Test case(input)
Number of minima Expected output
Notes
One Several All
(80,87,88,89) x 88.0
(87,86,86,88) x 87.0
(99,98,0,97,0) x 73.5
(88,88,88,88) x 88.0
![Page 24: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/24.jpg)
Avoids Problems of Structural Testing
Interactive programs Listeners or event-driven programs Concurrent programs Exceptions Self-modifying programs Mobile code Constructors/destructors Garbage collection
![Page 25: Introduction to Software Engineering Lecture 11 André van der Hoek](https://reader035.vdocuments.us/reader035/viewer/2022062712/56649c955503460f94952211/html5/thumbnails/25.jpg)
Your Tasks
1. Read and study slides of this lecture
2. Read chapter 13 of van Vliet