October 9, 2019
Integration Testing – Everything You Need to Know to Get Started!
This article highlights the significance of integration testing, its purpose, types, and benefits.
What is integration testing?
Any software consists of different modules that perform different functions. A software module may be working fine independently but to ensure that the software works well when all modules are integrated testers perform Integration Testing.
Integration testing evaluates the functionality of various modules when integrated to form one single unit. This testing validates smooth transitions between various integrated components of the software.The purpose of integration testing is to find defects and faults between multiple interfaces of the software.
List of topics covered in this article:
- What is integration testing?
- Why do we need integration testing?
- What are the benefits of integration testing?
- How to approach integration testing?
- What are the steps to integration testing?
Why do we need integration testing?
The need for integration testing is due to the following reasons:
- The defects in integrated modules are difficult to find and are complex to fix.
- Fixing bugs in integrated modules can eliminate the overall number of bugs and decreases the count of code changes in the next level of system testing.
- Integration testing allows us to check the integration of various components of the software that help to evaluate the end-to-end cycle of the software.
- This testing approach also reduces the risk of software failure.
- It also validates the impact of structural changes when the end-user moves from one module to another.
- It helps to validate the correct functionality of third-party API tools in the software.
- This testing addresses issues that were ignored in unit testing such as error trapping, hardware interfaces, data formatting, and third party interfaces. Integration testing also checks the functional and non-functional behavior of the integrated interfaces.
What are the benefits of integration testing?
The testing approach offers a list of benefits, such as:
- Integration testing allows ensuring the appropriateness of the modules and their results.
- It also helps to detect the issues related to the interface between modules.
- Integration testing helps to stimulate the interaction between various modules.
- It covers multiple modules to provide broader test coverage.
- Integration testing impacts the overall testing efficiency of the software.
- It helps to smoothen the transition between interfaces.
How to approach integration testing?
Combining various functional units and then testing them to check the results is the approach taken in integration testing.
Integration testing has two subdivisions as an Incremental and Big bang approach. Incremental integration testing is divided into three approaches as top-down, bottom-up, and sandwich approach. Each method has its benefits. Let’s take a look:
Incremental testing approach
This form of integration testing is performed on logically related modules combined in a unit.
All modules are added one by one in the testing unit until testers cover the entire system. Incremental testing often uses stubs and drivers as some modules are still in their development phase. Stubs and drivers are the dummy programs that don’t implement the logic but helps in establishing communication.
This approach has three approaches to select modules:
In top-down integration testing, the testing is done from top to bottom as per the architectural structure or control flow.
The top-down approach enables testers to test the first top module in isolation and then incrementally add other modules one by one to the testing unit going downwards. The flow of testing control in the system goes from top to bottom in this approach. As testers might find the lower modules still in a development phase, they use stubs as dummy programs that return the control to the superior modules.
The benefits of this approach are:
- Easy fault localization
- Quick prototype design
- Prioritizing critical modules
- Easy and quick to find design flaws and fixed
The only disadvantage of this approach is the lack of testing for lower-level modules that are under development.
This approach tests the lowest module first in the architectural structure. The other modules are incrementally added one by one for testing moving upwards in the architectural structure. The control of flow in testing moves from bottom to upwards.
This testing method is implemented when the top modules are under construction. The method uses drivers to stimulate the functioning of missing modules. The drivers perform various tasks such as calling module under test, passing test data, or receiving output data.
- Easy to test and develop the product
- Efficient approach for integration testing
- Easy to create test conditions
The sandwich approach involves testing the bottom and top modules in the architectural structure of the software.
In this approach, the middle layer (layer2) is the target where the tester has to reach. The whole software system is converted into three layers to begin the testing.
First is the middle layer, the second is the layer above, and the third is the layer below. The goal of a tester is to reach the middle layer by testing both the layers simultaneously.
Big Bang integration
This approach of integration testing is to start testing when all the modules are developed. All the units are tested together as one single combined unit. This form of integration testing works well for smaller systems. There are certain limitations faced in big bang integration, such as:
- It is challenging to find localization errors that delay the testing.
- It is also difficult to find the root cause of a defect in this method.
- All the interfaces are tested at the same time, so the testing team has to invest more effort and time.
- Critical modules are not prioritized which could increase the overall risk.
What are the steps to integration testing?
Integration testing includes the following steps:
- Integration testing starts with understanding the architecture of the application.
- Finding various modules of the system.
- Understanding the functionality of each module.
- Evaluate the data transaction between interfaces.
- Look at the entry and exit points in the system.
- Prepare the plan for testing.
- Select the testing approach.
- Categorize the modules as per testing needs.
- Find the various test conditions for test cases.
- Design test scenarios, scripts, and test cases.
- Deploy the chosen modules and perform integration testing.
- Execute the test cases.
- Track the defects and recording the results.
This form of integration testing focuses on delivering quick releases by reducing time to find and fix defects. Continuous Integration follows an architecture-based approach, providing more flexibility to the development teams.
In this form of integration testing, an integrated code in shared to the main branch of repository to develop a build. The build is tested using automation to avoid regression bugs after integration that leads to quick release. This testing helps to evaluate the system stability whenever a new integration is implemented.
Integration testing is required to build a robust system that behaves as expected. This testing method ensures that individual units work well together.