Updated on by Hayley Brown
Prior to any software release it undergoes extensive testing, iteration and further development. Integration testing is just one part of the functional testing process when testing new systems in software development. Functional testing is a quality assurance process which tests functions by feeding an input and examining the output.
The process of functional testing is as follows, unit testing, integration testing, system testing, and user acceptance testing. They are designed to highlight any errors, evaluate the systems behaviour, and the software applications performance.
What is integration testing?
Integration testing is a key step in a SaaS applications‘ development process. It detects if there are any errors where software components and system interfaces work together. In other words testing two or more separate functions, or component groups to ensure they work as expected when integrated.
API testing is part of the integration testing process. This involves testing APIs directly to determine if they meet expectations of functionality, reliability, performance, and security.
It is beneficial to perform integration testing because it makes sure integrated components (such as our API connectors) work as intended. As well as helping components interact with APIs or other third-party applications. It is an efficient option as it covers a large portion of the system. It also detects any issues related to the interface between components.
Normally integration testing is performed after unit testing, which tests the individual components. It then combines those tested units to start performing the integration testing. With the primary goal to test the interfaces between the units.
Process of Integration Testing
When the system has been built and the units have been successfully individually tested, they can be tested together. The process of integration testing includes a range of frameworks and continuous integration. It can broadly look something like the following.
- Firstly, start by preparing a test integration plan and the frameworks to be used.
- Next decide on the type of integration testing approach, this could be Big Bang, Top-Down, Bottom-Up, or Sandwich testing.
- Then you’ll need to design test cases, scenarios and test scripts.
- Next you’ll need to deploy the chosen components together to run the integration testing.
- Then you can track any errors and record the testing results.
- Finally, repeat the process until the entire system is tested.
Types of Integration Testing
There are several approaches to integration testing, each presenting their own benefits and challenges.
Big Bang Testing
Big Bang testing is one of the testing approaches that could be used. When all the components have been developed and tested individually they are integrated once and tested together. This approach is ideal for smaller systems. It is however difficult to locate a fault or the root cause of an issue.
Alternatively you could use incremental integration testing. This approach connects two or more components together that are logically compatible. As the test progresses more components are added to understand, and test all the components functionality successfully. This approach can be further divided into top-down approach, bottom-up approach and sandwich approach.
The top-down approach is as it sounds, testing the top-most components and moving down to the lowest components. This makes fault locating easier, and early detection of design flaws.
The bottom-up approach, again as it sounds, tests the lowest components of the application and moves upward. The benefit of this approach is that development and testing can be done simultaneously for efficiency.
Finally, the sandwich approach is considered a hybrid of the two previously mentioned testing approaches. The system has three layers, the main target layer in the middle, with a layer above and below it.
The top-down approach is applied from the top to the middle layer. The bottom-up approach is used on the layer from the bottom to the middle. With the big bang approach used on the components in the middle. This is a useful testing approach for a large organisation with several software development projects on the go.
It can be difficult to know which testing approach is the most suitable for your system. Some software engineers and developers use multiple approaches, or a hybrid to achieve their desired testing efficiency.
Integration Testing Challenges
When performing integration testing you may come across a number of different challenges. For instance, if there are many different systems involved, databases, platforms and environments can complicate the testing process.
As well as if too many developers write code with a different style making it difficult to understand the individual units. The same can be said if a system needing to be integrated is developed by completely different teams. It can result in incompatibilities and inconsistencies.
Other challenges that may be presented during testing is when integrating a new system to a legacy system. As well as integrating two legacy systems. This results in numerous changes and high testing efforts. With numerous testing approaches it can be challenging to decide on the most efficient, and effective approach.
During the testing phase you may also see the difficulty in establishing interfaces between different systems. As well as ensuring that the influence of either one does not create any issues.
Integration Testing Best Practices
There are several integration testing best practices you can follow or implement before your testing has started.
- Perform testing as early and as often as possible, once unit testing is complete for early feedback in the development process.
- The details between units are clearly defined in the testing scripts, and scenarios which will help for future reuse.
- If possible automate tests so they can be performed quickly, top-down and bottom-up approaches for instance could be automated.
- Use the appropriate integration testing tools.
- Identify important units to prioritise during the testing process, to test the interfaces in detail.