ABSTRACT

Software design techniques span a wide spectrum, and they have incrementally evolved as the discipline has matured over the years. In the early 1960s, flowcharts were the most heavily used design technique for programming, and they subsequently evolved through the 1960s and into the mid-1970s into approaches such as data-flow and entity-relationship diagrams. At this same time, parallel efforts began on approaches for design using modules [Parnas 1972] and abstract data types (ADTs) [Liskov and Zilles 1975, Liskov et al. 1977]. Module concepts were further explored in the late 1970s [Wirth 1977], taking us into the early 1980s, where these design concepts were supported in programming languages such as Smalltalk-80 [Goldberg 1989], Ada [Barnes 1991], and Modula-2 [Wirth 1985]. While it would be impossible to review this entire history of traditional software design in a single chapter, we will introduce and trace the important concepts and techniques.