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 in the first and second printings that are corrected in the third printing.
Page numbers in
dark yellow
identify errors that appear in the first, second, and third printings.
Quick chapter index:
preface |
ch 1 |
ch 2 |
ch 3 |
ch 4 |
ch 5 |
ch 6 |
ch 7 |
ch 8 |
ch 9 |
References
Preface
- Page xviii,
20-Jan-2010:
"Specifically, the book defines six"
should be
"Specifically, the book defines seven"
Found by Lance Witkowski, George Mason University
- Page xviii,
13-Mar-2012:
"Each chapter section is marked
with which stream it belongs too."
should be
"Each chapter section is marked
with the stream to which it belongs."
Found by authors
Chapter 1
- Page 8,
24-Nov-2008:
paragraph 2:
"internal guidance system"
should be
"inertial guidance system"
Found by Lian Yu, Peking University
- Page 8,
10-Dec-2013:
Last paragraph in 1.1.1:
"Intramethod" should be "Intra-method,"
"Intermethod" should be "Inter-method,"
"Intraclass" should be "Intra-class,"
"intermethod" should be "inter-method."
Found by Alan Moraes, Federal University of Paraiba
- Page 10,
11-Feb-2011:
Second paragraph in 1.1.3:
"engineers"
should be
"engineer's"
Found by Rowland Pitts, George Mason University
- Page 21,
17-Nov-2010:
Exercises, Section 1.3, number 1:
"satisfies C1 and on program P"
should be
"satisfies C1 on program P, and"
Found by Alexandre Bartel, University of Luxembourg
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 34,
12-January-2011:
The last sentence on the page should read
"In program statement terms, this is a graph of the
common "if-then" structure without an "else" clause."
The error is that the current wording in the text implies an "else" clause,
but the figure clearly illustrates the "if" statement
without an "else" clause.
Found by Aya Salah, Cairo University
- 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,
5-May-2010:
The first line on the page should read "The def-path set for the use of iSub at node 10 is:"
The error is that isub should be iSub.
Found by Bill Shelton, GMU
- 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 50,
15-Feb-2010/23-Feb-2011:
Figure 2.15:
The middle subsumption arrow from Prime Path Coverage (PPC)
should go to Edge Coverage (EC), not Edge-Pair Coverage (EPC).
The reason is that an edge-pair that immediately loops back to
the same node is not a prime path.
The corresponding error in the slides for Section 2.1 and 2.2
has been fixed.
It has come to the authors attention that this mistake
was incorrectly fixed in the third printing.
The correct graph is also available
here
as PDF.
Found by authors, GMU.
- 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 51,
24-Feb-2011:
Exercises, Section 2.2.3, #1.
For Graph III, the given
test paths are not sufficient to satisfy all of the
dataflow criteria.
Hence, for questions (d), (e), and (f),
the second sentence, "Use the given test paths.",
should instead read:
"If possible, use the given test paths.
If not, provide additional test paths to satisfy the
criterion."
Found by Rama Kesavan, 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 81,
16-Jun-2011:
Figure 2.35.
The last two lines of code in the
stut
method,
namely linecnt++;
and
checkDupes(linecnt);
are in the wrong order.
That is, the check should happen before
linecnt
is incremented.
This mistake is only in the text;
the accompanying online program is correct.
Found by Hooman Rafat Safaee, Shiraz University.
- 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 99,
24-February-2012:
The path expression given in the paragraph starting
with "Consider the graph in Figure 2.56." contains an "
n
" with an underscore.
The underscore should not be present.
Found by Preetham Vemasani, GMU
- 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
- Page 103,
11-Feb-2011:
Note 4:
"tread"
should be
"treat"
Found by Rowland Pitts, George Mason University
Chapter 3
- Page 111,
5-May-2010:
The fifth column headings in the table in the
middle of the page has a syntactic error.
The heading should have balanced parenthesis: a ∧ (b ∨ c).
Found by Bill Shelton, GMU
- 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 172,
29-Nov-2010:
In the example derivation,
the last line should be:
"G 17 08.01.90 action^*,"
not 14.
The text says "the following derivation results in the test case above,"
which used 17.
Found by Alexandre Bartel, University of Luxembourg;
further corrected by Wajeh Addin Qasem, Nanjing University of Science and Technology
- 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 195,
7-Dec-2012:
The acronym for Overriding Method Deletion should be IOD.
OMD is used for Overloading Method Deletion, mutation operator 14.
Found by Nan Li, George Mason University
- 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 240,
6-Dec-2013:
In the last paragraph,
"inconsistent type use fault (ITU)"
should be in bold font.
Found by Mohita Mathur, GMU
- 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 242,
20-April-2010:
Last paragraph:
"Now consider class Y and the methods Y::m(),
which overrides W::n() through refinement."
should be
"Now consider class Y and the methods Y::m(),
which overrides W::m() through refinement."
Found by Josh Dehlinger, Towson University
- Page 244,
14-Dec-2009:
First full paragraph:
", where Y specifies a state variable x" should be
", where T specifies a state variable x".
Found by Parag Bhagwat, GMU
- Page 249,
10-March-2011:
In figure 7.10,
"O.m() and O.n()"
should be
"o.m() and o.n()."
Found by Alexandre Bartel, University of Luxembourg
- Page 255,
10-March-2011:
In defintion 7.53,
"For every coupling sequence s_j"
should be
"For every coupling sequence s_j,k."
Found by Alexandre Bartel, University of Luxembourg
- 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
- Page 258,
6-Jul-2010:
paragraph 1, sentence 3:
"Client-side script validation users small programs, ..."
should be
"Client-side script validation uses small programs, ..."
Found by Gordon Fraser, Saarland University
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
- Page 281,
16-April-2012:
Extra word in the second full paragraph,
"something bad thing won't happen"
should be
"something bad won't happen"
Found by Don Braffitt, Radford University
- Page 281,
18-May-2010:
Missing word in the last full paragraph,
"Roughly speaking, a system is safe if it reasonably free"
should be
"Roughly speaking, a system is safe if it is reasonably free."
Found by Thomas Reinbacher, Vienna University of Technology
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ä
- Pages 312,
27-July-2010:
Reference [285] has "SIGLPAN," which should be "SIGPLAN."
Found by authors, GMU.