LEVELS OF TESTING
• Software testing is generally carried out at different levels.
• There are four such levels namely unit testing, integration testing, system testing and acceptance testing.
• The first three levels of testing activities are done by the testers and the last level of testing (acceptance) is
done by the customer(s)/user(s).
Unit Testing
• We develop software in parts / units and every unit is expected to have a defined functionality.
• We may call it a component, module, procedure, function, etc., which will have a purpose and may be developed independently
and simultaneously.
• There are also problems with unit testing. How can we run a unit independently?
• A unit may not be completely independent. It may be calling a few units and also be called by one or more units. We may have
to write additional source code to execute a unit.
• The additional source code to handle the activities of a unit X is called ‘driver’.
• the additional source code to handle the activities of a unit A and a unit B is called ‘stub’
• The complete additional source code which is written for the design of stub and driver is called scaffolding.
Integration Testing
• We combine two or more units because they share some relationship.
• This relationship is represented by an interface and is known as coupling. The coupling is the measure of the degree of
interdependence between units.
Integration Testing
• When we design test cases for interfaces, we should be very clear about the coupling amongst units and if it is
high, a large number of test cases should be designed to test that particular interface.
• A good design should have low coupling and thus interfaces become very important. When interfaces are
important, their testing will also be important.
• In integration testing, we focus on the issues related to interfaces amongst units.
• There are several integration strategies that really have little basis in a rational methodology and are given as
Top-down testing , Bottom-up testing, Sandwich testing
System Testing
• We perform system testing after the completion of unit and integration testing.
• We test complete software along with its expected environment. We generally use functional
testing techniques, although a few structural testing techniques may also be used.
• A system is defined as a combination of the software, hardware and other associated parts that
together provide product features and solutions.
• System testing ensures that each system function works as expected and it also tests for non-
functional requirements like performance, security, reliability, stress, load, etc.
• This is the only phase of testing which tests both functional and non-functional requirements of the
system.
• We also review all associated documents and manuals of the software.
• This verification activity is equally important and may improve the quality of the final product.
Acceptance Testing
• This is the extension of system testing. When the testing team feels that the product is ready for the customer(s), they
invite the customer(s) for demonstration.
• After demonstration of the product, customer(s) may like to use the product to assess their satisfaction and
confidence.
• This type of usage is essential before accepting the final product.
• The testing done for the purpose of accepting a product is known as acceptance testing. This may be carried out by
the customer(s) or persons authorized by the customer(s).
• The venue may be the developer’s site or the customer’s site depending on mutual agreement. Generally, acceptance
testing is carried out at the customer’s site.