Software Design (Lecture 4)
Software Design (Lecture 4)
(Lecture 4)
Prof. R. Mall
Dept. of CSE, IIT, Kharagpur
1
Organization of This
Lecture
● Introduction to software design
● Goodness of a design
● Functional Independence
● Cohesion and Coupling
● Function-oriented design vs. Object-
oriented design
● Summary
2
Introduction
● Design phase transforms SRS
document:
– To a form easily implementable in
some programming language.
SRS Design
Document Design Documents
Activities
3
Items Designed During
Design Phase
● Module structure,
● Control relationship among the modules
– call relationship or invocation relationship
● Interface among different modules,
– Data items exchanged among different
modules,
● Data structures of individual modules,
● Algorithms for individual modules.
4
Module Structure
5
Introduction
● A module consists of:
– Several functions
– Associated data structures.
D1 ..
D2 ..
D3 ..
Data
F1 .. Functions
F2 ..
F3 ..
F4 ..
F5 ..
6
Introduction
● Good software designs:
– Seldom arrived through a single
step procedure:
– But through a series of steps and
iterations.
7
Introduction
● Design activities are usually classified
into two stages:
– Preliminary (or high-level) design.
– Detailed design.
● Meaning and scope of the two stages:
– Vary considerably from one methodology
to another.
8
High-Level Design
● Identify:
– Modules
– Control relationships among modules
– Interfaces among modules.
d1 d2
d3 d1 d4
9
High-Level Design
● The outcome of high-level
design:
– Program structure (or software
architecture).
10
High-Level Design
● Several notations are available to
represent high-level design:
– Usually a tree-like diagram called
structure chart is used.
– Other notations:
● Jackson diagram or Warnier-
Orr diagram can also be used.
11
Detailed Design
● For each module, design:
– Data structure
– Algorithms
12
A Classification of Design
Methodologies
● Procedural (aka Function-
oriented)
● Object-oriented
● More recent:
– Aspect-oriented
– Component-based (Client-
Server)
13
Does a Design Technique Lead
to a Unique Solution?
● No:
– Several subjective decisions need
to be made to trade off among
different parameters.
– Even the same designer can come
up with several alternate design
solutions.
14
Analysis versus Design
● An analysis technique helps elaborate the
customer requirements through careful
thinking:
– And at the same time consciously avoids making
any decisions regarding implementation.
● The design model is obtained from the
analysis model through transformations over
a series of steps:
– Decisions regarding implementation are
consciously made.
15
A Fundamental Question
● How to distinguish between the
superior of two alternate design
solutions?
– Unless we know what a good
software design is:
● We can not possibly design
one.
16
Good and Bad Designs
● There is no unique way to design a
system.
● Even using the same design
methodology:
– Different designers can arrive at very
different design solutions.
● We need to distinguish between
good and bad designs.
17
Which of Two is a
Better Design?
● Should implement all functionalities of
the system correctly.
● Should be easily understandable.
● Should be efficient.
● Should be easily amenable to change,
– i.e. easily maintainable.
18
Which of Two is a
Better Design?
● Understandability of a design is
a major issue:
– Determines goodness of design:
– A design that is easy to
understand:
● Also easy to maintain and
change.
19
Which of Two is a
Better Design?
● Unless a design is easy to understand,
– Tremendous effort needed to maintain it
– We already know that about 60% effort
is spent in maintenance.
● If the software is not easy to
understand:
– Maintenance effort would increase many
times.
20
Understandability
● Use consistent and meaningful
names:
– For various design components.
● Should make use of abstraction
and decomposition principles in
ample measure.
21
How are Abstraction and Decomposition
Principles Used in Design?
22
Modularity
● Modularity is a fundamental
attributes of any good design.
– Decomposition of a problem
cleanly into modules:
– Modules are almost independent
of each other
– Divide and conquer principle.
23
Modularity
● If modules are independent:
– Modulescan be understood
separately,
● Reduces the complexity greatly.
– To understand why this is so,
● Remember that it is very difficult to
break a bunch of sticks but very
easy to break the sticks individually.
24
Layered Design
25
Layered Design
● Neat arrangement of
modules in a hierarchy
means:
– Low fan-out
– Control abstraction
26
Modularity
● In technical terms, modules
should display:
– High cohesion
– Low coupling.
● We shall next discuss:
– cohesion and coupling.
27
Cohesion and Coupling
● Cohesion is a measure of:
– functional strength of a module.
– A cohesive module performs a
single task or function.
● Coupling between two modules:
– A measure of the degree of the
interdependence or interaction
between the two modules.
28
Cohesion and Coupling
● A module having high cohesion
and low coupling:
– functionally
independent of
other modules:
● A functionally independent
module has minimal interaction
with other modules.
29
Advantages of Functional
Independence
● Better understandability and
good design:
● Complexity of design is reduced,
● Different modules easily
understood in isolation:
– Modules are independent
30
Advantages of Functional
Independence
● Functional independence reduces
error propagation.
– Degree of interaction between modules
is low.
– An error existing in one module does
not directly affect other modules.
● Reuse of modules is possible.
31
Advantages of Functional
Independence
● A functionally independent
module:
– Canbe easily taken out and
reused in a different program.
● Each module does some well-defined
and precise function
● The interfaces of a module with
other modules is simple and minimal.
32
Functional Independence
● Unfortunately, there are no ways:
– To quantitatively measure the
degree of cohesion and coupling.
– Classification of different kinds of
cohesion and coupling:
● Can give us some idea regarding
the degree of cohesiveness of a
module.
33
Classification of
Cohesiveness
● Classification is often subjective:
– Yet gives us some idea about
cohesiveness of a module.
● By examining the type of
cohesion exhibited by a module:
– We can roughly tell whether it
displays high cohesion or low
cohesion.
34
Classification of
Cohesiveness
functional
sequential
communicational Degree of
procedural cohesion
temporal
logical
coincidental
35
Coincidental Cohesion
● The module performs a set of
tasks:
– Which relate to each other very
loosely, if at all.
● The module contains a random collection
of functions.
● Functions have been put in the module
out of pure coincidence without any
thought or design.
36
Logical Cohesion
● All elements of the module
perform similar operations:
– e.g. error handling, data input,
data output, etc.
● An example of logical cohesion:
– A set of print functions to
generate an output report
arranged into a single module.
37
Temporal Cohesion
● The module contains tasks that are
related by the fact:
– All the tasks must be executed in the
same time span.
● Example:
– The set of functions responsible for
● initialization,
● start-up, shut-down of some process,
etc.
38
Procedural Cohesion
● The set of functions of the
module:
– All part of a procedure (algorithm)
– Certain sequence of steps have to be
carried out in a certain order for
achieving an objective,
● e.g. the algorithm for decoding a
message.
39
Communicational Cohesion
● All functions of the module:
– Reference or update the same data
structure,
● Example:
– The set of functions defined on an
array or a stack.
40
Sequential Cohesion
● Elements of a module form
different parts of a sequence,
– Output from one element of the
sequence is input to the next.
– Example:
sort
search
display
41
Functional Cohesion
● Different elements of a module
cooperate:
– To achieve a single function,
– e.g. managing an employee's pay-roll.
● When a module displays functional
cohesion,
– We can describe the function using
a single sentence.
42
Determining Cohesiveness
● Write down a sentence to describe
the function of the module
– If the sentence is compound,
● It has a sequential or communicational
cohesion.
– If it has words like “first”, “next”,
“after”, “then”, etc.
● It has sequential or temporal cohesion.
– If it has words like initialize,
● It probably has temporal cohesion. 43
Coupling
● Coupling indicates:
– How closely two modules
interact or how interdependent
they are.
– The degree of coupling
between two modules depends
on their interface complexity.
44
Coupling
● There are no ways to precisely
determine coupling between two
modules:
– Classification of different types of
coupling will help us to approximately
estimate the degree of coupling between
two modules.
● Five types of coupling can exist
between any two modules.
45
Classes of coupling
data
stamp
control Degree of
coupling
common
content
46
Data coupling
● Two modules are data coupled,
– If they communicate via a parameter:
● an elementary data item,
● e.g an integer, a float, a character,
etc.
47
Stamp Coupling
● Two modules are stamp
coupled,
– Ifthey communicate via a
composite data item
● such as a record in PASCAL
● or a structure in C.
48
Control Coupling
● Data from one module is used
to direct:
– Order of instruction execution
in another.
● Example of control coupling:
–A flag set in one module and
tested in another module.
49
Common Coupling
● Two modules are common
coupled,
– Ifthey share some global
data.
50
Content Coupling
● Content coupling exists between two
modules:
– If they share code,
– e.g, branching from one module into
another module.
● The degree of coupling increases
– from data coupling to content coupling.
51
Neat Hierarchy
● Control hierarchy represents:
– Organization of modules.
– Control hierarchy is also called
program structure.
● Most common notation:
– A tree-like diagram called structure
chart.
52
Layered Design
● Essentially means:
– Low fan-out
– Control abstraction
53
Characteristics of Module
Hierarchy
● Depth:
– Number of levels of control
● Width:
– Overall span of control.
● Fan-out:
– A measure of the number of modules
directly controlled by given module.
54
Characteristics of Module
Structure
● Fan-in:
– Indicates how many modules
directly invoke a given
module.
– Highfan-in represents code
reuse and is in general
encouraged.
55
Module Structure
Fan Fan in=0
out=2
Fan Fan in=1
out=1
Fan in=2
56
Layered Design
● A design having modules:
– With high fan-out numbers is
not a good design:
–A module having high fan-out
lacks cohesion.
57
Goodness of Design
● A module that invokes a large
number of other modules:
– Likely
to implement several
different functions:
– Notlikely to perform a single
cohesive function.
58
Control Relationships
● A module that controls another
module:
– Said to be superordinate to it.
● Conversely, a module controlled by
another module:
– Said to be subordinate to it.
59
Visibility and Layering
60
Bad Design
61
Abstraction
● A module is unaware (how to invoke
etc.) of the higher level modules.
● Lower-level modules:
– Do input/output and other low-level
functions.
● Upper-level modules:
– Do more managerial functions.
62
Abstraction
● The principle of abstraction
requires:
– Lower-levelmodules do not
invoke functions of higher level
modules.
– Also known as layered design.
63
High-level Design
● High-level design maps functions
into modules {fi} {mj} such
that:
– Each module has high cohesion
– Coupling among modules is as low
as possible
– Modules are organized in a neat
hierarchy
64
High-level Design
• f1
• f2
• f3 d1 d2
•
• d3 d1 d4
•
• fn
65
Design Approaches
● Two fundamentally different
software design approaches:
– Function-oriented design
– Object-oriented design
66
Design Approaches
● These two design approaches
are radically different.
– However, are complementary
● Rather than competing techniques.
– Each technique is applicable at
● Different stages of the design
process.
67
Function-Oriented Design
● A system is looked upon as something
– That performs a set of functions.
● Starting at this high-level view of the
system:
– Each function is successively refined into
more detailed functions.
– Functions are mapped to a module
structure.
68
Example
● The function create-new-library-
member:
– Creates the record for a new
member,
– Assigns a unique membership number
– Prints a bill towards the membership
69
Example
● Create-library-member function
consists of the following sub-
functions:
– Assign-membership-number
– Create-member-record
– Print-bill
70
Function-Oriented Design
● Each subfunction:
– Split
into more detailed
subfunctions and so on.
71
Function-Oriented Design
● The system state is centralized:
– Accessible to different functions,
– Member-records:
● Available for reference and updation
to several functions:
– Create-new-member
– Delete-member
– Update-member-record
72
Function-Oriented Design
● Several function-oriented design
approaches have been developed:
– Structured design (Constantine and
Yourdon, 1979)
– Jackson's structured design (Jackson,
1975)
– Warnier-Orr methodology
– Wirth's step-wise refinement
– Hatley and Pirbhai's Methodology
73
Object-Oriented Design
● System is viewed as a collection
of objects (i.e. entities).
● System state is decentralized
among the objects:
– Each object manages its own state
information.
74
Object-Oriented Design
Example
● Library Automation Software:
– Eachlibrary member is a
separate object
● With its own data and functions.
– Functions defined for one object:
● Cannot directly refer to or change
data of other objects.
75
Object-Oriented Design
● Objects have their own internal data:
– Defines their state.
● Similar objects constitute a class.
– Each object is a member of some class.
● Classes may inherit features
– From a super class.
● Conceptually, objects communicate by
message passing.
76
Object-Oriented versus Function-
Oriented Design
77
Object-Oriented versus Function-
Oriented Design
● In OOD:
– Software is not developed by
designing functions such as:
● update-employee-record,
● get-employee-address, etc.
78
Object-Oriented versus Function-
Oriented Design
● Grady Booch sums up this
fundamental difference
saying:
– “Identifyverbs if you are
after procedural design and
nouns if you are after object-
oriented design.”
79
Object-Oriented versus Function-
Oriented Design
● In OOD:
– Stateinformation is not
shared in a centralized data.
– Butis distributed among the
objects of the system.
80
Example:
● In an employee pay-roll system, the
following can be global data:
– employee names,
– code numbers,
– basic salaries, etc.
● Whereas, in object oriented design:
– Data is distributed among different
employee objects of the system.
81
Object-Oriented versus Function-
Oriented Design
● Objects communicate by
message passing.
– One object may discover the
state information of another
object by interrogating it.
82
Object-Oriented versus Function-
Oriented Design
● Of course, somewhere or other the
functions must be implemented:
– The functions are usually associated
with specific real-world entities
(objects)
– Directly access only part of the
system state information.
83
Object-Oriented versus Function-
Oriented Design
● Function-oriented techniques group
functions together if:
– As a group, they constitute a higher
level function.
● On the other hand, object-oriented
techniques group functions together:
– On the basis of the data they operate
on.
84
Object-Oriented versus Function-
Oriented Design
85
Fire-Alarm System
● We need to develop a
computerized fire alarm
system for a large multi-
storied building:
– Thereare 80 floors and 1000
rooms in the building.
86
Fire-Alarm System
● Different rooms of the
building:
– Fittedwith smoke detectors
and fire alarms.
● The fire alarm system would
monitor:
– Statusof the smoke
detectors.
87
Fire-Alarm System
● Whenever a fire condition is
reported by any smoke
detector:
– the fire alarm system should:
● Determine the location from which
the fire condition was reported
● Sound the alarms in the neighboring
locations.
88
Fire-Alarm System
● The fire alarm system
should:
– Flash
an alarm message on the
computer console:
● Fire fighting personnel man the
console round the clock.
89
Fire-Alarm System
90
Function-Oriented
Approach:
● /* Global data (system state) accessible by various functions */
BOOL detector_status[1000];
int detector_locs[1000];
BOOL alarm-status[1000]; /* alarm activated when status set */
int alarm_locs[1000]; /* room number where alarm is located */
int neighbor-alarms[1000][10];/*each detector has at most*/
/* 10 neighboring alarm locations */
The functions which operate on the system state:
interrogate_detectors();
get_detector_location();
determine_neighbor();
ring_alarm();
reset_alarm();
report_fire_location();
91
Object-Oriented Approach:
● class detector
● attributes: status, location, neighbors
● operations: create, sense-status, get-
location,
● find-neighbors
● class alarm
● attributes: location, status
● operations: create, ring-alarm,
get_location,
● reset-alarm
● In the object oriented program,
– appropriate number of instances of the class detector
and alarm should be created.
92
Object-Oriented versus Function-
Oriented Design
● In the function-oriented program :
– The system state is centralized
– Several functions accessing these data
are defined.
● In the object oriented program,
– The state information is distributed
among various sensor and alarm
objects.
93
Object-Oriented versus Function-
Oriented Design
94
Object-Oriented versus Function-
Oriented Design
95
Summary
● We started with an overview of:
– Activities undertaken during the
software design phase.
● We identified:
– The information need to be produced at
the end of the design phase:
● So that the design can be easily implemented
using a programming language.
96
Summary
● We characterized the features
of a good software design by
introducing the concepts of:
– fan-in, fan-out,
– cohesion, coupling,
– abstraction, etc.
97
Summary
● We classified different types
of cohesion and coupling:
– Enables us to approximately
determine the cohesion and
coupling existing in a design.
98
Summary
● Two fundamentally different
approaches to software design:
– Function-oriented approach
– Object-oriented approach
99
Summary
● We looked at the essential
philosophy behind these two
approaches
– These two approaches are not
competing but complementary
approaches.
100