Software
testing is considered to be the most important part of the
software life cycle from design to implementation and
maintenance of a software project. Testing is a process
of exercising a program with a specific intent of finding
errors prior to delivery to the end user. It occurs at every
phase of system construction. The different levels of testing
reveal that it is not the only phase of the software life
cycle; it is a set of activities performed throughout the
software life cycle.
Software
testing may be perceived as a subfield of Software Quality
Assurance but it typically exists independently. In SQA,
software process specialists and auditors take a broader
view on software and its development. They examine and change
the software engineering process itself to reduce the amount
of faults that are in the code. A common practice of software
testing is that it is accomplished by an independent group
of testers after finishing the software product and before
it is shipped to the customer which is being used as a project
buffer to compensate for the project delays. Normally, people
assume that all the activities as illustrated in Figure
1 are only testing; but the activities after implementation
are only considered as testing.
It
is essential to review the definition of software testing
in the literature. According to Wikipedia, "Software
testing is a process used to identify the correctness, completeness
and quality of developed computer software". Actually,
testing can never establish the correctness of computer
software, as this can only be done by formal verification
(and only when there is no mistake in the formal verification
process). It can only find defects, not prove that there
are none.
As
EW Dijkstra states, testing can establish the presence of
errors but cannot guarantee their absence. The process of
implementing or evaluating a system or a system component
by manual or automated means is to verify that it fits certain
requirements or to specify the differences between expected
and actual results. These tests are conducted mainly to
evaluate response time, memory usage, throughput, device
utilization, and execution time.