Software Testing Levels - Integration Testing
Unit testing usually performed by the developer who wrote the code and is done on the specific component and specific section of the code. The developers will come up the list of test cases for their newly written code that covers edge / corner cases, if else branchs and other possibilities for the newly written code and expected behaviour. Unit testing is very important since the bugs caught on this level can be easily fixed by the developers with out any logging and escualtion to other teams / managers. The turn around time would be very quick.
Integration testing is needed when the software product is composed of multiple software modules / projects and developed by different teams and many developers. Once the code checked in the all software developers are done, a snapshot of the code is taken. This would be an integrated build or there will be a build number associated with it. Usually the developers and lead developers or managers will test the build against all the integrated componets are working fine. Sometimes, when the developers are depending on each other, may have to write test code instead of waiting for others to complete. Such test code should be removed during integration testing.
Once the integration testing is complete, it means all the components and interfaces are working as expected. System testing does the end to end testing of the software product and checks whether it meets all the requirements. Usually product managers who has the complete functional knowlegde of the entire system tests the system testing.
System Integration Testing requires testing against any thrid party systems that needs to work together. This often occurs when the software product is distributed as a library to the clients with interfaces (API). The clients uses the software library interface to enhance coming up with a customized version of the product, system integration testing is required. In general system integration testing required, only when the software is built using different companies. One company product supplies thier software as a third party library to other company and the other company builds the final software product and distributes to the clients.