Integration testing is a level in software testing in which unit tested individual software modules are combined and tested as a whole. The purpose is to test the performance, functional and reliability requirements placed on these assemblages. In this "building from the blocks" approach, the test cases are built to test if these components in aggregate form interact correctly.
All the individual modules are aggregated together simultaneously to form a complete or major portion of the software system under test. Though it saves time in the integration process, one minus to this approach, is that it is quite time consuming and difficult to trace the reasons for failure, with this kind of integration.
The testing is done starting from the top module and then proceeding step-by-step to the lower modules. There is consistency in quality of the tested product as it is tested in an environment closer to reality. Stubs (codes created to receive input from the top module & return with a response) are simple to create. An obvious drawback to this approach is that the most basic of functionalities is tested at the last stage.
Opposite to the top down approach, testing starts from the lowest or the innermost module and proceeds towards the top module. Requiring a driver to feed input test case into the modular interface, bottom up integration testing enables major fault detection from the lowermost units of the program. However, creation of test drivers for the same is an added headache. Also, it is not until the end of the cycle is reached, that the most glaring of interface defects are found.
It's basically a combination of bottom up and top down approach to get the advantages of both .i.e. easy finding of bugs and ease of detection of missing branch link, respectively.Click here to know more about sandwich testing.
Overall, it may be stated that integration testing, is one of the significant testing technique, which not only, ensures the proper interaction, compatibility, reliability among the integrated components, but also, looks after the dependencies and interaction with the external systems.