What you need to know about the levels of Software Testing
Tags: softwaretesting, softwaredevelopment, softwareengineering
Published: 2018-11-14 09:42:06

---
title: What you need to know about the levels of Software Testing
published: true
description: 
tags: software testing, software development, software engineering 
---
Before release, any software product goes through various levels of testing to make sure that it is working properly. Generally, software testing is divided into four levels. 

##1. Unit Testing
Unit testing (or component testing) is the first stage in the testing process. A unit is the smallest testable and independent component of the software. Normally, Unit testing is performed by software developers before handing software over to testers for executing other formal tests. The main purpose of unit testing is to make sure that every unit is working as designed.

In addition, as the cost of fixing bugs in the late stages is much higher than in the early stages, unit testing helps reduce cost by finding problems early. White box testing method is normally used at this stage

##2. Integration Testing
After unit testing is integration testing. In this stage, all units are integrated together and tested. It is a form of testing in the testing process performed to detect defects in the interactions and the interfaces between the integrated units. Black box testing technique is usually used at this stage, but in many cases, both Black and White testing method are combined together.

There are four main integration testing approaches, namely:
- Big bang: In the big bang approach, All components or modules are integrated together to complete a software system. After that, integration testing is performed.
- Top-down: In this method, the process is carried out from the highest level modules to the lower level ones. This method requires Test stubs, Stub is a module which will temporarily substitute for submodules if they are not available for integration during the early phases.
- Bottom-up: Bottom-up testing is a method where the lowest level components are tested first, and then progressively higher level components are tested. Drivers are required in this method to simulate the main modules which are not available in the early phases.
- Sandwich: Sandwich testing (or Hybrid approach) is a type of integration testing which is the combination of Top-down and Bottom-up testing.

##3. System Testing
After integration testing, the fully integrated application is tested to check that whether the system meets its software requirements specifications (SRS). System Testing is a type of black box testing method thus the knowledge of internal code is not required. This testing is performed in an environment that closely resembles the production environment in order to provide more reliable and efficient outcoming. It is an important phase as it helps to evaluate the functional, business and technical requirements.

There are various types of system testing:
- Usability Testing: Focuses on the user’s ease to operate and use and checks that the user interface is user-friendly.
- Load Testing: Load Testing is necessary to know that a software solution will perform under real-life loads.
- Regression Testing: Type of software testing that checks the performance of existing functionalities when a change is made.
- Functional Testing: Type of black box testing that bases its test cases on the specifications of the software component under test.
Recovery Testing: to test that how well a system recovers from crashes, hardware failures, or other catastrophic problems.
- Security Testing: To test that the system is secured enough to protect it from unintended users.
- Performance Testing: Performance testing is a type of testing that is performed to determine how fast and stable the system performs under a particular workload.
- Load Testing: Load testing is a kind of testing which determines the performance of the system under real-life load conditions. it measures the maximum load capacity of the system when multiple users access the system at the same time.

##4. User Acceptance Testing
User acceptance testing (End-User Testing) is the last phase of the testing process. The user acceptance testing is performed by end users to make sure that it can handle required tasks in real-world scenarios as per specifications. If the software product passes this stage, it means that the end user has accepted it and it is ready to go live.

Below are the different types of user acceptance testing:

- Alpha & Beta Testing: aim to validate the fitness-for-use of the system by the business user. The user acceptance test is performed by the users and application managers.
- Contract Acceptance Testing: a developed software is tested against certain criteria and specifications which are predefined and agreed upon in a contract. The project team defines the relevant criteria and specifications for acceptance at the same time when the team agrees on the contract itself.
- Regulation Acceptance Testing: also known as Compliance Acceptance Testing, examines whether the software complies with the regulations. This includes governmental and legal regulations.
- Operational Acceptance Testing: also known as Operational Readiness Testing or Production Acceptance Testing, these test cases ensure there are workflows in place to allow the software or system to be used. This should include workflows for backup plans, user training, and various maintenance processes and security checks.

**Black Box Testing**: This is a software testing method that analyses certain functionalities of the application without letting testers see the internal code structure. Black Box Testing is part of User Acceptance Testing, because Black Box Tests share the same principles as UAT.

**Factors affecting test scope:** There are some factors that we need to consider before choosing the proper levels for your tests.
- Project size.
- The complexity of the project.
- Budget
- Time scope for the project.
- Human resources.

##5. The advantages of testing at different levels
- Software development naturally split into phases.
- Easily track bugs.
- Ensures a working subsystem/ component/ library.
- Software reuse more practical.


*This write-up is originally posted at [Test Automation Resources](https://testautomationresources.com/software-testing-basics/level-software-testing/)*