Reliable software through rational design
This paper describes two (related) ways that software unreliability may occur: in response to unanticipated demands or due to unreliable design processes. Five illustrative examples of design-induced unreliability are presented. Design rationalization, a technique for forcing careful and rational consideration of design decisions, is described and its use to improve the reliability of a design process is illustrated. Some experimental and abstract evidence supporting the use of design rationalization to increase software reliability is given.