This is the seminal book on software testing and one we continue to recommend to those who are serious about testing. Myers' book contains practical "how-to" technical information on software testing with the main emphasis on methodologies for the design of effective test cases. It also covers psychological and economic issues, managerial aspects of testing, test tools, debugging, and code inspections. Comprehensive examples of checklists support the presentation.
Review By: Danny R. Faught 08/26/2002Published in 1979, this book is generally recognized as a seminal work on software testing. The first three pages describe the famous “triangle problem”—an assessment of basic test design skills that still is probably the most likely interview question to be posed to software test job candidates. The book covers the state of the art in black box test design for its time, including equivalence partitioning, boundary analysis, cause-effect graphing, and error guessing. It covers white box test design based on code coverage measures. There’s a chapter on code review that includes error checklists, most of which can be modified for use with modern programming languages.
There is a chapter on module testing that discusses the ins and outs of stubs and drivers, along with a comparison of two different approaches to testing the parts of a software product. The chapter on higher order testing includes a nice list of system-level testing tasks. These tasks are illustrated on what is basically a V-model chart, except that it’s shaped like a rectangle. The chapter on tools and techniques comes across as a walk on the frontier, with mostly academic references and few commercialized tools.
The author has written several other books about software reliability, architecture, and design, all now out of print. But this book remains his most significant and lasting legacy to the software testing field. It’s a shame that he has moved his attention to other interests.
This classic book on software testing is a thin volume that has aged fairly well. It has value now in an age where testing still requires artistry. The book introduced a number of concepts that helped to form the foundation of the state of the practice today. The most significant principle from Myers is that “Testing is the process of executing a program with the intent of finding errors.” If you do testing primarily to prove that a program is working, then you have some reading to catch up on. In the test-case design chapter, we find the timeless suggestion to start with black box methods, and then supplement those tests using a white box approach. It is interesting to note the seeds of other concepts that have grown up since the book was written.
One anachronism in the book is the chapter on debugging. I got a feeling of guilty pleasure reading this chapter. Guilty, because including information on debugging in a testing book is a reflection of the notion in the 1950s that testing and debugging are synonymous (Myers does include a semi-apology). Pleasure, because I think that debugging and test failure analysis share many skills in common. There are a number of other minor anachronisms in the book that aren’t a problem if the reader knows enough about legacy systems to be able to put them into context. One other interesting thing to note is that the book does not recognize the role of the independent software tester, so there’s no help for determining the division of testing tasks between developers and testers.
I would not recommend this as a first book to learn about software testing, even though many organizations need to catch up on what Myers already knew in the late 1970s. There have been a number of innovations in the past 20+ years that should not be ignored. I would recommend the book for serious students of the testing field who want to put modern practices into perspective. Note that the list price is at the top of the usual range for technical books.