Object-Oriented programming increases software reusability, extensibility, interoperability, and reliability. Software testing aims to uncover as many programming errors as possible at a minimum cost. This book discusses those issues. A major challenge to the software engineering community remains how to reduce the cost and improve the quality of software testing.
Review By: Cathy Bell 08/26/2002This book is actually a compilation of articles published on testing object-oriented software. Each chapter begins with an overview outlining what the articles cover and gives the reader an idea of what to expect from the article. The material follows a logical path starting with articles that outline OO testing problems and progressing to the final chapter on Test Tools.
Articles cover the problems associated with OO testing, various theories of OO specific testing, verification and validation, unit and integration testing, and regression testing. There are plenty of examples of OO software, the testing strategies applied, and the outcome of the testing. Throughout the book are illustrations of OO configurations, class structures, fishbone analysis of testing considerations, designs for testing configurations, integration testing diagrams, algorithms for selecting tests to run, and even code used to implement an automated testing methodology, ClassBench.
The first chapter introduces the reader to the problems associated with object-oriented testing. Issues from the first article, “Adequate Testing and Object Oriented Programming,” which was written in 1990, are still issues today. OO programming may make design and coding easier, but it complicates testing, change management, and tool selection.
“Verification is the process that examines the product in detail and reports how true it is to specification.” The two articles presented in chapter 2 detail this process and would be excellent teaching tools on this subject.
Chapter 3 brings us to unit testing and integration testing. The articles show testers how to use test models, test coverage criteria, and new test generation methods to overcome obstacles to testing. The third article in this chapter uses the example of an ATM (automated teller machine) and guides us through the model they used to test this application.
Regression testing and state object testing are covered showing how they can be accomplished. Regression testing is covered from the most basic statement level test to the broad concept of analyzing the change, deciding what impact these changes have, and testing the blocks of code affected directly by the changes. State object testing takes us into the world of reverse engineering, using a simple traffic light program to walk us through the process.
Chapter 6 deals with test methodologies, and what sequential steps should be followed to carry out a successful test methodology. As a means to save test effort, both test reusability and integrating testing into the development process are discussed.
The last chapter, Test Tools, does not advocate any testing tool. Rather, the papers presented here are geared towards test automation, what can be automated, and what should be automated.
This book was published in 1998, and most of the articles and references cited were published prior to 1995. Many of the articles point out that their methods were yet to be verified, when in fact object-oriented methodologies are no longer untested resources, but viable tools.
This book is not for a testing rookie or one that you would sit down and read cover to cover. It covers many areas of testing object-oriented software in-depth and assumes a high level of understanding of object-oriented methodology and terminology. There are many formulas and theorems presented that require an understanding of mathematics principles of both algebra and statistics and analytical methods.
I think the book would be useful as a teaching tool, though some of the articles and sources are a few years old. There are numerous examples and illustrations to facilitate teaching the ideas presented. They could be used to stimulate discussions and class projects in a teaching environment.