Week5 CSE320
Week5 CSE320
Week5 CSE320
1
What is Achieved during design phase?
• Transformation of SRS document to Design document:
– A form easily implementable in some programming
language.
SRS Design
Document Design Documents
Activities
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.
Module
• A module consists of:
– several functions D1 ..
– associated data structures. D2
D3
..
..
Data
F1 ..
F2 .. Functions
F3 ..
F4 ..
F5 ..
Module Structure
Stages in Design
• Design activities are usually classified into two stages:
– Preliminary (or high-level) design
– Detailed design.
• Identify: d3 d4
d1
– modules
– control relationships among modules
– interfaces among modules.
High-level design
• The outcome of high-level design:
–program structure, also called software
architecture.
High-level Design
• Several notations are available to represent high-level
design:
– Usually a tree-like diagram called structure chart is used.
– Other notations: d1 d2
Superior
Inferior
:Source
Bad design
may look
like this…
Modularity
• In technical terms, modules should display:
– high cohesion
– low coupling.
• We next discuss:
– cohesion and coupling.
Modularity
• Arrangement of modules in a hierarchy
ensures:
– Low fan-out
– Abstraction
Coupling: Degree of dependence among components
High coupling makes
modifying parts of the
system difficult, e.g.,
No dependencies Loosely coupled-some dependencies modifying a component
affects all the components
to which the component is
connected.
Source:
Pfleeger, S., Software Engineering
Highly coupled-many dependencies Theory and Practice. Prentice Hall, 2001.
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 interdependence or
interaction between the two modules.
Cohesion and Coupling
• A module having high cohesion and low coupling:
– Called functionally independent of other modules:
• A functionally independent module needs very little help
from other modules and therefore has minimal interaction
with other modules.
Advantages of Functional Independence
• Better understandability
• Complexity of design is reduced,
No dependencies
Print-inventory();
Register-Student();
Issue-Book();
};
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.
Logical Cohesion
module print{
void print-grades(student-file){ …}
void print-certificates(student-file){…}
void print-salary(teacher-file){…}
}
Temporal cohesion
• The module contains functions so that:
– all the functions must be executed in the same time span.
• Example:
– The set of functions responsible for
• initialization,
• start-up, shut-down of some process, etc.
init() {
Check-memory(); Temporal
Check-Hard-disk(); Cohesion –
Example
Initialize-Ports();
Display-Login-Screen();
}
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.
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.
Communicational Cohesion
handle-Student- Data() {
Static Struct Student-data[10000];
Store-student-data();
Function A
Search-Student-data(); Function B
Print-all-students(); Function C
Communicational
}; Access same data
Sequential cohesion
• Elements of a module form different parts of a
sequence,
– output from one element of the sort
sequence is input to the next. search
– Example: display
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.
Write down a sentence to describe the function of the
module Determining
– If the sentence is compound, Cohesiveness
• 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.
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.
Coupling
• There are no ways to precisely measure coupling between
two modules:
– classification of different types of coupling will help us to
approximately estimate the degree of coupling between two
modules.
data
stamp
control Degree of
coupling
common
content
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.
– The data item should be problem related:
• not used for control purpose.
Stamp coupling
• Two modules are stamp coupled,
– if they communicate via a composite data item
• or an array or structure in C.
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.
Common Coupling
• Essentially means:
– low fan-out
– abstraction
Characteristics of Module Structure
• 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.
Characteristics of Module Structure
• Fan-in:
– indicates how many modules directly
invoke a given module.
– High fan-in represents code reuse and is
in general encouraged.
Module Structure
Fan out=2
Fan out=1
Fan in=1
Fan in=2
Fan out=0
Goodness of Design
• A design having modules:
– with high fan-out numbers
is not a good design.
• d3 d4
• d1
fn
Design Approaches
• Two fundamentally different software design
approaches:
– Function-oriented design
– Object-oriented design
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.
Function-Oriented Design
• A system is looked upon as something
– that performs a set of functions.
interrogate_detectors();
get_detector_location();
determine_neighbor(); Function-Oriented
ring_alarm(); Approach
reset_alarm();
report_fire_location();
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
– Appropriate number of instances of the class detector and alarm are created.
Object-Oriented versus Function-Oriented Design
• In a 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.
Object-Oriented versus Function-Oriented Design