Software Architecture Design
Software Architecture Design
Architecture
Fakhar Lodhi
Topics Covered: 001 – 015
Software Design Concepts
Software Design and
Architecture
Topic#001
Design – What and Why
What is design?
Definition from Cambridge
Dictionary
Verb
to make or draw plans for
something, for example clothes
or buildings
What is design?
Definition from Cambridge
Dictionary
Noun
a drawing or set of drawings
showing how a building or
product is to be made and how it
will work and look
Dress Design
Product Design
Mechanical Design
Building Elevation
Design
Building Floor Plan Design
Landscape Design
Interior Design
Software Design
Software Design
Software Design
Why should structures/systems
need to be designed at all?
"You can use an eraser
on the drafting table or a
sledgehammer on the
construction site.“
--Frank Lloyd Wright
Software Design and
Architecture
Topic#001
END!
Software Design and
Architecture
Topic#002
Design – Objectives
Software Design Objectives
The
A "blueprint"
System Software
for
Specification Design
implementation
Process
Software Design Objectives
The
A "blueprint"
System Software
for
Specification Design
implementation
Process
During the design phase, software engineers
apply their knowledge of:
• the problem domain
• implementation technologies
Software Design Objectives
The
A "blueprint"
System Software
for
Specification Design
implementation
Process
Should be “efficient”
Software Design Objectives
The
A "blueprint"
System Software
for
Specification Design
implementation
Process
END!
Software Design and
Architecture
Topic#003
Software Design – Complexity
Poorly designed
programs are difficult
to understand and
modify
Cost of adding the ith feature to a well-designed and poorly designed program
Software Design and
Architecture
Topic#003
END!
Software Design and
Architecture
Topic#004
Software Design
Complexity and Size
The size
does
matter!
The larger the
program, the more
pronounced are the
consequences of
poor design
Software Design and
Architecture
Topic#004
END!
Software Design and
Architecture
Topic#005
Software Design
Types of Complexities
Two Types of Complexity in Software
Essential complexities –
complexities that are
inherent in the problem.
Two Types of Complexity in Software
Accidental/incidental
complexities –
complexities that are artifacts
of the solution.
Two Types of Complexity in Software
END!
Software Design and
Architecture
Topic#006
Why is Software Design Hard?
Why Design is Hard
Design is difficult because
design is an abstraction of
the solution which has yet
to be created
Software Design and
Architecture
Topic#006
END!
Software Design and
Architecture
Topic#007
Software Design
A science or an art?
Difficulty with design
Design A Science
An Art
Software Design and
Architecture
Topic#007
END!
Software Design and
Architecture
Topic#008
Software Design
A Wicked Problem
A wicked problem
A problem that can only be
clearly defined by solving it
END!
Software Design and
Architecture
Topic#009
How to make the design process
more systematic and
predictable?
The design process can be
made more systematic and
predictable through the
application of methods,
techniques and patterns, all
applied according to
principles and heuristics.
Software Design and
Architecture
Toipc#009
END!
Software Design and
Architecture
Topic#010
Role of Modularity, Hierarchical
Organization, Information Hiding, and
Abstraction in dealing with software
complexity
Good design doesn’t reduce the
total amount of essential
complexity in a solution but it
will reduce the amount of
complexity that a programmer
has to deal with at any one time
A good design will manage
essential complexities
inherent in the problem
without adding to accidental
complexities consequential to
the solution.
Modularity
subdivide the solution into
smaller easier to manage
components
END!
Software Design and
Architecture
Topic#011
Characteristics of Software
Design
A deterministic process is
one that produces the same
output given the same
inputs
Design
A Science
An Art
Design is non-deterministic
END!
Software Design and
Architecture
Topic#012
Benefits of Good Design
Good design reduces
software complexity - making
the software easier to
understand and modify
Rapid development
Easier Maintenance
Good design makes it easier
to reuse code.
• It improves software quality.
END!
Software Design and
Architecture
Topic#013
A Generic Design Process
The final design evolves from
experience and feedback
END!
Software Design and
Architecture
Topic#014
Inputs to the design process
User requirements and
system specification
(including any constraints
on design and
implementation options)
Domain knowledge (For
example, if it’s a healthcare
application the designer
will need some knowledge
of healthcare terms and
concepts.)
Implementation knowledge
(capabilities and limitations
of eventual execution
environment)
Software Design and
Architecture
Topic#014
END!
Software Design and
Architecture
Topic#015
Desirable Internal Design
Characteristics
Poorly designed programs
are difficult to understand
and modify
Ease of maintenance – Your
code will be read more often
then it is written.
Desirable Internal
Design Characteristics
Minimal complexity
Keep it simple
END!