You say to-MAY-toe, I say to-MAH-toe. I hear the questions daily - "Did you validate the system? Did you verify the feature?" The words validate and verify are used interchangeably, but what do they really mean? Is there a difference? In the world of software development and quality assurance, yes… and you need to do both. It's even more important for the tester to understand what they are, and what each entails - and how some definitions may change in a world where waterfall is out and continuous delivery is king.
Verification refers to a testing protocol (that uses any methodology) that can determine if the software meets the specifications or requirements as they were initially designed. The process has as its goal answering the question: "Did I build what I said I would?"
The Software Engineering standards (known as IEEE-STD-610) formally defines "verification" as:
"A test of a system to prove that it meets all its specified requirements at a particular stage of its development."
The stage of development is an important consideration. The verification of development refers to checking an application that is still being developed to ensure that it adheres to these specifications. The verification process can include activities like code reviews, walkthroughs, and inspections. Actual testing of the software is not required for verification.
Going once again to IEEE-STD-610, validation is defined as:
"An activity that ensures that an end product stakeholder’s true needs and expectations are met."
Verification takes place while the product is still under development, but validation is performed upon the completion of a module, or the entire application. Validation focuses on ensuring that a stakeholder gets the product they desired.
Validation is high-level testing and typically consists of regression testing, user testing, performance testing, and similar activities.
In Agile workflows, short development iterations combined with continual feedback from users/customers means that Continuous Validation is being employed.
In verification, developing the product according to specifications is the goal. Validation will test and “validate” the actual product to ensure it has been developed correctly.
Verification has little or no code execution, while validation requires code execution.
Verification has low-level activities like reviews, walkthroughs, inspections, and desk-checking. Validation needs high-level activities like black-box testing, white box testing, and non-functional testing.
Verification is a static method of checking documents and files, while validation is the dynamic process of testing the real product.
If someone is driving to a beach, the route used would be regularly checked and compared against the various landmarks that appear. This verifies the route that is taken.
Once there, the validation effort doesn’t care about the route used, only that you have arrived, and that everything is as expected. The driver will ask if the location meets the expectation of a beach (are sand and waves present?) and validates that the place of arrival is indeed a beach.
Both verification and validation are necessary in software development to assure a correct route is taken and correct end results.