Levels of Testing
To get a quality software product, developers and testers need to test the software at different levels during the coding/testing phase.
During the design stage the software product is divided into components or units and each components/unit is developed. Similarly, while testing it is not good if we combine all the units into modules and all the modules into the system in single shot and then start testing the entire system. A practical approach is to divide the testing process into different levels. Each components/unit has to be tested separately, the modules have to be built from the units, which are then tested. The modules are then combined together and the system is built and tested. Following are the different testing levels:
- Unit Testing
- Integration Testing
- System Testing
- Acceptance Testing
As shown in below figure, each level of testing is for testing a specific entity. Unit testing is done to test the source code. Integration testing is done to test the design. System testing is done to test the system against SRS and finally Acceptance testing is done to test the software against client/user requirements. To check whether the software meets the operational/business needs of the client, the software product is installed in the actual working environment and tested.
Unit Testing/Component Testing
Unit/component is the smallest entity in the software product. Every unit has to be tested separately to check whether it is as per the specifications. It is a software design and development method, where the programmer gains confidence that individual unit of source code are fit for use. Unit/Component testing is conducted by developers to verify the software at unit level. Unit tests typically exercises particular modules of software code. Developers utilise debuggers or self-developed tools to verify functionality. Unit/component testing occur before the software reaches to software testers.
Testing of a collection of units/components that have a logical relationship is called string testing. Suppose you have developed the code for a few data structures (a stack, a queue, and a tree), you may like to test all these units one after the other - this is string testing.
It may not be possible to test a unit/component in isolation. Developers may need to write additional code (stubs, drivers, simulators) to do the testing.
Module Testing
A module is an independent entity in software product. The tested units are integrated into a module and each module is tested separately for the specification.
Module testing is largely a white box oriented. The objective of doing Module, testing is not to demonstrate proper functioning of the module but to demonstrate the presence of an error in the module.
Module level testing allows to implement parallelism into the testing process by giving the opportunity to test multiple modules simultaneously. Testing multiple module/sub-systems in parallel is also known as parallel testing.
Integration Testing
After the modules are tested, the
modules can be integrated together. During integration testing a very
systematic approach has to be followed. Without following any systematic
approach if you integrate all the modules together in one shot and then start testing
then it is called big bang testing.
Foremost the first thing is to identify
which modules can be integrated first. The interfaces between the modules
should be well defined to achieve this.
The purpose of this level of testing is
to expose defects in the interaction between these software modules when they
are integrated. Integration Testing focuses on checking data
communication amongst these modules. Hence it is also termed as 'I & T'
(Integration and Testing), 'String Testing' and sometimes 'Thread Testing'.
System Testing
Once all the modules are integrated the system is ready for a full-fledged testing. It allows checking system's compliance as per the requirements. It tests the overall interaction of components. It involves load, performance, reliability and security testing.
System testing most often the final test to verify that the system meets the specification. It evaluates both functional and non-functional requirements for the testing. The application is tested in an environment that is very close to the production environment where the application will be deployed. This type of testing is performed by a specialized testing team.
Acceptance Testing
After the system testing is completed in your premises the software has to be approved by the client. The customer will carry out a rigorous testing called Acceptance testing. It is conducted to find if the requirements of the specification or contract are met as per its delivery. Basically done by the user or customer and other stockholders can be involved in this process.
Some Other Types of Testings
- Regression Testing
- Buddy Testing
- Alpha Testing
- Beta Testing
No comments:
Post a Comment