Abstract
The importance of software testing and its implications with respect to reliablity
cannot be overemphasized. To quote Deutsch(1);
"The development of software systems involves a series of production activities where
opportunities for injection of human fallibilities are enormous. Errors may begin
to occur at the very inception of the process where the objectives...my be erroneously
or imperfectly specified, as well as (errors that occur in) later design and
development stages...Because of human inability to perform and communicate with
perfection, software development is accompanied by a quality assurance activity".
Software testing is a critical element of software quality assurance and represents
the ultimate review of specification, design, and coding.
The increase visibility of software as a system element and the attendant "costs"
associated with a software failure are motivating forces for well-planned, thorough
testing. It is not unusual for a software development organization to expend 40
of total project effort on testing. In the extreme, testing of human-rated software
(e.g. flight control or nuclear reactor monitoring) can cost 3-5 times as much
as all other software engineering steps combined!
In this chapter we discuss three interrelated topics. The first, software testing,
is a planned step in the software engineering process. Like other steps, deliverables
derived from testing become part of the software configuration. Testing invariably
leads to the second topic of disscussion-debugging. More an art than a science, debugging
diagnoses program errors and corrects them. The results of testing can also lead
to a consideration of reliablity, the third topic. We strive to guarantee the same time
developing failure prediction models to help anticipate problems. At the time of this
writing, we must rely on a series of thorough test steps as the only practical "guarantee"
of software reliablilty.