Verification and validation testing are two important tests which are carried out on a software before it has been handed over to the customer. The aim of both verification and validation is to ensure that the product is made according to the requirements of the client, and does indeed fulfill the intended purpose. While verification is a quality control process, the quality assurance process carried out before the software is ready for release is known as validation testing. Its goal is to validate and be confident about the product or system, and that it fulfills the requirements given by the customer. The acceptance of the software from the end customer is also its part. Often, testing activities are introduced early in the software development life cycle.

Validation testing provides answers to questions such as:
  • Does the software fulfill its intended use?
  • Is the company building the right product?
  • Can the project be properly implemented?
  • Are the documents in line with the development process?
Validation Testing Process

The aim of software testing is to measure the quality of a software in terms of number of defects found in it, the number of tests run, and the system covered by the tests. When bugs or defects are found with the help of testing, the bugs are logged and the development team fixes them. Once the bugs are fixed, testing is carried out again to ensure that they are indeed fixed, and no new defects have been introduced in the software. With the entire cycle, the quality of the software increases. The software validation process can be described as follows:

Validation Planning
To plan all the activities that need to be included while testing.
Define Requirements
To set goals and define the requirements for testing.
Select Appropriate Team
To select a skilled and knowledgeable development team (third party included).
Develop Documents
To develop a user specifications document describing the operating conditions.
To evaluate the software as per the specifications and submit a validation report.
Incorporating Changes
To change the software so as to remove any errors found during evaluation.


There are various validation techniques like fault injection, dependability analysis, etc., that are commonly used for software testing. Here are a few more...

Formal Methods
This technique makes use of mathematical and logical techniques to analyze the input specifications, the product design, the supporting documents, and the behavior of the product under test.

Fault Injection
As the name suggests, faults or bugs are intentionally added to software so as to check its working/functionality under the said conditions. These are of two types - hardware fault injection and software fault injection. In the former, faults in physical hardware are injected, while in the latter, errors are injected in the software or in the system's memory.

Dependability Analysis
This technique is used to increase the dependability of the product. The hazards in the software are identified, and methods are suggested to reduce theses potential hazards.

Hazard Analysis
Every software has its own standard tests to identify hazards. This type of analysis follows the said procedure to identify the hazard and find out its countermeasures.

Risk Analysis
This takes the hazard analysis further by identifying countermeasures for each type of hazard that is identified.

The Basic Tests

Two of the most common and widely used terms in the software testing world are black-box testing and white-box testing.

Black-box Testing
This type of testing only focuses on the output that is generated after being subjected to varying inputs. The internal components of the software are completely ignored while carrying out this test. This test is also known as functional testing.

White-box Testing
As opposed to black-box testing, white-box testing takes into account the internal mechanism and components of the software while testing under the desired input conditions.

Types of Validation Testing

If the testers are involved in the product right from the very beginning, then the testing starts right after a component of the system has been developed. Apart from the basic tests, the different types of software validation tests are:

Component/Unit Testing
Component testing is also known as unit testing. The aim of the tests carried out in this testing type is to search for defects in the software component. At the same time, it also verifies the functioning of the different software components, like modules, objects, classes, etc., which can be tested separately.

Integration Testing
This is an important part of the software validation model, where the interaction between the different interfaces of the components is tested. Along with the interaction between the different parts of the system, the interaction of the system with the computer operating system, file system, hardware, and any other software system it might interact with, is also tested.

System Testing
System testing is carried out when the entire software system is ready. The concern of this testing is to check the behavior of the whole system as defined by the scope of the project. The main concern of system testing is to verify the system against the specified requirements. While carrying out the tests, the tester is not concerned with the internals of the system, but checks if the system behaves as per expectations.

Acceptance Testing
Here, the tester has to literally think like the client and test the software with respect to user needs, requirements, and business processes, and determine whether the software can be handed over to the client or not. At this stage, often, a client representative is also a part of the testing team, so that the client has confidence in the system.

Operational Acceptance Testing
This type of testing is done just before the software goes into the production/launching stage. It checks the readiness of the product, by testing for backups, recovery techniques, shutdown and resumption, component failure, etc. It is also known as operational readiness testing. This method also takes into account the alerts that are raised during component failure or in an error situation.

Alpha Testing
If the testing is done for a large group of users, it is essential that each component of the system be tested for its functionality. This type of testing is done at the developers' site by potential customers/users. Any problems encountered during this testing are rectified by the developers then and there. This is internal acceptance testing.

Beta Testing
Once the software passes the alpha testing stage, beta testing is done at the user's end. Various versions of the software are developed, known as the beta versions. These versions are tested for their functionality by the users, the logs of the problems occurred are recorded and submitted to the developers. This is external acceptance testing.

Regression Testing
This testing is done after the desired changes or modifications are made to the existing code. The code, when put to test, may have certain errors that can be resolved by making necessary changes. The software is again put to test after these changes are made, to check whether the new code fulfills customer requirements or not.

Independent Validation

If the validation tests are carried out by a third party, they are known as independent validation and verification (IV&V). The developer needs to provide the user manual to the third party tester. This manual should clearly contain the standard working conditions of the software. The user manual should have the various working conditions of the software, so that the tester can simulate real-life conditions. These third party organizations submit a validation report to the developer after the software is tested. The developer, upon receipt of this report, makes the desired changes to the software, and again tests it to check whether the customer needs are met or not.

Software validation testing is an important part of the software development life cycle (SDLC), apart from verification, debugging, and certification. Validation testing ensures that the software meets the quality standards set by the customer, and that the product meets customer requirements.