Software Design

advertisement
Software Design
 Deriving
a solution which
satisfies software requirements
©Ian Sommerville 1995
Software Design
Slide 1
Topics covered



The design process and design methods
Design strategies including object-oriented design
and functional decomposition - briefly
Design quality attributes
©Ian Sommerville 1995
Software Design
Slide 2
The design process



Any design may be modelled as a directed
graph made up of entities with attributes which
participate in relationships
The system should be described at several
different levels of abstraction
Design takes place in overlapping stages. It is
artificial to separate it into distinct phases but
some separation is usually necessary
©Ian Sommerville 1995
Software Design
Slide 3
Phases in the design process
Requirements
specification
Design acti
vities
Architectur
al
design
Abstract
specificatio
n
Interface
design
Component
design
Data
structur
e
design
Algorithm
design
System
architectur
e
Software
specification
Interface
specifica
tion
Component
specification
Data
structur
e
specification
Algorithm
specifica
tion
Design pr
oducts
©Ian Sommerville 1995
Software Design
Slide 4
Design phases






Architectural design Identify sub-systems
Abstract specification Specify sub-systems
Interface design Describe sub-system interfaces
Component design Decompose sub-systems
into components
Data structure design Design data structures to
hold problem data
Algorithm design Design algorithms for problem
functions
©Ian Sommerville 1995
Software Design
Slide 5
Hierarchical design structure
System level
Sub-system
level
©Ian Sommerville 1995
Software Design
Slide 6
Top-down design


In principle, top-down design involves starting
at the uppermost components in the hierarchy
and working down the hierarchy level by level
In practice, large systems design is never
truly top-down. Some branches are designed before
others. Designers reuse experience (and
sometimes components) during the design
process
©Ian Sommerville 1995
Software Design
Slide 7
Design methods




Structured methods are sets of notations for
expressing a software design and guidelines for
creating a design
Well-known methods include Structured Design
(Yourdon), and JSD (Jackson Method)
Can be applied successfully because they
support standard notations and ensure
designs follow a standard form
Structured methods may be supported with
CASE tools
©Ian Sommerville 1995
Software Design
Slide 8
Method components




Many methods support comparable views of a
system
A data flow view (data flow diagrams) showing
data transformations
An entity-relation view describing the logical
data structures
A structural view showing system components
and their interactions
©Ian Sommerville 1995
Software Design
Slide 9
Method deficiencies


They are guidelines rather than methods in the
mathematical sense. Different designers create
quite different system designs
They do not help much with the early, creative
phase of design. Rather, they help the designer
to structure and document his or her design
ideas
©Ian Sommerville 1995
Software Design
Slide 10
Design description




Graphical notations. Used to display
component relationships
Program description languages. Based on
programming languages but with more flexibility
to represent abstract concepts
Informal text. Natural language description.
All of these notations may be used in large
systems design
©Ian Sommerville 1995
Software Design
Slide 11
Design strategies

Functional design
•

The system is designed from a functional viewpoint.
The system state is centralised and shared between the
functions operating on that state
Object-oriented design
•
The system is viewed as a collection of interacting
objects.
The system state is de-centralised and each object
manages its own state. Objects may be instances of an
object class and communicate by exchanging methods
©Ian Sommerville 1995
Software Design
Slide 12
Functional or DFD view of a compiler
Poor example, see Safe Home Alarm System instead
Source
program
Tokens
Scan
source
Syntax
tree
Tokens
Build
symbol
table
Symbols
Analyse
Symbols
Object
code
Generate
code
Error
indicator
Output
errors
Symbol
table
Error
messages
©Ian Sommerville 1995
Software Design
Slide 13
Object-oriented view of a compiler
Notice the main difference between this and previous diagram?
Scan
Source
program
Add
Token
stream
Symbol
table
Check
Syntax
tree
Get
Gr ammar
Build
Print
Err or
messages
Generate
Object
code
Abstract
code
Generate
©Ian Sommerville 1995
Software Design
Slide 14
Mixed-strategy design


Although it is sometimes suggested that one
approach to design is superior, in practice, an
object-oriented and a functional-oriented
approach to design are complementary
Good software engineers should select the
most appropriate approach for whatever
sub-system is being designed
©Ian Sommerville 1995
Software Design
Slide 15
Design quality




Design quality is an elusive concept. Quality
depends on specific organisational priorities
A 'good' design may be the most efficient, the
cheapest, the most maintainable, the most
reliable, etc.
The attributes discussed here are concerned
with the maintainability of the design
Quality characteristics are equally applicable to
function-oriented and object-oriented designs
©Ian Sommerville 1995
Software Design
Slide 16
Cohesion




A measure of how well a component 'fits
together'
A component should implement a single logical
entity or function
Cohesion is a desirable design component
attribute as when a change has to be made, it
is localised in a single cohesive component
Various levels of cohesion have been identified
©Ian Sommerville 1995
Software Design
Slide 17
Cohesion levels

Coincidental cohesion (weak)
•

Parts of a component are simply bundled together
Logical association (weak)
•
•
Components which perform similar functions are
grouped
For example:
output text to screen
output line to printer
output record to file
•
•
•
Seems ok
Problem is it carries out a range of similar but
different actions
No single well defined action
©Ian Sommerville 1995
Software Design
Slide 18
Cohesion levels

Temporal cohesion (weak)
•
•
Components which are activated at the same time are
grouped
For example:
clear screen
open file
Initialise total
•
•
again not related
solution is to make initialisation module all other
specialised modules:
call init_terminal
call init_files
call init_calculations
©Ian Sommerville 1995
Software Design
Slide 19
Cohesion levels

Communicational cohesion (medium)
•
•

All the elements of a component operate on the same
data
e.g. display and log temperature
Sequential cohesion (medium)
•
The output for one part of a component is the input to
another part
©Ian Sommerville 1995
Software Design
Slide 20
Cohesion levels

Functional cohesion (strong)
•
•
•
•

optimal type of cohesion
performs a single well-defined action on a single data
object
e.g. calculate average
Each part of a component is necessary for the
execution of a single function
Object cohesion (strong)
•
Each operation provides functionality which allows
object attributes to be modified or inspected
©Ian Sommerville 1995
Software Design
Slide 21
Cohesion as a design attribute



Not well-defined. Often difficult to classify
cohesion
Inheriting attributes from super-classes
weakens cohesion
To understand a component, the super-classes
as well as the component class must be
examined
©Ian Sommerville 1995
Software Design
Slide 22
Coupling




A measure of the strength of the inter-connections
between system components
Loose coupling means component changes are
unlikely to affect other components
Shared variables or control information
exchange lead to tight coupling
Loose coupling can be achieved by state
decentralisation (as in objects) and component
communication via parameters or message
passing
©Ian Sommerville 1995
Software Design
Slide 23
Tight coupling
Module A
Module B
Module C
Module D
Shared data
area
©Ian Sommerville 1995
Software Design
Slide 24
Loose coupling
Module A
A’s data
Module B
Module C
B’s data
C’s data
Module D
D’s data
©Ian Sommerville 1995
Software Design
Slide 25
Coupling levels


Altering another modules code (LISP, Assembler)
Modifying data within another module
•
•
•

fault that appears in one module may be due to another
complicated understanding and debugging
can be done via global variables or pointers or call be
reference in C++ / Java
Shared or global data
©Ian Sommerville 1995
Software Design
Slide 26
Coupling levels

Procedure call with a parameter that is a switch (or a
function pointer in C)
• io (command, device buffer, length);
• where command is 0,1,2 for read, write open; better to
use
• read( device, buffer, length);

Procedure call with parameters that are pure data
•
•
ideal is call by value, where a small number of
parameters are used and a copy of the data is passed to
the procedure invoked
clear what information is being communicated
©Ian Sommerville 1995
Software Design
Slide 27
Coupling levels

Passing a serial data stream
•
•
•
•
•
•
most ideal situation
one module passes stream of data to another
once passed data is outside control of process/module
like piping in UNIX
data can be thought of as a temporary intermediate file
only possible in languages that support concurrency
such as Ada and Erlang and Parallel C
©Ian Sommerville 1995
Software Design
Slide 28
Coupling and Inheritance


Object-oriented systems are loosely
coupled because there is no shared state and
objects communicate using message passing
However, an object class is coupled to its
super-classes. Changes made to the attributes
or operations in a super-class propagate to all
sub-classes. Such changes must be carefully
controlled
©Ian Sommerville 1995
Software Design
Slide 29
Cohesion, Coupling & Testing


High Cohesion ensures each unit provides a set of
related capabilities and makes the tests of those
capabilities easier to maintain
Low Coupling allows each unit to be effectively
tested in isolation
©Ian Sommerville 1995
Software Design
Slide 30
Understandability

Related to several component characteristics
•
•
•
•


Cohesion. Can the component be understood on its
own?
Naming. Are meaningful names used?
Documentation. Is the design well-documented?
Complexity. Are complex algorithms used?
Informally, high complexity means many
relationships between different parts of the design.
hence it is hard to understand
Most design quality metrics are oriented
towards complexity measurement. They are of
limited use
©Ian Sommerville 1995
Software Design
Slide 31
Adaptability

A design is adaptable if:
•
•
•
•

Its components are loosely coupled
It is well-documented and the documentation is up to
date
There is an obvious correspondence between design
levels (design visibility)
Each component is a self-contained entity (tightly
cohesive)
To adapt a design, it must be possible to trace the
links between design components so that change
consequences can be analysed
©Ian Sommerville 1995
Software Design
Slide 32
Design traceability
C
F
B
Object interaction
level
D
A
D
P
©Ian Sommerville 1995
O
R
Software Design
Object decomposition
level
Slide 33
Adaptability and inheritance


Inheritance dramatically improves adaptability.
Components may be adapted without change
by deriving a sub-class and modifying that
derived class
However, as the depth of the inheritance
hierarchy increases, it becomes increasingly
complex. It must be periodically reviewed and
restructured
•
new trend in this area known as refactoring, associated
with the lightweight process of Extreme Programming
(XP)
©Ian Sommerville 1995
Software Design
Slide 34
Advantages of inheritance



It is an abstraction mechanism which may be
used to classify entities - polymorphism
It is a reuse mechanism at both the design and the
programming level - very useful in framework
The inheritance graph is a source of
organisational knowledge about domains and
systems
Slide 35
Problems with inheritance



Object classes are not self-contained. they cannot
be understood without reference to their superclasses
Designers have a tendency to reuse the
inheritance graph created during analysis. Can
lead to significant inefficiency
The inheritance graphs of analysis, design and
implementation have different functions and
should be separately maintained
Slide 36
Inheritance and OOD

There are differing views as to whether
inheritance is fundamental to OOD.
•
•

View 1. Identifying the inheritance hierarchy or network is a
fundamental part of object-oriented design. Obviously this can
only be implemented using an OOPL.
View 2. Inheritance is a useful implementation concept which
allows reuse of attribute and operation definitions. Identifying
an inheritance hierarchy at the design stage places unnecessary
restrictions on the implementation
Inheritance introduces complexity and this is
undesirable, especially in critical systems
Slide 37
UML associations





Objects and object classes participate in relationships with
other objects and object classes
In the UML, a generalised relationship is indicated by an
association
Associations may be annotated with information that
describes the association
Associations are general but may indicate that an attribute
of an object is an associated object or that a method relies
on an associated object
Be careful to distinguish between a UML dependemcy
and an association
Slide 38
An association model
Employee
is-member-of
Department
is-managed-by
manages
Manager
Slide 39
Download