Software testing is the process of executing software in a controlled manner. It is often used in association with the terms verification and validation.
Verification is the checking or testing of items, including software, for conformance and consistency with an associated specification. Software testing is just one kind of verification, which also uses techniques such as reviews, analysis, inspections and walk through.
Validation is the process of checking that what has been specified is what the user actually wanted.
Validation: Are we doing the right job?
Verification: Are we doing the job right?
The term bug is often used to refer to a problem or fault in a computer. There are software bugs and hardware bugs.
The term originated in the United States, at the time when pioneering computers were built out of valves, when a series of previously inexplicable faults were eventually traced to moths flying about inside the computer.
Software testing should not be confused with debugging. Debugging is the process of analyzing and locating bugs when software does not behave as expected. Although the identification of some bugs will be obvious from playing with the software, a methodical approach to software testing is a much more thorough means of identifying bugs. Debugging is therefore an activity which supports testing, but cannot replace testing. However, no amount of testing can be guaranteed to discover all bugs.
Other activities which are often associated with software testing are static analysis and dynamic analysis.
- Static analysis investigates the source code of software, looking for problems and gathering metrics without actually executing the code.
- Dynamic analysis looks at the behavior of software while it is executing, to provide information such as execution traces, timing profiles, and test coverage information.