0% found this document useful (0 votes)
117 views11 pages

04structured Design

The document discusses the concepts of structured design as presented in the book "Structured Design" by Edward Yourdon and Larry Constantine. It proposes making the software design process more methodical by (1) defining properties of a good procedural design and (2) defining a step-by-step method to transform a data flow graph into a procedural design. The key concepts discussed include modules, connections between modules, coupling and cohesion. Minimizing coupling between modules while maximizing cohesion is important to reduce complexity and errors.

Uploaded by

Abel Mesfin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
117 views11 pages

04structured Design

The document discusses the concepts of structured design as presented in the book "Structured Design" by Edward Yourdon and Larry Constantine. It proposes making the software design process more methodical by (1) defining properties of a good procedural design and (2) defining a step-by-step method to transform a data flow graph into a procedural design. The key concepts discussed include modules, connections between modules, coupling and cohesion. Minimizing coupling between modules while maximizing cohesion is important to reduce complexity and errors.

Uploaded by

Abel Mesfin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 11

Structured Design

• Structured Design
– Fundamentals of a Discipline of Computer Program and Systems
Design
• Edward Yourdon / Larry L. Constantine
– Prentice-Hall, 1979
• Purpose
– Make methodical the process of designing software systems
• Mainly business systems
• Approach
– Defines properties of a good procedural design
– Defines a step-by-step method for transforming a data flow graph
into a procedural design
• N.B. calls “procedures” (possibly with associated static data)
“modules”, which differs from Parnas’ use of the term as a grouping
of multiple procedures and related data

04 - Structured Design CSC407 1

Structured Design Significance


• Very popular in business circles.
• Never caught on in academic circles
– Ideas are somewhat half-baked
• “theorems” with silly or no proofs
• Ill-described concepts (no firm definitions)
– At a time when predicate logic to describe programming semantics
was in vogue
• Nonetheless, full of useful concepts.
• Somewhat dated, as it applies best to data-flow oriented
software (not interactive, real-time, or database oriented)
– E.g., read update records from tape, merge them into a master file,
and print a report.

04 - Structured Design CSC407 2

1
Modules and Connections
• Module
– A lexically contiguous sequence of program statements,
bounded by boundary elements, having an aggregate
identifier.
• i.e., a “function” or “procedure” or ? “method” ?

• Connections

normal
pathological

04 - Structured Design CSC407 3

Limitations on Dealing with Complexity


• Errors: 7 ± 2 rule
– Based on work of psychologist George Miller
• Now questioned in the HCI community
40
35
30
25
Errors

20
15
10
5
0
0 2 4 6 8 10 12
Things to consider at once

04 - Structured Design CSC407 4

2
Total Errors in a System
• Two opposing forces:
– Intra-module complexity: Complexity within one module
– Inter-module complexity: Complexity of modules interacting
with one another

Total errors is a combination


Errors
Inter-module effect grows as
the number of modules grow

Intra-module effect decrease as


the modules become smaller

# of modules

04 - Structured Design CSC407 5

Overall Cost
• The cost of developing most systems
– ≈ cost of debugging them (+ cost of changing them nowadays)
• These costs are directly related to the overall complexity
– Complexity injects more errors and makes them harder to fix
– Complexity requires more changes and makes them harder to effect.
• Complexity can be decreased by breaking the problem into
smaller pieces
– So long as those pieces are relatively independent of one another
• Eventually, the process of breaking pieces into smaller pieces
creates more complexity than it eliminates.
– 1970s: Happens later than most designers would like to believe.
– 2000s: Happens sooner than most designers would like to believe.

04 - Structured Design CSC407 6

3
Design Approach
• Therefore, there is some optimal level of sub-division that
minimizes complexity
– Use your judgment
• Once you know the right level, then must choose how to
sub-divide:
– Minimize coupling between modules
• Reduces the complexities of interaction
– Maximize cohesion within modules
• Keeps changes from propagating
– Duals of one another.

04 - Structured Design CSC407 7

Coupling
• Two modules are independent if each can function
completely without the presence of the other.
– They are decoupled or uncoupled.
• Highly coupled modules are joined by many
interconnections/dependencies
• Loosely coupled modules are joined by few
interconnections/dependencies

• Wish to minimize coupling between modules in a system


– Coupling = probability that in coding/modifying/debugging
module A we will have to take into account something about
module B

04 - Structured Design CSC407 8

4
Influences on Coupling
• Type of connection
– Minimally connected: parameters to a subroutine
– Pathologically connected: non-parameter data references
• Interface complexity
– Number of parameters/returns
– Difficulty of usage. e.g., A = sqrt(x,y,z)
• Information flow
– Data flow
• Passing a of data to be acted upon in a uniform fashion
– Control flow
• Passing of flags that govern how other data is processed
• Binding time
– More static = more complex
• e.g., literal ’80’ versus pervasive constant N_STUDENTS, versus
execution-time parameter.
04 - Structured Design CSC407 9

Common-Environment Coupling
• A module writes into global data
• A different module reads from it (data or, worse, control).

R S

T
U X
V
W

04 - Structured Design CSC407 10

5
Coupling Example 1

main()

getChar()

• Alternate interfaces:
– void getChar(bool& eof, char& c)
– char getChar(bool& eof);
– char getChar();
• Either way:
– 1 data coupling
– 1 control coupling

04 - Structured Design CSC407 11

Coupling Example 2

main()

getLine() parseCmd() execCmd()

getChar()

04 - Structured Design CSC407 12

6
Interfaces
• void getChar(char& c, bool& eof);
• void getLine(char* &line, bool& eof);
• void parseCmd(char* line, Command& cmd);
• void execCmd(Command cmd);

• 3 data couplings, 4 command couplings

04 - Structured Design CSC407 13

Example

• Go to your tutorial!
• I will give you a similar question
on the exam.

04 - Structured Design CSC407 14

7
Cohesion
• While minimizing coupling, we must also
maximize cohesion.
– How well a particular module “holds together”.
– The cement that holds a module together
– Answers the questions:
• Does this make sense as a distinct module?
• Do these things belong together?
– Best cohesion is when the cohesion comes from the
problem space, not the solution space
• Echoed years later in OOA/OOD

04 - Structured Design CSC407 15

Elements of Processing
• A module is composed of processing elements.
– ill-defined
– roughly corresponds to flowchart steps
• Cohesion is a measure of how well the processing
elements hang together as a module

• Cohesion of a module is
– approximately the highest level of cohesion which is applicable to
all elements of processing in the module

04 - Structured Design CSC407 16

8
Levels of Lack of Cohesion
• Coincidental
– No rhyme or reason for doing 2 things in the same sub-
routine
• void computeAndRead(double x, double& sqrtX, char& c);
• Logical
– Similar class of things
• char input(bool fromFile, bool fromStdin);
• Temporal
– Things that happen one after the other
• void initSimulationAndPrepareFirst()

04 - Structured Design CSC407 17

Levels of Lack of Cohesion (cont’d)


• Procedural
– Operation are together because they are in the same loop or
decision process (but no higher cohesion exists)
– typeDecide(m)
• Decide type of plant being simulated and perform simulation part 1.
• Communicational
– All operations are on the same set of input data, or produce the
same set of output data
• void printReport(data x, data y, data z)
• Sequential
– A sequence of steps that take the output of the previous step and
process it into input for the next step.
• string compile(String program) {
parse, semantic analysis, code generation }

04 - Structured Design CSC407 18

9
Cohesion (cont’d)
• Functional
– That which is none of the above
• double sqrt(double x);
– Does one and only one conceptual thing.
– Equivalent to Information Hiding

04 - Structured Design CSC407 19

Implementation and Cohesion


• Consider module FG that does two things: F and G
• When doing these things in the same module, chances are
there is some common code than can be shared.
• If F and G have high cohesion, that's ok.
• Otherwise it becomes difficult to work with

F F

G
G

04 - Structured Design CSC407 20

10
Data Flow Diagrams (DFDs)

employee
skill
records
department
skill
summary
valid employee
Check skill records
Skill Summarize
Validity

bogus skills

04 - Structured Design CSC407 21

Structured Design Methodology


• Transform Analysis
– Restate the problem as a data flow graph
– Identify Afferent and Efferent data elements
• afferent: high-level input data, furthest removed from the physical
input, which are still considered inputs
• efferent: high-level output data, furthest removed from the physical
output, which are still considered outputs
– Factor Afferent, Efferent, and Transform branches

04 - Structured Design CSC407 22

11

You might also like