While the use of object-oriented development methods has increased the quality of software by leading to better, modular architectures, it does not provide correctness by itself. Thus, testing software remains an important task even in the presence of object-orientedness.

The traditional testing methods decompose software into procedures. However, the dimensions of object-oriented programming are such that this decomposition is ill-fitted for testing object-oriented programs. We address the problems of testing in the three dimensions of object-oriented software: classes, hierarchies, subsystems. The class forms a well-defined basic test unit; however its testing is impeded by encapsulation and inheritance issues. The class hierarchy concept introduces problems of undecidability due to polymorphism. Subsystems are the building blocks in integration testing.

We also study the use of traditional methods and the modifications that are needed to apply them to object-oriented software, e.g. complexity metrics.