SOFTWARE ENGINEERING
Department of computer science and Engineering
Parul University
UNIT 3 Structured System Design
Design Concepts, Design Model, Software Architecture, Data Design, Architectural Styles
and Patterns, Architectural Design, Alternative architectural designs, Modeling
Component level design and its modeling, Procedural Design, Object Oriented Design.
Design
• Mitch Kapor, the creator of Lotus 1-2-3, presented a “software
design manifesto” in Dr. Dobbs Journal. He said:
• Good software design should exhibit:
• Firmness: A program should not have any bugs that inhibit its function.
• Commodity: A program should be suitable for the purposes for which it
was intended.
• Delight: The experience of using the program should be pleasurable
one.
3
Analysis Model -> Design Model
Co m p o n e n t -
sc e na r i o- ba se d f l ow- or i e nt e d L e v e l D e sig n
e l e me nt s e l e me nt s
use-cases - text data flow diagrams
use-case diagrams control-flow diagrams
activity diagrams processing narratives
swim lane diagrams
In t e rf a c e D e sig n
Analysis Model
A r c h it e c t u ra l D e sig n
c l a ss- ba se d be ha v i or a l
e l e me nt s e l e me nt s
class diagrams state diagrams
analysis packages sequence diagrams
CRC models D a t a / Cla ss D e sig n
collaboration diagrams
Design Model
4
Design and Quality
• The design must implement all of the explicit requirements contained in the
analysis model, and it must accommodate all of the implicit requirements
desired by the customer.
• The design must be a readable, understandable guide for those who generate
code and for those who test and subsequently support the software.
• The design should provide a complete picture of the software, addressing the
data, functional, and behavioral domains from an implementation perspective.
5
Quality Guidelines
• A design should exhibit an architecture that
(1) has been created using recognizable architectural styles or patterns
(2) is composed of components that exhibit good design characteristics and
(3) can be implemented in an evolutionary fashion
• For smaller systems, design can sometimes be developed linearly.
• A design should be modular; that is, the software should be logically partitioned into
elements or subsystems
• A design should contain distinct representations of data, architecture, interfaces, and
6
components.
• A design should lead to data structures that are appropriate for the classes to be
implemented and are drawn from recognizable data patterns.
• A design should lead to components that exhibit independent functional characteristics.
• A design should lead to interfaces that reduce the complexity of connections between
components and with the external environment.
• A design should be derived using a repeatable method that is driven by information
obtained during software requirements analysis.
• A design should be represented using a notation that effectively communicates its
meaning. 7
Design Principles
• The design should be traceable to the analysis model.
• The design should “minimize the intellectual distance” between the software
and the problem as it exists in the real world.
• The design should be structured to accommodate change.
• Design is not coding, coding is not design.
• The design should be assessed for quality as it is being created, not after the
fact.
• The design should be reviewed to minimize conceptual (semantic) errors. 8
Fundamental Concepts
• Abstraction—data, procedure, control
• Architecture—the overall structure of the software
• Patterns—”conveys the essence” of a proven design solution
• Separation of concerns—any complex problem can be more easily handled if it is
subdivided into pieces
• Modularity—compartmentalization of data and function
• Hiding—controlled interfaces
• Functional independence—single-minded function and low coupling 9
• Refinement—elaboration of detail for all abstractions
• Aspects—a mechanism for understanding how global requirements affect
design
• Refactoring—a reorganization technique that simplifies the design
• OO design concepts
• Design Classes—provide design detail that will enable analysis classes
to be implemented
10
Data Abstraction
door
manufacturer
model number
type
swing direction
inserts
lights
type
number
weight
opening mechanism
implemented as a data structure
11
Procedural Abstraction
open
details of enter
algorithm
implemented with a "knowledge" of the
object that is associated with enter
12
Architecture
“The overall structure of the software and the ways in which that structure provides conceptual
integrity for a system.” [SHA95a]
•Structural properties. This aspect of the architectural design representation defines the components of
a system (e.g., modules, objects, filters) and the manner in which those components are packaged and
interact with one another. For example, objects are packaged to encapsulate both data and the
processing that manipulates the data and interact via the invocation of methods
•Extra-functional properties. The architectural design description should address how the design
architecture achieves requirements for performance, capacity, reliability, security, adaptability, and other
system characteristics.
•Families of related systems. The architectural design should draw upon repeatable patterns that are
commonly encountered in the design of families of similar systems. In essence, the design should have
the ability to reuse architectural building blocks.
13
Patterns
Design Pattern Template
•Pattern name—describes the essence of the pattern in a short but expressive name
•Intent—describes the pattern and what it does
•Also-known-as—lists any synonyms for the pattern
•Motivation—provides an example of the problem
•Applicability—notes specific design situations in which the pattern is applicable
•Structure—describes the classes that are required to implement the pattern
•Participants—describes the responsibilities of the classes that are required to implement the
pattern
•Collaborations—describes how the participants collaborate to carry out their responsibilities
•Consequences—describes the “design forces” that affect the pattern and the potential trade-offs
that must be considered when the pattern is implemented
•Related patterns—cross-references related design patterns 14
Separation of Concerns
• Any complex problem can be more easily handled if it is subdivided into
pieces that can each be solved and/or optimized independently
• A concern is a feature or behavior that is specified as part of the
requirements model for the software
• By separating concerns into smaller, and therefore more manageable
pieces, a problem takes less effort and time to solve.
15
Modularity
• "Modularity is the single attribute of software that allows a program to be intellectually
manageable" [mye78].
• Monolithic software (i.e., A large program composed of a single module) cannot be
easily grasped by a software engineer.
• The number of control paths, span of reference, number of variables,
and overall complexity would make understanding close to impossible.
• In almost all instances, you should break the design into many modules, hoping to
make understanding easier and as a consequence, reduce the cost required to build
the software.
16
Modularity: Trade-offs
What is the "right" number of modules
for a specific software design?
module development cost
cost of
software
module
integration
cost
optimal number number of modules
of modules
17
Information Hiding
module
• algorithm
controlled
interface • data structure
• details of external interface
• resource allocation policy
clients
"secret"
a specific design decision
18
Why Information Hiding?
• Reduces the likelihood of “side effects”
• Limits the global impact of local design decisions
• Emphasizes communication through controlled interfaces
• Discourages the use of global data
• Leads to encapsulation—an attribute of high quality design
• Results in higher quality software
19
Stepwise Refinement
open
walk to door;
reach for knob;
open door; repeat until door opens
turn knob clockwise;
walk through; if knob doesn't turn, then
close door. take key out;
find correct key;
insert in lock;
endif
pull/push door
move out of way;
end repeat
20
Sizing Modules: Two Views
What's How big
inside?? is it??
MODULE
21
Functional Independence
• Functional independence is achieved by developing modules with "single-minded" function and an
"aversion" to excessive interaction with other modules.
• Cohesion is an indication of the relative functional strength of a module.
• A cohesive module performs a single task, requiring little interaction with other
components in other parts of a program. Stated simply, a cohesive module
should (ideally) do just one thing.
• Coupling is an indication of the relative interdependence among modules.
• Coupling depends on the interface complexity between modules, the point at
which entry or reference is made to a module, and what data pass across the
interface.
22
Aspects
• Consider two requirements, A and B. Requirement A crosscuts
requirement B “if a software decomposition [refinement] has been
chosen in which B cannot be satisfied without taking A into account.
[Ros04]
• An aspect is a representation of a cross-cutting concern.
23
Refactoring
• Fowler [FOW99] defines refactoring in the following manner:
• "refactoring is the process of changing a software system in such a way that it does not
alter the external behavior of the code [design] yet improves its internal structure.”
• When software is refactored, the existing design is examined for
• Redundancy
• Unused design elements
• Inefficient or unnecessary algorithms
• Poorly constructed or inappropriate data structures
• Or any other design failure that can be corrected to yield a better design.
24
OO Design Concepts
• Design classes
• Entity classes
• Boundary classes
• Controller classes
• Inheritance—all responsibilities of a superclass is immediately inherited by all
subclasses
• Messages—stimulate some behavior to occur in the receiving object
• Polymorphism—a characteristic that greatly reduces the effort required to
extend the design 25
Design Classes
• Analysis classes are refined during design to become entity classes
• Boundary classes are developed during design to create the interface (e.G., Interactive screen
or printed reports) that the user sees and interacts with as the software is used.
• Boundary classes are designed with the responsibility of managing the way entity objects are represented
to users.
• Controller classes are designed to manage
• The creation or update of entity objects;
• the instantiation of boundary objects as they obtain information from entity objects;
• complex communication between sets of objects;
• validation of data communicated between objects or between the user and the application. 26
high
The Design
a na ly sis m ode l
Model
class diagr ams
analysis packages
use- cases - t ext class diagr ams
Requirement s:
CRC models use- case diagr ams const raint s
analysis packages
collabor at ion diagr ams
act ivit y diagr ams CRC models int eroperabilit y
dat a f low diagr ams sw im lane diagr ams collabor at ion diagr ams t arget s and
cont r ol- f low diagr ams collabor at ion diagr ams dat a f low diagr ams
pr ocessing nar r at ives st at e diagr ams cont r ol- f low diagr ams
conf igurat ion
sequence diagr ams pr ocessing nar r at ives
st at e diagr ams
sequence diagr ams
design class r ealizat ions
subsyst ems
collabor at ion diagr ams t echnical int er f ace component diagr ams
design class r ealizat ions
design design classes
subsyst ems
Navigat ion design act ivit y diagr ams
collabor at ion diagr ams
GUI design sequence diagr ams
component diagr ams
de sign m ode l design classes
r ef inement s t o: act ivit y diagr ams
r ef inement s t o: sequence diagr ams
component diagr ams
design class r ealizat ions design classes
subsyst ems act ivit y diagr ams
low collabor at ion diagr ams sequence diagr ams deployment diagr ams
archit ect ure int erface component -level deployment -level
element s element s element s element s
27
process dimension
Design Model Elements
• Data elements
• Data model --> data structures
• Data model --> database architecture
• Architectural elements
Com pone nt -
scenar io- based f low- or ient ed Le v e l De sign
element s element s
• Application domain use-cases - text
use-case diagrams
data flow diagrams
control-flow diagrams
activit y diagrams processing narratives
• Analysis classes, their relationships, collaborations and behaviors
swim lane diagrams
Int e rfa c e De sign
are transformed into design realizations Analysis Model
• Patterns and “styles” class- based behavior al
Arc hit e c t ura l De sign
element s element s
• Interface elements class diagrams
analysis packages
CRC models
state diagrams
sequence diagrams
Da t a / Cla ss De sign
• The user interface (UI)
collaboration diagrams
• external interfaces to other systems, devices, networks or other Design Model
producers or consumers of information
• Internal interfaces between various design components.
• Component elements
• Deployment elements
28
Architectural Elements
• The architectural model [Sha96] is derived from three sources:
• information about the application domain for the software to be built;
• specific requirements model elements such as data flow diagrams or
analysis classes, their relationships and collaborations.
• the availability of architectural patterns and styles.
29
Interface Design Elements
• These interface design elements allow the software to communicate
externally and enable internal communication and collaboration
among the components that populate the software architecture.
30
Interface Elements
31
Component-Level Design Elements
• The component-level design for software is the equivalent to a set of detailed
drawings (and specifications) for each room in a house.
• These drawings depict wiring and plumbing within each room, the location of
electrical receptacles and wall switches, faucets, sinks, showers, tubs, drains, cabinets,
and closets.
• The component-level design for software fully describes the internal detail of each
software component.
• To accomplish this, the component-level design defines data structures for all local
data objects and algorithmic detail for all processing.
32
Component Elements
SensorManagement
Sensor
33
Deployment Elements
Deployment-level design
elements indicate how software
functionality and subsystems will
be allocated within the physical
computing environment that will
support the software.
34
THANKS…
35