Software testing generally involves multiple levels of testing, unit, integration and system testing being the most common types. The tests at each level are typically performed at different stages in the SDLC. Unit testing verifies the code’s basic functionality. It’s usually performed at the class level in an object-oriented environment, with the constructors and destructors comprising the minimal test units. Developers typically write these tests as they write the code for each function to ensure it works as expected. Functions typically require at least one test for each branch in the code. Unit testing ensures that each module of the application works independently from the other modules. Integration testing verifies the function of the interface between two components. Modern applications typically integrate components iteratively, which allows interface problems to be quickly identified and corrected. This design generally involves integration testing with progressively larger numbers of components until it includes the entire application. Integration testing usually requires more coding and reporting than unit tests due to the complexity of component interaction in today’s software. Some applications require breaking larger integration tests into smaller components to locate errors more effectively. System testing evaluates the entire application’s compliance with its specifications once all of the components pass integration testing. These specifications include functional and system requirements, which are sometimes tested at the same time. An application’s design and behavior are both tested at this level, in addition to the user’s expectations in some cases.