Software development is a peculiar process, half science and half art.
Now that software is doing things like controlling airplanes, the artsy part had better be backed by solid engineering practice. Consumers are no longer satisfied with code that mostly works . Fault injection is a useful tool in developing high quality, reliable code. Its ability to reveal how software systems behave under experimentally controlled anomalous circumstances makes it an ideal crystal ball for predicting how badly good software can behave. A Crystal Ball for Software Quality , IEEE Computer, June 1997, Volume 30, Number 6, pp.