Levels of Testing
In software testing, there are three levels of testing: unit testing, integration testing, and system testing. However, the fourth level of testing, acceptance testing is added by developers. This may take the form of operational acceptance testing or simple end-user (beta) testing, testing to ensure that the software meets operational expectations.
1. Unit Testing
Unit testing refers to tests that verify the functionality of a specific section of code, usually at the function level. In an object-oriented environment, this is usually at the class level, and minimal unit tests include constructors and destructors.
These types of tests are typically written by developers as they work on the code to ensure that a specific function is working as expected. A function can have multiple tests to catch corner cases or other branches in the code. Unit testing alone cannot verify the functionality of a piece of software but is used to ensure that the building blocks of the software work independently of each other.
Unit testing is a software development process that involves the coordinated application of a wide range of defect prevention and detection strategies to reduce the risks, time, and costs of software development. It is performed by the software developer or engineer during the construction phase of the software development life cycle. The purpose of unit testing is to eliminate construction errors before the code is promoted to additional testing. This strategy aims to increase the quality of the resulting software as well as the efficiency of the overall development process.
Depending on the organization’s expectations for software development, unit testing may include static code analysis, data flow analysis, metrics analysis, peer code reviews, code coverage analysis, and other software testing methods.
2. Integration Testing
Integration testing is any type of software testing that seeks to verify the interfaces between components against the software design. Software components can be integrated iteratively or all at once. The former is generally considered a better practice because it allows interface problems to be fixed more quickly.
Integration testing works to uncover defects in interfaces and interactions between integrated components (modules). Incrementally larger groups of test software components corresponding to architectural design elements are integrated and tested until the software functions as a system.
Integration tests typically involve a lot of code and produce traces that are larger than those produced by unit tests. When an integration test fails, it affects the ease of localizing the fault. To overcome this problem, it has been proposed to automatically cut large tests into smaller pieces to improve fault localization.
3. System Testing
System testing examines the fully integrated system to verify that the system meets its requirements. Processing or deleting (or archiving) entries, then logging off.
System testing in software testing is a process of checking the completeness and correctness of the functionality of the system as per SRS and BRS.
System Testing (ST) using a black box testing technique is performed to evaluate the complete system against requirements.
In System testing, the functionalities of the system are tested from an end-to-end means all features.
System Testing is performed by testers.
System Testing is black box testing.
System Testing is usually a combination of functional and non-functional testing.
4. Acceptance testing
Acceptance testing generally includes the following four types:
- User Acceptance Testing (UAT)
- Operational Acceptance Testing (OAT)
- Contractual and regulatory acceptance testing
- Alpha and beta testing
UAT as well as alpha and beta testing are described in the next testing types section.
Operational acceptance is used as part of a quality management system to make a product, service or system operationally ready (pre-release). OAT is a common type of passive software testing, primarily used in software development and software maintenance projects. This type of testing focuses on the operational readiness of the system to be supported or become part of the production environment. Hence, it is also known as Operational Readiness Testing (ORT) or Operations Readiness and Assurance (OR&A) Testing. Functional testing within OAT is limited to those tests required to verify the non-functional aspects of the system.
In addition, software testing must ensure that the system’s portability, while functioning as expected, does not damage or partially corrupt its operating environment or disrupt other processes within that environment.
Contractual acceptance testing is done based on the contractual acceptance criteria defined during the contract agreement, while regulatory acceptance testing is done based on the software product’s relevant regulations. Both of these tests can be done by users or independent testers. Regulatory acceptance testing sometimes involves regulatory agencies auditing test results.