Top-down and bottom-up design
|
Top-down and Bottom-up are approaches to the software development process, and by extension to other procedures, mostly involving software.
In the Top-Down Model an overview of the system is formulated, without going into detail for any part of it. Each part of the system is then refined by designing it in more detail. Each new part may then be refined again, defining it in yet more detail until the entire specification is detailed enough to begin development.
By contrast in bottom-up design individual parts of the system are specified in detail, and may even be coded. The parts are then linked together to form larger components, which are in turn linked until a complete system is formed.
Top down approaches emphasise planning, and a complete understanding of the system. It is inherent that no coding can begin until a sufficient level of detail has been reached on at least some part of the system. Bottom up emphasises coding, which can begin as soon as the first module has been specified. However bottom-up coding runs the risk that modules may be coded without having a clear idea of how they link to other parts of the system, and that such linking may not be as easy as first thought.
Top-down design was promoted in the 1970s by IBM researcher Harlan Mills and by Niklaus Wirth. Mills developed structured programming concepts for practical use and tested them in a 1969 project to automate the New York Times morgue index. The engineering and management success of this project led to the spread of the top-down approach through IBM and the rest of the computer industry. Niklaus Wirth, among other achievements the developer of Pascal programming language, wrote the influential paper `Program Development by Stepwise Refinement'. Top-down methods were favored in software engineering until the rise of object-oriented programming in the late 1980s.
Modern software design approaches usually combine both of these approaches. Although an understanding of the complete system is usually considered necessary for good design, leading theoretically to a top-down approach, most software projects attempt to make use of existing code to some degree. Pre-existing modules give designs a 'bottom-up' flavour. Some design approaches also use an approach where a partially-functional system is designed and coded to completion, and this system is then expanded to fulfill all the requirements for the project.
Some part of the article is from Perl Design Patterns Book
External links
- Program Development by Stepwise Refinement (http://www.acm.org/classics/dec95/)da:Top down og bottom up design