Integration testing and types of Integration Testing
Once the planning, designing and management of a software is completed and the programmers and developers are ready with their completed codes and software structure, the testing team takes over the platform of Software Development Life Cycle (SDLC). Testing, which is the most crucial and necessary part of software development process is executed by the team of testers in every major as well as minor stage of software development process. It ensures product quality, functionality, effectiveness, compatibility and more. Moreover, the main aim of software testing is to validate whether the end product meets the requirements of the client or not. During the process of development a software or application goes through several types of testing, which tests and examines different features, qualities and functionality of the software. Integration testing is a type of software testing, which is performed on software to determine the flow between two or more modules by combining them. Integration testing makes sure that the interactions between different components of the software is completed smoothly without any complication.
What is integration testing?
The term ‘integrate’ as defined by Cambridge Dictionary means, “To combine two or more things in order to become more effective”. This definition of the term integrate defines the basic purpose of integration testing, which is a software development process where program units are combined and tested as groups in multiple ways. In this context, a unit is defined as the smallest testable part of an application. In other words, Integration testing is the phase in software testing, wherein individual software modules are combined and tested as a group. It occurs after unit testing and before validation testing. Furthermore, when software application is tested through integration testing, it exposes the problems and issues with the interfaces among program components before trouble occurs in real world execution. This type of testing takes its input modules that have been unit tested, groups them in larger aggregates, applies tests defined in an integration test plan to those aggregates, and delivers as its output the integrated system ready for system testing. Moreover, integration testing is a component of extreme programming, which is a pragmatic method of software development that takes meticulous approach to build a product by means of continual testing and revision.
Different Types of Integration Testing:
From testing codes in proper context to combining and testing the components or modules of the software, integration testing is immensely useful. It is a type of software testing that not only ensures the quality of the software, but also makes sure that the software is tested in the production like environment before it is released for the use of the end users and clients. Integration testing, which is also known as Integration and Testing (I&T), is performed through various types of approaches that are either executed by the integration tester or by a test team. As stated before, in this type of software testing program units are combined and tested as groups in multiple ways, hence each and every type of integration testing carries a lot of significance as they help testers in determining the effectiveness as well as the functionality of the software. Moreover, the various types of integration testing can be categorised into two different groups that are mentioned below:
Incremental Integration Testing:
In incremental integration testing, the developers integrate the modules one by one using stubs and drivers to uncover defects in the software program. Here, each module has a definitive role to play in the project or product structure and has clearly defined dependencies, which can be known only at the runtime. The most important quality of incremental integration testing is that the defects are found early in a smaller assembly, when it is relatively easy to detect the root cause of the same. Incremental Integration Testing is performed on software through the following approaches:
- Top-Down Integration Approach: In top-down approach the testing takes place from top to bottom, following the control flow or architectural structure. Additionally, components or systems are substituted by stubs.
- The tested product is extremely consistent in this approach as the integration testing is performed in an environment that is similar to the real world environment.
- The stubs in top-down approach can be written in lesser time compared to drivers as they are simpler to author.
- Here, fault localization is easier.
- In top-down approach the critical modules are tested on priority, which further helps testers in finding major design flaws as early as possible.
Bottom-Up Approach Integration Approach: In this approach of incremental integration testing, all the modules at the lower level of the software are tested with higher modules until all the modules are tested. Moreover, the testing takes place from the bottom of the control flow to upwards. Unlike top-down approach, here the components or systems are substituted with driver.
- It requires several stubs.
- The modules at the lower level of the software are tested inadequately.
- The basic functionality of the software is tested at the end of the cycle.
- No time is wasted waiting for all modules to be developed.
- In this approach development and testing can be done together so that the product or application will be efficient and as per the customer specifications.
- The key interface defects are caught at the end of the cycle.
- Test drivers are required to be created for modules at all levels except the top control.
- The critical modules, which control the flow of the application are tested last and may be prone to defects.
Non-Incremental Integration Testing:
Whenever the relationship between the modules is not clear, non-incremental integration testing or big bang integration is executed. In this case the data is created in one module and is combined with all the other modules to check as well as test the flow of data between them. It is because of this that non-incremental integration testing is also known as Big Bang Integration.
- Big Bang Integration: In this type of integration testing approach, most of the developed modules are coupled together to form a complete software system or a major part of the system, which is then used for integration testing. This method is very effective for saving time in the integration testing process. However, if the test cases and their results are not properly recorded, the entire integration process will be more complicated and may prevent the testing team form getting their desired goals or results of integration testing.
- Here all components of the software are integrated at once.
- Convenient for small systems.
- Helps testers in saving integration testing time.
- Fault localisation is difficult in this approach of integration testing.
- Given the number of interfaces that are required to be tested in this approach, some of the interface links can be missed easily.
- As all modules are tested at once, high risk critical modules are not isolated and tested in priority.
Sandwich testing is a culmination of both incremental as well as non incremental integration testing, wherein Bottom-Up approach is focused on middle to top layer, Top-Down approach is concerned about layers from middle to downwards and the Big Bang approach is followed for the middle layer. This type of testing combines the advantages of all the three approaches and is mainly used to test large projects.
- Sandwich approach is very useful for large enterprises and huge projects that further have several subprojects.
- When development follows a spiral model and the module itself is as large as a system, then one can use sandwich testing.
- Top-Down and Bottom-Up approach both start as per development schedule.
- Units are tested and brought together to make a system.
- Integration is done downwards.
- The resources that are required are immense and big team perform both top-down and bottom-up method of testing at a time or one after the other.
- As both Top-Down and Bottom-Up approaches are executed on the software, the cost of testing is very high.
- It cannot be used for smaller systems with huge interdependence between the modules.
- It only makes sense when the individual subsystem is as good as completed system.
- Different skill sets are required for testers at different levels.
From the above discussion we can conclude that the importance of Integration testing and its types in extremely high during software development process. Integration testing, which is a type of software testing, combines and tests units in groups through various ways as well as testing types. The main purpose of this level of testing is to expose faults and other discrepancies, which are found when interactions are happening between integrated units. Moreover, to achieve desired goals and to detect all the faults in the integrated units, the test drivers and test stubs are used in integration testing, which assist testers with the process of testing. Hence, if a tester wants to have a streamline development process, where getting new features into production is fast and easy, then they should implement integration testing. In short, upon the completion of unit testing, the units or modules are integrated, which gives rise to integration testing, which aims at verifying the function, performance, and reliability between the modules that are integrated.