Testing is the process of evaluating a system or its component(s) with the intent to find whether it satisfies the specified requirements or not. In simple words, testing is executing a system in order to identify any gaps, errors, or missing requirements in contrary to the actual requirements.
According to ANSI/IEEE 1059 standard, Testing can be defined as - A process of analyzing a software item to detect the differences between existing and required conditions (that is defects/errors/bugs) and to evaluate the features of the software item.
It depends on the process and the associated stakeholders of the project(s). In the IT industry, large companies have a team with responsibilities to evaluate the developed software in context of the given requirements. Moreover, developers also conduct testing which is called Unit Testing. In most cases, the following professionals are involved in testing a system within their respective capacities −
Different companies have different designations for people who test the software on the basis of their experience and knowledge such as Software Tester, Software Quality Assurance Engineer, QA Analyst, etc.
It is not possible to test the software at any time during its cycle. The next two sections state when testing should be started and when to end it during the SDLC.
An early start to testing reduces the cost and time to rework and produce error-free software that is delivered to the client. However in Software Development Life Cycle (SDLC), testing can be started from the Requirements Gathering phase and continued till the deployment of the software.
It also depends on the development model that is being used. For example, in the Waterfall model, formal testing is conducted in the testing phase; but in the incremental model, testing is performed at the end of every increment/iteration and the whole application is tested at the end.
Testing is done in different forms at every phase of SDLC −
During the requirement gathering phase, the analysis and verification of requirements are also considered as testing.
Reviewing the design in the design phase with the intent to improve the design is also considered as testing.
Testing performed by a developer on completion of the code is also categorized as testing.
It is difficult to determine when to stop testing, as testing is a never-ending process and no one can claim that a software is 100% tested. The following aspects are to be considered for stopping the testing process −
Completion of test case execution
Completion of functional and code coverage to a certain point
Bug rate falls below a certain level and no high-priority bugs are identified
These two terms are very confusing for most people, who use them interchangeably. The following table highlights the differences between verification and validation.
|1||Verification addresses the concern: "Are you building it right?"||Validation addresses the concern: "Are you building the right thing?"|
|2||Ensures that the software system meets all the functionality.||Ensures that the functionalities meet the intended behavior.|
|3||Verification takes place first and includes the checking for documentation, code, etc.||Validation occurs after verification and mainly involves the checking of the overall product.|
|4||Done by developers.||Done by testers.|
|5||It has static activities, as it includes collecting reviews, walkthroughs, and inspections to verify a software.||It has dynamic activities, as it includes executing the software against the requirements.|
|6||It is an objective process and no subjective decision should be needed to verify a software.||It is a subjective process and involves subjective decisions on how well a software works.|