Book cover


Software Testing and Analysis:
Process, Principles, and Techniques

Mauro Pezzè


Michal Young

University of Lugano


University of Oregon

University of Milan, Bicocca

ISBN-13: 978-0471455936   |   (c) 2008, John Wiley & Sons  

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 calls relation due to dynamic dispatch. The static call graph includes calls through dynamic bindings that never occur in execution. The call graph includes an (impossible) call from A.check() to because calls and myC's declared class is C. However, since myC is always an object of subclass S, and S overrides foo(), the call to can only reach 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 “D adds a definition of 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 TSA and TSB such that TSA has higher coverage with respect to statements but TSB has higher coverage with respect to nodes.

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