Testing is a process used to help identify the
correctness, completeness and quality of developed computer software. With that
in mind, testing can never completely establish the correctness of computer
software.
There are many approaches to software testing from using alm tools to automated testing, but effective testing of complex products is essentially a process of investigation, not merely a matter of creating and following rote procedure.
One definition of testing is "the process of questioning a product in order to evaluate it", where
the "questions" are things the tester tries to do with the product, and the
product answers with its behavior in reaction to the probing of the tester.
Although most of the intellectual processes of testing are nearly identical to
that of review or inspection, the word testing is connoted to mean the dynamic
analysis of the product�putting the product through its paces.
The quality of the application can and normally does vary
widely from system to system but some of the common quality attributes include
reliability, stability, portability, maintainability and usability. Refer to the
ISO standard ISO 9126 for a more complete list of attributes and criteria.
Testing helps is Verifying and Validating if the Software is
working as it is intended to be working. Thins involves using Static and Dynamic
methodologies to Test the application.
Because of the fallibility of its human designers and its own
abstract, complex nature, software development must be accompanied by quality
assurance activities. It is not unusual for developers to spend 40% of the total
project time on testing. For life-critical software (e.g. flight control,
reactor monitoring), testing can cost 3 to 5 times as much as all other
activities combined. The destructive nature of testing requires that the
developer discard preconceived notions of the correctness of his/her developed
software.
Software Testing Fundamentals
Testing objectives include
1. Testing is a process of executing a program with the intent of finding an
error.
2. A good test case is one that has a high probability of finding an as yet
undiscovered error.
3. A successful test is one that uncovers an as yet undiscovered error.
Testing should systematically uncover different classes of errors in a minimum
amount of time and with a minimum amount of effort. A secondary benefit of
testing is that it demonstrates that the software appears to be working as
stated in the specifications. The data collected through testing can also
provide an indication of the software's reliability and quality. But, testing
cannot show the absence of defect -- it can only show that software defects are
present.