Through the years, I have come across a number of books that I have used and valued. These may be new books, or they may be older ones. Each Wednesday, I will review a book that I personally feel would be worthwhile to testers.
If you were to talk to someone who was going to go into the testing field, and they said “I want to get something that would really help me get to the heart of what I need to know quickly and efficiently”. Given that, what would you recommend? I think the book “Software Testing: Fundamental Principles and Essential Knowledge” by James McCaffery would be a good first start.
First, this book is very thin. I don’t say that to criticize, but to extol a virtue. This book is focused clearly and distinctly on what the author has determined to be, in his opinion, the fundamental and essential. This book is terse, and focuses on a number of concepts directly. Each concept builds on the previous ones, and each chapter gets the user from basic understanding into actual testing scenarios, with a review question and exercise at the end of each section. The answers to these review sections are given in the back of the book. 105 pages is all there is from the Introduction page to the last review question answer. So what get’s covered in 105 pages?
Chapter 1: Software Testing and Test Cases. This section runs the tester through a whirlwind tour of test cases and test suites, and how test cases are put together and what they are meant to cover.
Chapter 2: Fundamental Mathematical Techniques. Combinatorics, Statistics, and some details about cryptography are covered, as well as a section on Pair-Wise testing (which made me laugh a little considering my blog post of yesterday :) ).
Chapter 3: Project Management Concepts. A quick tour through the Software Development Life Cycle, Test Documentation, writing of bug reports, and reproducing issues dominates this section.
Chapter 4: Core Principles. Various methods of software testing are discussed, including manual vs. automated, black/white box testing, performance, stress, configuration and localization testing.
Chapter 5: Essential Knowledge. This is a collection of miscellaneous test areas, including Character encoding, XML, databases, HTTP protocol, and networking testing and troubleshooting.
Chapter 6: Units, Modules and Components. This section talks about details associated with Dynamic link libraries, module testing, some details about unit testing, the Windows System Registry (noticing a bias here? Yep, this book is heavy on Windows testing), and creating stub and mock tests.
Answers to Review Questions. A section at the back of the book gives the answers to the review questions in each of the sections.
No question, this book takes the approach of grabbing the user and diving in. There’s little in the way of a gentle curve or illustration for points. The details here are focused and meant to help the reader get right into the thick of things. The good news is that the book is not designed to have to be read through from front to back. Any of the areas can be read in any order, and each has a review question at the end of each section to check to see how well you have retained the ideas.
Disclaimer: this book is associated with a certification program offered by Volt Information Services, Inc. and as such, the questions are written as though they are part of a practice test for a test certification. Some of the answers to the questions did have me scratching my head in a few places (not that the answers were wrong, just that they seemed to be strange choices based on the material presented).
If you are a beginner tester, or if you want to learn more about basic principles of software testing, this would be a good first book, but I wouldn’t recommend this as the only book a tester get. While it covers many areas, there are lots of other areas that get little to no coverage. Supplementing this book with the test fundamentals found in Kaner, Falk and Nguyen’s “Testing Computer Software” would give a beginning tester a great foundation to build on.