Testing addresses these basic questions:
Is the software written correctly, with no faults? (Verification testing)
Is the software solving the right problem? (Validation testing)
Tests typically come in the form of additional software that executes the software product, exercising it with known inputs that should produce expected output. Further testing concepts include:
Categories of testing
Different testing practices serve different aims. To help differentiate them, we often group testing practices into a handful of categories. However, these are not carved in stone. The lines between categories are often blurred and can easily change as practices and aims evolve. It is more important to keep the focus on the aims rather than the category/label we assign them. With this in mind, we breifly describe a few of the more commonly used categories of software testing.
A form of testing where the primary aim is to ensure software changes do not break previously developed and known to be working functionality (e.g. cause the software to regress in its functionality).
A form of testing where the primary aim is to enable fine-grain portions of the software (usually individual functions or subroutines) to be tested in isolation apart from the larger software product in which they are used.
A form of testing where the primary aim is to operate the software as a proxy for how a user would use the product.
Continuous Integration (CI) testing
A form of testing where the primary aims are to provide immediate feedback regarding compatability of changes with respect to multiple, parallel branches of development as well as overall software functionality.
This WhatIs doc introduces terminology for CSE software testing.