Software testing has various levels. However, on broader scale software testing can be categorized into (1) Functionaltesting and (2) Non-functional testing. These topics will be discussed in detail.
Overview of Software Testing LevelsHere we will understand various levels of testing, namely:
The smallest independent and testable part of the source code is referred to as a unit. It is the first step in software testing environment and is generally conducted by the developers or their team mates. This form of testing is rarely performed by software testers. In order to perform integration testing it is important to first complete the unit testing for all the units. In order to perform unit testing it is important to have well defined unit test plan and unit test cases.
There are several benefits of unit testing. First of all, you get the confidence for going ahead with the integration testing only when you are sure that all units are working correctly. When you start unit testing in parallel to development it may look like a slow process as many defects are uncovered during this stage and several changes are made to the code. However, with time the code is refined and number of defects begins to reduce. So, the foundation of the software is strong and in the later stages the software development is carried out at a much faster pace thereby saving a lot of time.
If unit testing is carried out properly then it would also result in a lot of cost saving as the cost of fixing a defect in the final stages of software development are much higher than fixing them in the initial stages.
Unit testing is carried on the smallest testable component of the project so the number of test cases and test data are less, and it is not always possible to check all the scenarios for functional and information flow of software application. So, there are many test cases that can be tested only after the unit has been merged with other units to form a bigger component.
Integration TestingOnce the unit testing phase is over, it is time to move on to integration testing. During integration testing the tester checks how one or more units interact with each other and produce output for various scenarios. This form of testing is carried out a software testing engineer.
In this form of testing a lot of defects related to functional, requirement and performance levels are uncovered. Unit testing confirms that various units are able to perform as per the requirement individually but integration testing confirms whether these independent units are able to perform as per expectations when integrated together. Integration testing can be broadly classified into:
Top down is systematic approach where the top level modules are first tested and then one by one the sub modules are added and tested. The Bottom up approach is just the opposite of top down. In this case the lower most modules are tested first and step by step the higher level modules are added and tested. Generally the bottom up approach is followed first in software testing followed by top-down testing.
In Top down approach integration testing stubs can be used as handles in case of modules or sub programs that are not available or not ready. These are dummy modules used at low levels. In similar way in case of bottom up approach is a main program is not available then calling program referred to as driver can be used as a replacement to complete testing process.
System TestingOnce the integration testing phase gets successfully completed it is time to move on to system testing where the system as a whole with all components well integrated is ready for further testing. This is where the software is not only tested for performance but also for adherence to quality standards. As the system is tested as a whole to see if it is in compliance with the functional and technical specifications and the quality standards defined by the organization, it is important that this form of testing is carried out by a highly skilled testing team. For this form of testing it is very important to create a scenario similar to the real time scenario where the system will be deployed.
System testing is purely black box testing. The system is checked as per the requirement specifications. The testing is carried out from the user’s point of view. This type of testing is carried out to check the behavior of the application, software design and expectation of the end user. System testing validates and verifies both Application architecture and business requirements of the client.
Acceptance TestingOnce the system has been thoroughly tested via unit, integration and system testing it is time for the quality assurance team to come and have a look at the system and test it for quality with the help of predefined test scenarios and test cases. The software is tested for accuracy. The acceptance testing looks at the system from various angles: right from cosmetic looks to internal functioning. This form of test is very crucial because there are legal as well as contractual requirements associated with the software for it to be accepted by the client. Acceptance testing can be of following types: