Validation vs. Verification

Or Verification vs. Validation.

Two terms that sometimes confuse software test engineers are "validation" and "verification". Let me get to the bottom line: in a software testing context, although technically the two terms may have slightly different meaning, there is no practical difference between the two.  Both validation and verification loosely mean, "Does the program/system under test do what it’s supposed to do?"  And that means, "Does the SUT meet its design, requirements, and other specifications?" If you look up validation and verification in an ordinary English dictionary, you’ll find that they mean almost exactly the same thing.  In fact, the definition of validation often contains the term "verification" and the definition of "verification" often contains the term "validation". For example, the Merriam-Webster dictionary gives the synonym for the root word "verify" as "confirm", and gives the synonym for the root word "validate" as "confirm" too. And the Oxford English Dictionary defines "validate" as, "demonstrate that something is true", and defines the term "verify" as, "demonstrate that something is true". In other words, in ordinary English usage the terms "validate" and "verify" have exactly the same meaning.

Somewhere along the line, in the field of software testing (or software quality assurance if you want to get more fancy), someone decided that the two terms should have slightly different meanings. The IEEE, an organization which has defined many terms gives this:

ValidationConfirmation by examination and provision of objective evidence that the particular requirements for a specific intended use are fulfilled.

Verification – Confirmation by examination and provision of objective evidence that specified requirements have been fulfilled.

Obviously the two IEEE definitions are so close to each other it’s hard to determine the difference. These definitions are often interpreted as suggesting that validation means, "Does the system under test satisfy user specifications?", and that verification means, "Does the system under test satisfy a functional specification?" Sometimes this is put informally as, "validation means did we build the right product?" and "validation means did we build the product right?" However, at least in practice, the two terms have been used interchangeably for so long there is little chance of changing this common usage.

Now, with all that said, I’ve got to confess that I use the two terms somewhat differently. In general I use the term "verification" to mean, "The process of determining if it works correctly?" And I often use the term "validation" to mean, "The process of double-checking my test results". For example, when testing a Web Service, you can write a lightweight test harness which sends input to and fetches the return value from the Web method under test using HTTP. You can then write a second lightweight harness which does the same thing using TCP/IP. You should of course get the same results, validating (in my sense of the word) your test results.

My point is this: in practical usage the terms "validation" and "verification" both mean, "Does the system under test work correctly?" If you intend to use the terms differently in conversation or a written document of some sort, you should explicitly define your local meanings of the terms.

If you enjoyed reading this blog entry, you might enjoy working at Microsoft. My parent company, Volt Information Sciences, is always looking for software engineers. Check out the job postings at http://jobs.volt.com/.

 

This entry was posted in Software Test Automation. Bookmark the permalink.