The terms verification and validation, often used interchangeably in common parlance, have distinct meanings in software testing. In this document, we shall see how these two are different.
Verification in software testing is a process to evaluate documents, design, and code to confirm that the software has been developed according to the specifications and agreed-upon conventions.
It is conducted using informal reviews, peer reviews, code walkthroughs, inspections, and static code analysis. Although humans often do it, advanced data-driven machine learning tools are also becoming popular.
The verification process does not involve the execution of any code.
Some of the fundamental problems the verification aims to find are:
- Diversions from coding conventions
- Non-compliance with the project's security framework
- Design flaws
- Memory leaks
- Usage of unapproved libraries
Verification is also called static testing.
Validation in software testing is the process of checking whether the software product works as per the specifications. The software program is executed and checked for defects.
End-user functionality is validated using unit testing, integration testing, system testing, and user acceptance testing. Non-functional testing that includes performance testing and security testing also happens during validation.
Validation happens after verification.
Verification is also called dynamic testing.
The differences between Verification and Validation are:
|Process||A static method of checking documents and files||A dynamic process of testing the actual product|
|Activities||Reviews, Walkthroughs, Inspections, etc.||Functional testing and non-functional testing|
|Target||Specifications, software architecture, design, database design, etc.||Actual product|
|Bugs||It detects issues early in the development cycle which cannot found during validation.||It can identify bugs that the verification process cannot catch.|