Software testing is a process which consists of dynamic and static activities, which concerns itself with the evaluation of software products to determine that the software indeed does meet the requirements of the end user, and also to demonstrate that the software is fit for purpose and does not have defects. There are different types of testing tools, which help in the said process. Also, there are certain types of testing which are a part of a particular part of the software development life cycle. Just as there are different models in software development, there are different models in software testing as well. Each of these models use different test levels, which have their own objectives. There are four test levels which are common to all the software testing models, namely component testing, integration testing, system testing and acceptance testing. All other types of software testing can be classified under either of them. Before we focus our attention on integration vs. system testing, we will read in short about integration and system testing.
The process of combining and testing multiple components together is known as integration testing. It is a systematic approach to build the complete software structure specified in the design from unit tested modules. It assures that the software units are operating properly when they are combined together. The aim of integration testing is to discover errors in the interface between the components. The interface errors and the communication between different modules are also unearthed in this testing. There are two main types of integration testing, namely incremental and non-incremental testing. Incremental testing can be performed using any one of three approaches, namely top down approach, bottom up approach, or functional incremental approach. If there are a number of small systems to be integrated to form a large system, then the system integration testing process is same as component integration testing, as each small system is considered as a component. When system integration testing is done, the interaction of the different systems with each other is carried out, whereas in component testing the interaction between the different components is tested.
The testing carried out to analyze the behavior of the whole system according to the requirement specification is known as system testing. The test cases are designed based on risks and/or requirement specifications. In some cases, business processes, system behavior, and system resources may also be taken into consideration. Tests are also run to see the interaction of the software with the underlying operating system. System testing is considered as the final test carried on the software from the development team. Both functional and non-functional requirements of the system are tested in system testing. These tests are carried out in a controlled test environment. There are different types of testing which are a part of system testing like usability testing, load testing, stress testing, compatibility testing, volume testing, etc.
Integration Testing Vs. System Testing
It is often that people believe integration and system testing are the same. However, from the above explanation we can say that they are different types of testing. The next question which automatically arises is, what is the difference between integration testing and system testing. Integration testing aims to check if the different sub functionalities or modules were integrated properly to form a bigger functionality, whereas in system testing the system is tested as a whole, where the functionalities that make up the system are not taken into consideration. It is the working of the system as a whole which is important. In other words, focus of attention is on the modules in integration testing, whereas in system testing the focus of attention is on system functionality. To explain this further, integration tests are carried out before the system moves to the system testing level.
When integration testing is carried out, interface specifications are taken into consideration, while in system testing the requirements specification are important. In system testing, the tester does not have access to the code used to make the system. On the other hand, while carrying out integration testing, the tester is able to see the internal code. When integration testing is carried out, some scaffolding may be required in the form of drivers and/or stubs. The same is not necessary for system testing.
To sum it up in short, both of them are an important part of the software testing process. Integration testing concerns itself with the modules of the software and system testing takes care of testing the software as a single entity.