Verification and Validation is used to check if a software system meets requirements and specifications and that it fulfills its intended purpose.
In this method, you start with a set of requirements (both functional and non-functional) defining what your software shall do and how it shall perform.
Example: some requirements for the software comparing five sorting algorithms can look like:
- R1: The system shall be able to generate arrays of random integer values (between a specified minimum and maximum value) of arbitrary length (max 10 million values).
- R2: The system shall be able to sort an array of integer values using bubble sort and measure execution time.
- R3: The system shall be able to sort an array of integer values using insertion sort and measure execution time.
- …
In the verification phase, you test that the system meets all requirements you have defined by using manual or automated tests. Each requirements must have at least one test. For each test you must specify:
- Test id, for example T1
- Which requirement is tested, for example R1
- How to execute the test (automated using a test suite, or how to manually test it)
- Expected result, which is used to see if the test is passed or not
In the validation phase, the system is checked if it fulfills the expectations of the end user or customer. This typically involves letting the end user or customer test different features of the system and give feedback to the developers. In degree projects, validation testing is typically done by the company you do your project at.
The difference between verification and validation was succinctly expressed by Barry Boehm in 1979:
- Verification: “Are we building the product right?”
- Validation: “Are we building the right product?”