The text describes the quality programming methodology, which the author has developed over the last decade. The concepts behind quality programming are both innovative and convincing. The author first builds a view of software development as a manufacturing activity and then applies statistical quality control techniques as a means to design and carry out software testing, verification, and validation. These are very appealing ideas.
Like software development itself, however, this book is both rewarding and frustrating. Many portions are handled extremely well:
(1)The manufacturing focus, which emphasizes a concern with inputs, outputs, and testing, is must reading for anyone seriously interested in the practice of software development.
(2)The discussion of the software life cycle, which moves across a number of chapters, is to be commended on its clarity and comprehensiveness. As such, the book serves extremely well as a general reference book on software development. The concurrent handling of both software design and testing design throughout the life cycle results in this being an extremely effective treatment of the software development life cycle.
(3)The discussion of software design (in chapter 9) is one of the best, if not the best, treatments of both function-oriented and object-oriented software design.
(4)The discussions of software success criteria are handled nicely.
Surprisingly, the book falters when it discusses the author’s major topic--a statistical quality control approach to software evaluation and testing. The basic concepts are covered well. The approach is quite reasonable from a pragmatic perspective. And the author does an extremely good job of introducing the reader to basic ideas in probability, statistics, and quality control (chapters 2 through 6). What the book does not sufficiently provide are clear, realistic illustrations of applying these ideas to the software life cycle. Not only are there far too few examples, but those given tend to be simple and well structured. How one applies the ideas to larger, less-structured applications is left to the reader. Too often, the reader is asked to refer to potentially useful illustrations in the author’s other works. And with the examples that are provided, the reader is given solutions rather than being led through the cognitive processes that lead to these solutions. This is the frustrating aspect of the book. Its ideas are both reassuring and innovative. I doubt, however, that many readers will be able to directly apply its statistical quality control methods after reading the book. The author proposes three uses for the book: as a software engineering textbook, as a reference for practitioners, and as a prescriptive guide to the quality programming methodology. He has succeeded admirably on the first two counts, and I do recommend that both academics and practitioners read the book. Most will gain fresh insights about software development. Where the author has not succeeded is in his third objective. While I expect the book will serve well as a text accompanying the author’s seminars on this topic, I do not believe it provides sufficient material to function by itself as a guide to applying the methodology.