Levels of Software testing


Following are the different levels of testing
1) Unit testing
2) Integration testing
3) System testing
4) Acceptance testing

1) Unit Testing:-
Unit Testing is the first level of testing which is the first responsibility of the developers and then of the testers. It is generally seen as a "white box" test class. That is, it is based to looking at and evaluating the code as implemented, rather than evaluating performance to some set of requirements.
It has the following advantages

a) Does the code implemented what the designer intended
b) For each conditional statement, is the condition correct?
c) Do all the special cases work correctly?
d) Are error cases correctly detected?

2) Integration Testing:-
Is a testing of combined parts of an application to determine if they function together correctly? The 'parts' can be code modules, individual applications, client and server applications on a network, etc. This type of testing is especially relevant to client/server and distributed systems.
For example if an application has 5 modules (A, B, C, D, E) first A+B modules combinded and tested then A+B+C… it goes for All of the pending module combinations. Integration testing identifies problems that occur when units are combined.
Following are the main reasons for doing integration testing

a) To find faults that could not have been found in the component testing because, they only become apparent when components are integrated
b) To generate credible information about the software under test, so that technical and business decisions can be made
c) Confirm that as the system grows risk of failures are being diminished

Types of Integration testing: -
1) Bottom up integration
2) Top down integration
3) Umbrella approach

1) Bottom up integration:-
Integrating from the last module of an application to first module of the application. Bottom-Up Integration testing is particularly suited to Concurrent Programming. The slow build-up will introduce processes to one another in a controlled manner which allows the consequences of their interactions to be fully determined

Following are pros and cons of button up integration
a) Bad for functionally decomposed systems
b) Use full for integrating systems like, object oriented, real time systems etc
c) Systems that are specifically developed for performance requirements

2) Top down integration: -
Integrating the modules as per the priority which is derived from the design of an application. The top-down approach to integration testing requires the highest-level modules be test and integrated first. This allows high-level logic and data flow to be tested early in the process and it tends to minimize the need for drivers.

Following are pros and cons of button up integration
a) Test cases can be defined in terms of functionality of the system
b) Sequence of the test data flow will be clear
c) Most common/frequently used integration technique
d) Writing stubs can be difficult, if modules are not ready

3) Umbrella Approach: -
Testing along functional data and control-flow paths. First, the inputs for functions are integrated in the bottom-up pattern. The outputs for each function are then integrated in the top-down manner. The primary advantage of this approach is the degree of support for early release of limited functionality. It also helps minimize the need for stubs and drivers. The disadvantage of this model is it is less systematic than the other two approaches, because of which more regression testing is required