A number of modules contained in the entire program tested together to ensure that the entire program works.
Testing of individual subprograms to ensure correct input and output.
The program is tested within the real environment and its interactions with other programs and various hardware configurations.
The inputs and expected outputs are known however the processes are unknown.
This is where the testing technique whereby explicit knowledge of the internal workings of the item being tested is being used.
Testing of the final solution by personnel within the software development company prior to the product's release.
Testing the final solution by a limited number of users outside the software development company using real world data and conditions.