What do we mean by the term "software failure"? It is the departure of the external results of program operation from requirements. So "failure" is something dynamic. The program has to be executing for a failure to occur. The term failure relates to the behaviour of the program. Failure is not the same thing as a "bug" or, more properly, "fault". This very general definition of failure is deliberate. It can include such things as a deficiency in performance attributes and excessive response time. A "fault" is the defect in the program that, when executed under particular conditions, causes a failure. There can be a different set of conditions that cause a failure, or the conditions can be repeated. Hence a fault can be the source of more than one failure. A fault is a property of the program rather than a property of its execution or behaviour. It is what we are really referring to in general when we use the term "bug". A fault is created when a programmer makes an error. It is very important to make the failure-fault distinction! There has been, and frequently remains, much confusion because these terms were mixed up and erroneously used interchangeably. The first two general ways of characterising failure occurrences in time are:

  1. time of failure
  2. time interval between failures