"Foundations of Software Testing" is the premiere example-based text and reference for establishing sound engineering practices in test generation, selection, minimization and enhancement, for software projects ranging from the most simple to the highly complex, to those used by government agencies such as the FAA. Foundations of Software Testing also covers data-flow based adequacy and mutation-based adequacy, which are the most powerful of the available test adequacy criteria. It distills knowledge developed by hundreds of testing researchers and practitioners from all over the world and brings it to readers in an easy to understand form.
Test generation, selection, prioritization and assessment lie at the foundation of all technical activities that arise in a test process. Appropriate deployment of the elements of this strong foundation enables the testing of different types of software applications, including Object Oriented systems, Web services, graphical user interfaces, embedded systems, as well as properties relating to security, performance, and reliability. With over 200 examples and exercises of mathematical, step-by-step approaches, Foundations describes a wide variety of testing techniques, including finite state models, combinatorial designs, and minimization for regression testing.
Review By: Noel LeJeune 07/02/2009
If you want deep knowledge and understanding of software testing, you should study this book. Although every professional involved in writing or testing software would greatly benefit from reading this material, most practitioners are likely to find this book too academic. The author rightly claims, "This book is aimed at students in a college or university … at [the] senior undergraduate and early graduate level [in a Computer Science program]." He further claims, "Practitioners, with patience, may find this book as a rich source of techniques they could learn and adapt in their development and test environment." The key word is "patience" since the context relies heavily on the mathematical underpinnings of testing. This book discusses fundamental concepts at a depth and with a viewpoint not found in most practitioner-focused books on testing. Be forewarned that those readers without a computer science and mathematical background are not likely to have the level of "patience" expected by the author. However, there is a wealth of valuable information that can be applied to daily practice for the reader willing to study this text.
The book is divided into three major sections. Part one titled, Preliminaries, provides an excellent summary of the basics of software testing in a single chapter eighty-five pages long. This section is extraordinary for its breadth, organization, and readability. The remaining 600 pages are nearly evenly divided between the topics of test generation and test adequacy assessment and enhancement. Part two on test generation is comprised of chapters on requirements, finite-state models, and combinatorial designs. The chapter on combinatorial designs covers the mathematics of combinatorial design, the design process, fault models, Latin squares, mutually orthogonal Latin squares, pairwise design, orthogonal arrays, and more. The time and effort to learn what this book offers will make you a better-educated professional. The final chapter in the second section discusses test selection, minimizations, and prioritization for regression testing.
Part three consists of two lengthy chapters (one hundred pages each) discussing the basics of test adequacy and the use of control-flow and data-flow analyses. The distinctions between statement coverage, block coverage, decision coverage, and condition coverage are thoroughly discussed in chapter six. This chapter also covers data-flow testing and an evaluation of control-flow versus data-flow testing for adequacy. The final chapter of the book discusses program mutation as a means of assessing testing adequacy. While this chapter is likely to have an even more limited audience, the information is presented with sufficient detail to be valuable when applicable.
Be forewarned that this book is not an "easy read." The writing style is that of a math textbook and will require the non-mathematician to become acquainted with mathematical notation and concepts. For example, there is a heavy dose of set theory since much of test generation concerns defining sets, subsets, and recognizing their relationships. The treatment of test generation from combinatorial designs is especially, and necessarily, heavily mathematical. However, if you ever intend to use combinatorial test design, Latin squares, or mutually orthogonal Latin squares, this book provides the foundation you're likely to need.