The rise of object-oriented (00) software development seems to have helped improve software quality, but it has not, of course, eliminated all possibility of error. Thus, software testing is at least as important today as it ever has been. Testing, as a centerpiece of quality assurance efforts, only increases in value as society becomes more and more reliant on software. Testing 00 components and even 00 systems is not very difficult once you know how to do it. But until now there have been few accounts of how to do it well and none that adequately characterize testing across the life cycle of large 00 software production efforts. This book combines insights from research on 00 testing with insights from industrial testing efforts to produce an account that should be valuable to anyone interested in the theory and practice of testing 00 software. This book provides extensive coverage of testing methods applicable to 00 software development, as well as discussions of underlying concepts and technical underpinnings that enable you to devise additional techniques of your own. It is unlikely that you will apply every test, process, review criterion, or metric described in this book to your software project. If you have a small project, it is unlikely that you will apply more than a few of them. But the breadth of coverage allows you to select and customize them with full knowledge of the alternatives and of the options available if you need to extend testing efforts.