Top Down Design

A SoftwareDevelopmentProcess DriveByAnalysis TowardsBottomUpTesting? (or, if you prefer, TestDrivenDesign).


A technique whereby there is nested levels of "control routines" such that the top level controls the large-scale behavior and the lower levels handle individual details. It reached its peak "backing" in the late 70's and early 80's, later replaced by ObjectOriented thinking and the influence relational databases to create data-driven control flow techniques over the code-centric approach of TopDownProgramming.


It could be argued that all sequence-based programming is top-down to some extent. The top-down-ness may be a matter of how dependent or independent each routine or module is.

The name does not refer to the resulting code so much as the process of design. One designs high-level command and control, writing empty stubs for all low-level details. Then one fills in the stubs, recursively adding stubs for the next layer down. A BreadthFirst tree traversal.

Well, this gets into the long "is coding design?" debates.


The problem with this statement is that "Top", "Bottom", "Up", and "Down" are meaningless terms in software as there is no absolute frame of reference. In the original concept, "Design" started with certain sets of code and worked towards others, while "Implementation" started with the sections addressed last in Design and end with those addressed first. Up and Down are arbitrary directions and really just express the idea that Design and Implementation some how proceed in opposite directions. TestFirstDesign expresses the idea that Design and Implementation proceed in the same direction. A similar opposing direction argument comes from "abstraction" versus "specificity". Once one aligns the "direction" of design and implementation, the direction has no meaning. This alignment also breaks down the walls between design and implementation to where we can question whether they are separate activities at all.

When it refers to StepwiseRefinement, the frame of reference is "task" and the hierarchical sub-divisions of tasks. True, even that is not fully objective.


See also TopDownProgramming, TopDownDesignOfRockets, StepwiseRefinement


EditText of this page (last edited November 21, 2014) or FindPage with title or text search