Integration testing is a specific phase in software testing where testers combine and test all standalone modules into one entity. In this phase, testers test each module of the interface and communication. These tests are conducted using two approaches- top-down and bottom-up integration testing. Sandwich Testing, aka Hybrid integration testing, comprises both the bottom-up and top-down testing approach. In short, in sandwich testing, testers gain the advantages of both of these approaches, making the process more precise and result-oriented.
Below are the features of sandwich or hybrid testing −
It comes with three layers − the main target layer, the layer below the target layer, and a layer above the target layer.
The testing is primarily focused on the middle target layer.
It is selected as per the characteristics of the code structure.
Testers can adopt sandwich testing to work with the working version of a software application.
It is also used to determine the develop the basic working system at the earliest stage of the software development cycle.
The main objective behind sandwich testing is to eliminate weaknesses and improve the quality of a product by introducing evolved methodologies. Testers used advanced techniques like dynamic symbolic execution and search-based techniques to generate quality test data covering all branch statements. This promotes code coverage accuracy at regular intervals of time by minimizing test cases.
Lack of proper methodology can lead to project failure. Each software comes with a specific methodology, with each methodology having its characteristics. The hybrid or sandwich testing comprises different technologies, ensuring maximum coverage of methodologies required for a successful testing process.
Sandwich testing is similar to web application testing.
For instance, an application of windows includes an amalgamation of user interfaces like .NET, MFC, and WPF. One can install such hybrid apps on their system. Not only are they free from compatible issues, but they also take less time for installation and execution. They offer consistency and full cross-platform compatibility with major devices. Developers can write a single script and run it on multiple platforms at ease.
Testing involved in Hybrid application program There are three types of testing conducted in a hybrid application program
Function Testing − It is conducted to ensure that all features in the program are working perfectly. It ensures that the app can easily use the built-in resources.
Connecting Testing − It ensures that the application can work accurately with multiple types of network connections. Besides, it also verifies that users can switch different connection types and work without any network connection.
Compatibility testing − It makes sure the app runs on different devices without showing any compatibility issues.
Before we learn more about the Sandwich approach, let's have a brief idea about integration testing.
Software engineers use a varied range of strategies to execute integration testing, featuring −
Big bang approach
Incremental approach: It is divided into three stages- Top-Down, Bottom-up, and sandwich (combination of top-down and bottom-up) approach
Big bang testing is great for small systems. In this testing, all components or modules are combined (aka entity) at once and tested as a unit.
In incremental testing, at least two or more modules (logically related) are integrated and tested. Then the testers gradually add the other related modules until all related modules are integrated and tested successfully.
Incremental testing is conducted using two methods: Bottom-up and top-down testing.
In this approach, the testers test the lower-level modules first. All the modules tested are later used to test higher-level modules. The process continues until all top-level modules are tested completely.
Easy for fault localization
Unlike the big bang approach, one doesn't have to develop all modules to start the testing process.
Since critical modules are tested last, it may lead to defects
Cannot test early prototypes
The testing is conducted from top to bottom through the software system control flow in the top-down integration approach. Contrary to the bottom-up approach, testers test the higher-level modules first, following the lower-level modules. If some modules are not ready, test engineers can use stubs as an alternative.
Easy to fault localization
Getting an early prototype is easier
Since critical modules are tested first, it would be easier to detect major flaws at the earliest.
Lower modules are often getting neglected
Needs many stubs
As discussed earlier, sandwich testing is a hybrid of the bottom-up and top-down approaches. Meaning, both top-level modules and lower-level modules are integrated and tested together as a system. Therefore, sandwich testing is also known as hybrid integration testing. This testing requires the use of both stubs and drivers.
The sandwich testing process can be divided into five steps:
Step 1 − Prepare the test plan
Step 2 − Develop the test scenarios, cases, and scripts
Step 3 − Run the test cases and report the defects
Step 4 − Track the defects and test them again
Step 5 − Repeat steps 3 and 4 until the integration is completed successfully
Decide the methods or approaches to be used in the testing process
Allocate scopes and out of scope items
Assign roles and responsibilities
Accommodate prerequisites for the testing
Prepare the testing environment
Prepare risk and mitigation plans
Below are the entry and exit criteria to conduct an integration testing
Entry Criteria −
Prepare all unit tested components or modules
Fix and close all highly critical bugs
Complete the code of all modules and integrate them successfully
Sign off and document all integration test plans, test cases, and scenarios
Set up the required test environment
Test all integration application
Document all executed test cases
Fix and close all highly prioritized bugs
Submit all technical documents along with release notes
Before running a sandwich testing, it's crucial to study the architecture design of the application. This helps you identify the critical modules better. Testers can contact the architectural team to obtain the interface design to create and verify test cases and interface details.