Found a bug?
If you believe you have found an error in the text, please email us with the page number(s) and a description of the error and/or suggested correction. Thanks!
Corrections to the first printing
Page 9, diagram: "qualites" should be "qualities"
Page 30, second paragraph: The value that would be at
middle[7]
will be overwritten with a
string-terminating null character, not a newline character.
Also, in the last sentence, “if the target string is too
long” should be “if the source string is too long”
Page 34, Figure 3.2: The right brace on line 17 belongs to the
class in which method questionable
is contained, and
is not part of the method.
Page 57, in the center diagram, the label a =
f(x),
should be a = f(x);
Page 63, last full paragraph: The description does not correspond to the example and diagram in Figure 5.6, page 64. A replacement page substitutes the following description:
Figure 5.6 illustrates overestimation of the A.check()
to
C.foo()
because
A.foo()
calls
myC.foo()
and myC
's declared class is
C. However, since
myC
is always an object of subclass S
,
and S
overrides foo()
, the call
to myC.foo()
can only reach S.foo()
. In
this case a more precise analysis could show that myC
is
always bound to an object of subclass
S
, but in general such precision is expensive or even
impossible.
Page 70, middle label of Figure 5.10: “well-fromed” should be “well-formed”.
Page 78, line 10 (line 3 of paragraph 3): “another asignment to the same value&rdquo should be “another assignment to the same variable”.
Page 80, Figure 6.3: The two unlabeled edges from node E to nodes B and D should be labeled “y”. The edge from D to C should be labeled “x” and not “y”.
Page 83, first paragraph, line 3 should refer to x
and
not y
. It should say “x
and replaces (kills) an earlier
definition of x
.”
Page 91, last sentence of caption of Figure 6.11 should refer to
the misspelled variable name vald
. It should say
“the assignment to vald
is a useless
definition”.
Page 104, section 7.2: "W => P" should be "W <= P" (or "P => W").
Page 137, figure 8.13: Self-loop on state S0 of part A should
be labeled
a (x0=0)
, not b (x0=1)
. (Note how
this corresponds to the first row of the transition table in
part B: The
transition is on an event with code 0, from a state encoded 00,
back to the state encoded 00.)
Page 162: 264 is not close to 1054. It is closer to 1019, which is still a rather large number.
Page 189, Table 11.1: The expected result column classifies results only as “Err” (erroneous) and “OK” (the query is correct, whether or not the configuration should be accepted). It is more useful to distinguish three possible outcomes: Reject the query because it is erroneous (e.g., the model number is malformed), reject it because the configuration is invalid (e.g., an incompatible component has been selected), or accept the configuration. A replacement page makes this distinction.
Page 191: References to Table 11.3 in the last paragraph should refer to Table 11.5.
Page 193, Table 11.6: The Color entries are swapped between Hand-held and Laptop and Full-size devices. Monochrome should appear in the top table (as an option for hand-held devices) and not in the bottom table (as an option for full-size and laptop devices).
Page 212: “The statement at line 26” should be “The statement at line 25”.
Page 216: The statement that the relation between coverage
of statements and coverage of nodes is monotone is too strong.
The relation is monotone in the sense that if a test case
increases coverage of one, it also increases coverage of the
other. However, it is possible to construct a program and two
test suites
Page 220: The tree diagram near the bottom of the page does not match the surrounding text. Please substitute this replacement diagram to show the decision tree with the hypothetical error described on page 219, or this diagram to show both the decision tree corresponding to line 27 of Figure 12.1 and the hypothetical erroneous version.
Page 231, Figure 12.8: Because the definition of loop boundary testing used in this chapter does not include any requirement on covering branches or even statements in the body of a loop, loop boundary testing should be placed lower in the diagram, as shown in this replacement diagram.
Page 249: The test suite in Table 14.1 does not satisfy the transition coverage criterion, because transition (8,6) is not covered by any of the test cases.
Thanks to ...
Stuart Anderson, U. Edinburgh
Arie van Deursen, Delft University of Technology
Junhua Ding, East Carolina U.
Rainer G. Haselier, author
Othoniel Rodriguez Jimenez, Polytechnic U. of Puerto Rico
Peter Kemper, College of William and Mary
Francesca Piersigilli, U. Camerino
Yongge Wang, UNC Charlotte
Andreas Zeller, U. Saarland