What is Software Validation?

Software validation is a high level activity which takes place at the end of the software development process. The goal is to determine if the software created complies with specified requirements, performs the intended functions, meets the intentions of the organization which commissioned it, and fulfills the user’s needs. In short, software validation helps to assess whether or not software engineers are building the right product.

Another aspect which is often tested at this point is how well the software integrates with its intended environment. Each software is evaluated against specially established criteria for that project to ensure it fulfills every aspect of its purpose. This process is also referred to as software quality controland is the responsibility of software testers as part of the development life cycle.

Software validation is often confused with software verification by those not in the industry but these are not the same thing. Validation if a dynamic process for checking and testing a software process. It refers to tests which answer the question “are we building the right product?” and always involves executing the code in order to evaluate its functions. Verification, on the other hand, is a static method which verifies the code’s design and seeks to answer the question “are we building the product right?” It often involves a human based check of the documents, files, and code used to create the software in question. In many cases software validation will be performed in house by the same team that requisitioned the software or the team which built it while software verification is commonly performed by a third party organization.

According to the Capability Maturity Model (CMMI-SW v1.1)

Software Validation: The process of evaluating software during or at the end of the development process to determine whether it satisfies specified requirements. [IEEE-STD-610]

Software Verification: The process of evaluating software to determine whether the products of a given development phase satisfy the conditions imposed at the start of that phase. [IEEE-STD-610]

While verification testing can never identify every possible defect in a product, it can be used to create a comparison to established “oracles”. These oracles include specifications, contracts, comparable products, past versions of the same product, intended purpose, expectations, standards, laws, and other criteria which can be used to help identify problems within the software.

The primary purpose of this testing to find – and correct – any errors in the code or functionality of the product before it reaches the end-user. It is impossible to use establish that a program functions perfectly in all situations so testers must use their creativity in order to test as many situations as possible in their hunt for bugs and errors. For this reason, testing often includes examination of the code and execution of the code in various environments and conditions.