Introduction to Software Testing
Errata List
Unfortunately,
despite our best efforts in
testing
our book,
just like any software program,
our book still has a few faults.
While we wish there were none,
we would rather know about the ones that are there
and encourage our readers to let us know if you find mistakes.
Unless you ask us not to,
we will credit you with the mistake that you found.
The responsibility for the errors,
of course,
lies with my co-author.
The corrections are ordered by page numbers in the book
and each correction includes the date it was added to this list and who found it.
Page numbers in
dark green
identify errors in the first printing that are corrected in the second printing.
Page numbers in
dark red
identify errors that appear in both the first and second printing.
Quick chapter index:
ch 1 |
ch 2 |
ch 3 |
ch 4 |
ch 5 |
ch 6 |
ch 7 |
ch 8 |
ch 9 |
References
Chapter 1
- Page 8,
24-Nov-2008:
paragraph 2:
"internal guidance system"
should be
"inertial guidance system"
Found by Lian Yu, Peking University
Chapter 2
- Page 29,
27-May-2008:
Line 4 of Figure 2.2.(b):
"reach([n6,n9])={n9}" should be "reach([n6,n9])={n6,n9}"
Found by Jae Hyuk Kwak, GMU
- Page 47,
23-May-2008:
"In fact, the def-pair set for a def at node n_i is the union of all the def-path sets for that def."
should be
"In fact, the def-path set for a def at node n_i is the union of all the def-pair sets for that def."
The formula is correct, just the words are backward.
Found by Miika Nurminen, University of Jyväskylä
- Page 48,
23-May-2008:
The right side of the def-pair set formula du (10,4,iSub) has two stray characters, "is".
It should be du (10,4,iSub) = {[10,3,4]}.
Found by Miika Nurminen, University of Jyväskylä
- Page 51,
10-September-2008:
Exercises, Section 2.2.3, #1.
The def and use sets for Graphs II, III and IV are given incorrectly.
They use an old notation that was removed during an early draft of the book.
For Graph II, they should be:
def(1) = def(3) = use(3) = use(6) = {x}
For Graph III, they should be:
def(1) = def(4) = use(3) = use(5) = use(6) = {x}
For Graph IV, they should be:
def(1) = def(5) = use(5) = use(6) = {x}
Found by Firdu Bati, GMU
- Page 71,
1-March-2008:
Quadratic.java:
The input array arg[] must start at 0, not 1
(this is corrected in the
online program listing).
Found by Shuang Wang, GMU
- Page 85,
2-September-2008:
Figure 2.39 has a typo on the edge from state "EndWord" to state "NoDupe".
The edge label is "nil/pre== cur"; it should be "nil/prev != cur".
Found by Rob Fredericks, Monmouth University
- Page 101,
14-July-2008:
Some of the historical references at the end of chapter 2 are wrong.
The four sentences starting with "In 1976, Pimont and Rault ..." should
be as follows:
In 1976,
Pimont and Rault [290] suggested covering pairs of edges,
or "switches,"
a technique that they referred to as "switch-testing,"
and which has also been called "switch cover."
In 1978, Chow [77] suggested generating a spanning tree from a FSM
and then basing test sequences on paths through this tree.
He also generalized the idea of a switch to "n-switch,"
which are sequences of n edges.
Fujiwara et al. [130] referred to Chow's approach with the term "W-method,"
and developed the "partial" W-method (the "Wp-method").
They also attributed the idea of switches to Chow's paper instead of Pimont and Rault's.
- Page 102,
27-May-2008:
4th full paragraph:
"best-effort eouring" should be "best-effort touring"
Found by Jae Hyuk Kwak, GMU
Chapter 3
- Page 112,
27-Sept-2008:
1st full paragraph:
"sceptical" should be "skeptical"
("sceptical" is the British spelling,
so strictly speaking, is correct,
but both Paul and Jeff are Americans so the book should use a 'k')
Found by Andrew Hollingsworth, GMU
- Page 125,
27-May-2008:
Table 3.3, line for "p49: (S1 == S2)".
Since the inputs listed for the "False" case, namely (1, 2, 2), form
an isosceles triangle, the expected output, listed as "3", should be "2"
Found by Jae Hyuk Kwak, GMU
- Page 126,
14-Nov-2008:
Table 3.4 uses "=" in the clauses, but other tables use "==".
Should be "==" in the table.
Found by Nan Li, GMU
- Page 127,
28-April-2008:
"Values to satisfy CACC are shown in Table 3.3":
This should be "Table 3.5".
Found by Steve Kinder, GMU
- Page 136,
12-November-2008:
In Table 3.7, "seatButton" should be "seatBottom"
and "sideMirors" should be "sideMirrors".
Found by Nan Li, GMU
- Page 147,
18-March-2009:
In Exercise Section 3.6, Number 6, "UPIC" should be "UTPC".
Found by authors, GMU
Chapter 4
- Page 152,
20-Nov-2009:
About halfway down the page,
"Further, it suggests useful categories such as 'Is Card Valid' and ..."
should be
"Further, it suggests useful characteristics such as 'Is Card Valid' and ..."
Found by Jose Torres, GMU
- Page 160,
6-Jan-2009:
In the next to bottom line on the page,
both occurrences of "parameter"
should be "characteristic".
- Page 161,
2-April-2008:
Formulas for test set sizes for PWC and TWC:
As written, the formulas only apply if the blocks are all
the same size.
For blocks of different sizes, the formulas are different.
The size of a test set that satisfies PWC is at least
the product of the size
of the largest block and the size of the next largest block,
as opposed to the square of the size of the largest block,
as the text now states.
Extending this idea to TWC yields the product of the sizes of the t
largest blocks.
This change has been applied to the slides.
Found by Yousuf Ashparie; correction by Gary Kaminski, GMU
- Page 162,
6-Jan-2009:
In the third full paragraph on the page,
"Each parameter"
should be "Each characteristic".
- Page 162,
12-November-2008:
Criterion 4.28 should be "Multiple Base Choice Coverage".
Found by Nan Li, GMU
- Page 163,
1-March-2008:
Figure 4.2:
MBC should be MBCC.
Found by Yanyan Zhu, GMU
- Page 163,
5-November-2008:
Exercises 4.2 #4:
The statement in the Effects clause
"A null argument is treated as an empty set."
should be deleted.
The question has been corrected in the solution manual on the book website.
Chapter 5
- Page 173,
20-Nov-2009:
About two thirds of the way down the page,
"This can be done by ... or by mutating values during a production"
should be
"This can be done by ... or by mutating values during a derivation"
Found by Jose Torres, GMU
- Page 183,
12-Nov-2007:
Definition of AOR:
The Arithmetic Operator Replacement definition mentions both '%' and the 'mod' operator,
which are the same thing. The reference to 'mod' should be dropped.
Found by David Sracic, GMU
- Page 183,
12-Nov-2007:
Definition of ROR:
The Relational Operator Replacement definition includes '='.
This should be '=='.
Found by David Sracic, GMU
- Page 184,
12-Nov-2007:
Definition of ASR:
The Assignment Operator Replacement definition should include the plain assignment
operator '='.
Found by David Sracic, GMU
- Page 189,
24-Oct-2008:
Exercises, Section 5.2, number 3.
This question presents two mutants, A and B.
The question text refers to "the mutant" and "mutant m".
Also, part (d) asks for a test input that "kills the mutants".
Since (c) asks for inputs that satisfy infection but not propagation,
(d) should ask for test inputs that "strongly kills the mutants".
Note that the question has been corrected in the solution manual
on the book website.
Found by Mark Shapiro, GMU
- Page 191,
13-April-2009:
In the method "power",
the variables "left" and "right"
should not be capitalized.
Found by Leonard S. Woody III, GMU
- Page 191,
21-Aug-2009:
The correct URL for mJava is now
http://www.cs.gmu.edu/~offutt/mujava/.
Instead of "previous question", it should read "question 5".
Found by the authors
- Page 200,
23-October-2008:
Example near the bottom of the page.
"SPEC AG (!x & y) → (y = false)"
should be
"SPEC AG (!x & y) → AX (y = true)"
Found by Upsorn Praphamontripong, GMU
- Page 206,
29-October-2008:
Example near the top of the page.
"debit 739 $12.35" should be deleted as it doesn't correspond to either mutant.
Found by John Krause, GMU
- Page 208,
28-April-2008:
Exercises, Question 1: "BNF in Section 5.1.1" should be "BNF in Section 5.5.1".
Found by Steve Kinder, GMU
- Page 209,
24-Nov-2008:
In question 6, the first production has a misspelling. It should be:
phoneNumber ::= exchangePart dash numberPart.
Found by Weiyi Li, Peking University
Chapter 6
- Page 217,
15-Nov-2007:
paragraph 3:
"A technique is effcient to the degree that determine the appropriate ..."
should be
"A technique is effcient to the degree that determining the appropriate ..."
Found by the authors
Chapter 7
- Page 241,
27-May-2008:
3rd full paragraph:
"The code fragment in Table 7.1.2 illustrates this problem." should be
"The code fragment in Table 7.2 illustrates this problem."
Found by Jae Hyuk Kwak, GMU
- Page 255,
30-Nov-2007:
paragraph 6:
"ACS requires that coupling sequences be covered ..."
should be
"APC requires that coupling sequences be covered ..."
Found by Mark Pumphrey, GMU
Chapter 8
- Page 270,
18-Nov-2008:
paragraph 3:
"Each node in Figure 8.3"
should be
"Each edge in Figure 8.3"
Found by Lian Yu, Peking University
- Page 272,
24-Nov-2008:
8.1.3, paragraph 3:
"It implements the predicate on the edge (1,2)"
should be
"It implements the predicate on the edge (1,3)"
Found by Lian Yu, Peking University
Chapter 9
References
- Page 297,
8-September-2009:
The authors names are inverted in reference [27]; it should be "Gamma and Beck".
Found by Markku Sakkinen, University of Jyväskylä
- Page 307,
8-September-2009:
Two misspellings in reference [204]; correct spellings are "Ledgard" and "genealogy".
Found by Markku Sakkinen, University of Jyväskylä
- Pages 308, 317,
27-May-2008:
The Liskov/Guttag book (reference [212] on page 308)
has a duplicate bibliographic entry, [355], on page 317.
The correct publication year is 2001.
Found by Miika Nurminen, University of Jyväskylä