Change impact analysis is especially important in object-oriented systems with many more dependencies than in conventional systems. The configuration management tool keeps track of changes to system components. The amount of retesting needed during regression testing depends on the type of changes applied to the system components, i.e., changes to the semantic, implementation, or interface. Design patterns describe a schema of object interaction that could be used to define generic test cases. Testing based on the specification is referred to as black-box testing.
Testing based on the source code is referred to as white-box testing.
Assertions can be used to check adherence to pre- and postconditions of method calls. It is desirable, that assertions can be turned on and off selectively. Monitoring of parameters, return values, and exceptions helps to understand the software system and to localize faults. Direct manipulation of instance variables is sometimes necessary to test the effect of method calls for particular object states. Breaking the encapsulation might be disadvantageous if, for example, object states are set and tested that are not relevant to real system execution.