Testing is performed at various levels in a software development life cycle. In this Tutorial, we will know about different levels of testing as puzzle and at the end, you should be in a good position to share with others.
As we have seen in V model about different phases and their corresponding design stages. we will discus the levels one by one. Firstly, Unit Testing.
Unit Testing:
A unit is a module or a small set of modules.
- In Java, a unit is a class.
- An Interface.
In other words, A unit is the smallest part of an application that is ready to test. like functions, classes, procedures, interfaces. whereas, Unit testing is a method by which individual units of source code are tested to determine if they are ready for use. To simply define, Unit testing is testing the smallest available unit.
Unit testing is performed by Programmer:
- Although, a tester can help.
- He Requires detailed knowledge of the internal program design and code.
The units are tested in isolation which ensures the component is working according to the detailed design/build specifications of the module. Also known as component, module, or program testing. Debugging is different from unit testing.
Entry Criteria:
♦ Requirements are at least 80% complete and approved.
♦ Technical Design has been finalized and approved.
♦ Environment setup is completed and is stable.
♦ Code development for the module is complete.
Exit Criteria:
♦ Code has version control in place.
♦ No known major or critical defects are pending.
♦ A testing transition meeting has be held and the developers signed off.
♦ Project Manager approval has been received.
Integration Testing: (As a Type of Testing)
A System is made up of different components or modules (individual units), Testing the interactions between such modules is called as integration testing. Integration Testing starts with testing the interactions between few modules and ends when all the interfaces of different systems are integrated. Integration Testing is Both a ‘Type of testing’ and a ‘Phase of Testing’. Its a bit confusing! but we will deal it in a simpler way.
Type of Testing means – Testing few or more modules. for example, consider a email application like Yahoo or Gmail . What do we see when you log in ? Compose, Inbox, Sent Items, Drafts etc. Each of these are called modules and when you test the interactions like ‘sending a new email’ and checking it in the ‘sent items’ , ‘saving a email’ and checking in ‘Drafts’ is called Integration as a Type of testing.
System Integration Testing : In this type all the modules of the system are integrated and tested as a single unit.
Integration as Phase of Testing : This integration phase concentrates on finding the defects that occur because of combining various systems, which means testing the interaction between one system and other systems. This requires detailed understanding of systems work together and depends on various modules and their performance. Hence, a separate phase of testing is dedicated to test these interactions. Most Often, Integration phase of testing is done after some system testing is completed.
System Testing:
System testing of software is defined as the “investigation conducted to evaluate whether a complete and integrated software system meets the requirements given by the client”. Thus system testing is a process that requires creation of test cases for every functional point of the software and execution of the test cases to validate whether specified requirements are matched. In case of failure of a test, a defect is logged that is fixed by the development team and again re-tested. The system testing process can therefore be described by the following steps:
(a) Requirements analysis
(b) Test estimation and strategy
(c) Test planning
(d) Creation of test scripts based on requirements
(e) Execution of test scripts on the software product
(f) Reporting of defects
(g) Retesting of fixed defects
(h) Test Closure
The system test may require involvement of other systems but this should be minimized as much as possible to reduce the risk of external factors. Testing the interaction with other parts of the complete system comes in Integration Testing phase. System testing is all about validating and verifying the functional design specifications and seeing how all the modules work together.
For Example : when a user sends a SMS from system ‘A’, he receives a delivery report from system ‘B’. So, testing can stop after system ‘A’ sends the SMS . There is no need to include the response from the delivery system under system testing. Each system is tested as per the functional requirements before the integration testing phase.
Entry Criteria:
♦ Unit Testing and integration (type of testing) for modules is Completed.
♦ A system testing environment has been established.
♦ The system testing schedule is approved.
Exit Criteria:
♦ Application meets all documented business and functional requirements.
♦ No known critical defects prevent moving to the Integration Testing.
♦ All appropriate teams have approved the completed tests.
♦ A testing transition meeting has be held and the developers signed off.
Integration Testing : ( As a Phase of Testing)
System testing tries to minimize outside factors, integration testing requires involvement of other systems and interfaces with other applications, including those owned by an other vendors. For example, integration testing for a SMS application should include the delivery system as well (system ‘B’ as above example). Integration testing does not stop at only checking the SMS sent.
Integration testing also differs from system testing when a defect is found. Only tests associated with the defect needs to be rerun again.
Entry Criteria:
♦ System testing has been completed and signed off.
♦ Outstanding issues and defects have been identified and documented.
♦ Test scripts and schedule are ready.
♦ The integration testing environment is established.
Exit Criteria:
♦ All systems involved passed integration testing and meet agreed upon functionality and performance requirements.
♦ Outstanding defects have been identified, documented, and presented to the business sponsor.
♦ Stress, performance, and load tests have been satisfactorily conducted.
♦ The implementation plan is final draft stage.
♦ A testing transition meeting has been held and everyone has signed off.
Before passing on to the next phase of testing, some non functional tests are also conducted based on purpose. Some of the non functional tests are: performance testing, load testing, compatibility testing, stress testing, interoperability etc. We will discuss these tests in detail in future posts. for now, this is just for information.
User Acceptance Testing:
Acceptance testing is normally done by the Customers or Business users. The testing moves from the IT department to the hands of business people who define certain number of test cases that are used to execute and accept the product. This is also known as ‘Beta Testing’, ‘Application Testing’, and ‘End user Testing’.
Acceptance tests are executed to verify if the product meets the acceptance criteria defined during the requirements phase.To get maximum out of acceptance testing, business users with different levels of experience and subject matter experts need to actively participate.
Entry Criteria:
♦ Integration testing completed.
♦ Business requirements have been met.
♦ UAT test scripts are ready for execution.
♦ The testing environment is established.
Exit Criteria:
♦ UAT has been completed and approved.
♦ Change control is managing modifications and enhancements.
♦ Business sponsor agrees that known defects do not affect product release.
Now that we have come to the end of this tutorial. solve the below puzzle by identifying the different levels of testing.
[su_divider size=”2″]Project Plan = life cycle model + Project parameters[/su_divider]
References:
1. Software Testing Fundamentals—Concepts, Roles, and Terminology by John E. Bentley.
2. IEEE Glossary.
3. Software testing principles srinivasan and gopalaswamy.