A Practitioner's Guide to Software Test Design
Lee Copeland
Artech House Publishers
Boston London
Library of Congress and British CIP information available on request
685 Canton Street
Norwood, MA 02062
(781) 769-9750
www.artechhouse.com
46 Gillingham Street
London SW1V 1AH
+44 (0)20 7596-8750
Copyright 2004 STQE Publishing
All rights reserved. No part of this book shall be reproduced, stored in a retrieval system, or transmitted by any means, electronic, mechanical, photocopying, recording, or otherwise without written permission from the publisher.
International Standard Book Number: 1-58053-791-X
Printed in the United States of America
First Printing: November 2003
Trademarks
All terms mentioned in this book that are known to be trademarks or service marks have been appropriately capitalized. Artech House Publishers and STQE Publishing cannot attest to the accuracy of this information. Use of a term in this book should not be regarded as affecting the validity of any trademark or service mark.
Warning and Disclaimer
Every effort has been made to make this book as complete and accurate as possible, but no warranty or fitness is implied. The information provided is on an "as is" basis. The authors and the publisher shall have neither liability nor responsibility to any person or entity with respect to any loss or damages arising from the information contained in this book.
Dedication
To my wife Suzanne, and our wonderful children and grandchildren
Shawn and Martha
David
Cathleen
Melissa and Jay
Brian and Heather
Thomas and Jeni
Carrie
Sundari
Rajan
and to Wayne, Jerry, Dani, Ron, and Rayanne for their encouragement over the years.
Lee Copeland is an internationally known consultant in software testing, with over 30 years of experience as an information systems professional. He has held a number of technical and managerial positions with commercial and nonprofit organizations in the areas of software development, testing, and process improvement. He has taught seminars and consulted extensively throughout the United States and internationally.
As a consultant for Software Quality Engineering, Lee travels the world promoting effective software testing to his clients. In addition, he is the program chair for STAREAST and STARWEST, the world's premier conferences on software testing.
Preface
A Practitioner's Guide to Software Test Design contains today's important current test design approaches in one unique book. Until now, software testers had to search through a number of books, periodicals, and Web sites to locate this vital information.
Importance of Test Design
"The act of careful, complete, systematic, test design will catch as many bugs as the act of testing.... Personally, I believe that it's far more effective."
- Boris Beizer
The book focuses only on software test design, not related subjects such as test planning, test management, test team development, etc. While those are important in software testing, they have often overshadowed what testers really needthe more practical aspects of testing, specifically test case design. Other excellent books can guide you through the overall process of software testing. One of my favorites is Systematic Software Testing by Rick Craig and Stefan Jaskiel.
A Practitioner's Guide to Software Test Design illustrates each test design approach through detailed examples and step-by-step instructions. These lead the reader to a clear understanding of each test design technique.
Today's Testing Challenges
For any system of interesting size it is impossible to test all the different logic paths and all the different input data combinations. Of the infinite number of choices, each one of which is worthy of some level of testing, testers can only choose a very small subset because of resource constraints. The purpose of this book is to help you analyze, design, and choose such subsets, to implement those tests that are most likely to discover defects.
It is vital to choose test cases wisely. Missing a defect can result in significant losses to your organization if a defective system is placed into production.
A Practitioner's Guide to Software Test Design describes a set of key test design strategies that improve both the efficiency and effectiveness of software testers.
Structure and Approach
A Practitioner's Guide to Software Test Design explains the most important test design techniques in use today. Some of these techniques are classics and well known throughout the testing community. Some have been around for a while but are not well known among test engineers. Still others are not widely known, but should be because of their effectiveness. This book brings together all these techniques into one volume, helping the test designer become more efficient and effective in testing.
Each test design technique is approached from a practical, rather than a theoretical basis. Each test design technique is first introduced through a simple example, then explained in detail. When possible, additional examples of its use are presented. The types of problems on which the approach can be used, along with its limitations, are described. Each test design technique chapter ends with a summary of its key points, along with exercises the reader can use for practice, and references for further reading. Testers can use the techniques presented immediately on their projects.
A Note from the Author
I love a good double integral sign
as much as the next tester, but we're going to concentrate on the practical, not the theoretical.
Each test design approach is described in a self-contained chapter. Because the chapters are focused, concise, and independent they can be read "out of order." Testers can read the chapters that are most relevant to their work at the moment.
Audience
This book was written specifically for:
Software test engineers who have the primary responsibility for test case design. This book details the most efficient and effective methods for creating test cases.
Software developers who, with the advent of Extreme Programming and other agile development methods, are being asked to do more and better testing of the software they write. Many developers have not been exposed to the design techniques described in this book.
Test and development managers who must understand, at least in principle, the work their staff performs. Not only does this book provide an overview of important test design methods, it will assist managers in estimating the effort, time, and cost of good testing.
Quality assurance and process improvement engineers who are charged with defining and improving their software testing process.
Instructors and professors who are searching for an excellent reference for a course in software test design techniques.
Appreciation
The following reviewers have provided invaluable assistance in the writing of this book: Anne Meilof, Chuck Allison, Dale Perry, Danny Faught, Dorothy Graham, Geoff Quentin, James Bach, Jon Hagar, Paul Gerrard, Rex Black, Rick Craig, Robert Rose-Coutr, Sid Snook, and Wayne Middleton. My sincere thanks to each of them. Any faults in this book should be attributed directly to them. (Just kidding!)