The occurrence of severe software-related accidents highlights the need for assuring that complex systems are able to operate even in the presence of faulty software. Software Fault Injection is the deliberate injection of software faults or errors into a component, in order to assess fault-tolerance and robustness properties. Two fundamental issues arise:
When software systems are executed continuously for long time periods, they tend to exhibit degraded performance and are more prone to fail. This phenomenon, namely software aging, is caused by elusive software bugs ("Mandelbugs") that gradually corrupt the software state, such as memory leak bugs. On one hand, software aging can be mitigated by preemptively rejuvenating the software, i.e., bringing it into an aging-free state, for instance by restarting it. On the other hand, software aging can be avoided by detecting and fixing bugs, such as through performance and resource consumption tests.
See also: