The Taxonomy of Bugs
Flowgraphs and Path Testing
Metrics and Complexity
Paths, Path Products and Regular Expressions
Logic Based Testing
States, State Graphs, and Transition Testing
Graph Matrices and Applications
Appendix Bug Taxonomy and Statistics
I remember reading this book early in my University career and being particularly struck by the discrepancy between what I was being taught about testing on the course and what was being presented to me by this book. This book made testing seem like a technical discipline with a lot of very strong techniques. I obviously forgot as much of this book as possible and returned to the far simpler testing that was being taught on the course. The book might help me test but I wanted to pass the exams.
And now I want to test. Now I want to test as well as I possibly can. The book suddenly becomes so much more valuable.
It took me a long time, after starting a career as a tester to finally get around to reading this book. I never saw it on any UK bookshop shelf, I have subsequently learned that it is available on US bookshop shelves and I did eventually track down a copy over the internet. So any UK testers that haven't read this yet - start up your browser and shop, badger your UK booksellers to stock it, and encourage all the testers you meet to read it.
The introduction alone is worth the price of admission. Over the years, all the hard lessons that I've learned and tried to represent as simple axioms are here, and they are presented simply. The evolution of the tester's mind is here in the 5 phases of a Tester's Mental Life. So much that I had to learn the hard way is presented here.
The bug taxonomy that is presented in chapter 2 I found more useful and easier to study than the one presented in Kaner (but that isn't to belittle Kaner which is a very good book).
The majority of Software Testing Techniques takes the reader through the various types of models that the tester can use to describe the system under test and then the various techniques that the tester can apply to those models. The models increase in complexity and the reader carries through the skills and understanding from one model to the next.
And although I've read this book and I've read sections of it again, I still have to study it more. This is not a book for casual reading. If the reader is stuck, and indeed I was at certain points, I can pretty much guarantee that the answer is there in the text and you just missed it. Read it, re-read it, check the examples, repeat the working until these techniques become part of your testing armament. Chances are that you already do some of these techniques and you already use some of these models. This is a very formal treatment of those models and techniques and it will increase your understanding of them.
It may help to read Black Box Testing in conjunction with this book as Black Box Testing covers the techniques using an example focused and very practical approach. Certainly I found that a useful exercise.
The Implementation chapter, although small, has a lot of useful information in it, and I think should shame test tool builders the world over. If we examine the tools that exist prominently and which are well used by the industry, I don't know of a single tool which embodies the techniques presented in this book and yet these are the techniques which testers use to derive tests and ensure that they understand and can measure the coverage of their testing.
I can't recommend this book highly enough. If I have a criticism then it is that the author's style is deceptively light, and the book so well written that the reader is led through the book quickly and can skip over sections too lightly. But to say that a book is well written is no criticism at all, and to say that the reader skips is a comment on the reader. There are reasons why this book continues to sell well and is regarded as a classic and those are the reasons why I will continue to study this book until I can use it fully.