There are several types of testing that should be done on a large software system. Each type of test has a specification that defines the correct behavior the test is examining so that incorrect behavior can be identified.
There are six types of testing which are as follows:
Unit Testing
Opacity: White box testing
Specification: Low-level design and/or code structure
Integration testing
Opacity: Black- and white-box testing
Specification: Low- and high-level design
Functional and system testing
Opacity: Black-box testing
Specification: high-level design, requirements specification
Acceptance testing
Opacity: Black-box testing
Specification: requirements specification
Regression testing
Opacity: Black- and white-box testing
Specification: Any changed documentation, high-level design
Beta testing
Opacity: Black-box testing
Specification: None.