"Software testing is the process of testing the
functionality and correctness of software by running it.
Software testing is usually performed for one of two
reasons: (1) defect detection, and (2) reliability
estimation. The problem of applying software testing to
defect detection is that software can only suggest the
presence of flaws, not their absence (unless the testing
is exhaustive). The problem of applying software testing
to reliability estimation is that the input distribution
used for selecting test cases may be flawed. In both of
these cases, the mechanism used to determine whether
program output is correct (known as an oracle) is often
impossible to develop. Obviously the benefit of the
entire software testing process is highly dependent on
many different pieces. If any of these parts is faulty,
the entire process is compromised." (Reliable Software
Technologies).
Software testing is the most visible activity in the
Software Quality Assurance, which is, perhaps, the most
critical activity in a software project. It is not a
quick glance through application's menus. It is not about
catching bugs. It is about making sure that the software
product satisfies the customer's needs by preventing bugs.
If such happened, that bug appeared, QA is about
describing it, locating, fixing, merging the fix and
looking for the bug cause.