Sunday, April 29, 2007

Even in highly structured [software] systems, surprises and unreliability occur because the human mind is not able to fully comprehend the many conditions that can arise because of the interaction of these components.

--- David Lorge Parnas, Software aspects of strategic defense systems, Communications of the ACM, December 1985, Vol. 28, No. 12


In context:

Dividing software into modules and building each module of so-called “structured” programs clearly helps. When properly done, each component deals with a small number of cases and can be completely analyzed. However, real software systems have many such components, and there is no repetitive structure to simplify the analysis. Even in highly structured systems, surprises and unreliability occur because the human mind is not able to fully comprehend the many conditions that can arise because of the interaction of these components. Moreover, finding the right structure has proved to be very difficult. Well-structured real software systems are still rare.