Software testing is an investigation conducted to provide stakeholders with information about the quality of the product or service under test.
Software testing also provides an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation.
Test techniques include, but are not limited to, the process of executing a program or application with the intent of finding software bugs.
Software testing can also be stated as the process of validating and verifying that a software program/application/product:
- meets the business and technical requirements that guided its design and development;
- works as expected; and
- can be implemented with the same characteristics.
Software testing, depending on the testing method employed, can be implemented at any time in the development process.
However, most of the test effort occurs after the requirements have been defined and the coding process has been completed.
As such, the methodology of the test is governed by the software development methodology adopted.
Different software development models will focus the test effort at different points in the development process.
Newer development models, such as Agile, often employ test driven development and place an increased portion of the testing in the hands of the developer, before it reaches a formal team of testers.
In a more traditional model, most of the test execution occurs after the requirements have been defined and the coding process has been completed.
Testing can never completely identify all the defects within software.
Instead, it furnishes a criticism or comparison that compares the state and behavior of the product against oracles—principles or mechanisms by which someone might recognize a problem.
These oracles may include (but are not limited to) specifications, contracts, comparable products, past versions of the same product, inferences about intended or expected purpose, user or customer expectations, relevant standards, applicable laws, or other criteria.
Every software product has a target audience.
For example, the audience for video game software is completely different from banking software.
Therefore, when an organization develops or otherwise invests in a software product, it can assess whether the software product will be acceptable to its end users, its target audience, its purchasers, and other stakeholders.
Software testing is the process of attempting to make this assessment.