0% found this document useful (0 votes)
62 views

Software Architecture Design

The document discusses software design concepts over 15 topics. It defines design and explains why structures need to be designed. Some key objectives of software design are to serve as a blueprint for implementation, meet customer needs, and be easily extendible. Poor design leads to increased complexity that is difficult to understand and modify. Good design manages complexity through principles like modularity, hierarchical organization, information hiding, and abstraction. The benefits of good design include reduced complexity, easier maintenance and reuse, and improved quality. A generic design process involves understanding requirements, constructing models, looking for existing solutions, iterating based on feedback, and documenting the design.

Uploaded by

coook
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
62 views

Software Architecture Design

The document discusses software design concepts over 15 topics. It defines design and explains why structures need to be designed. Some key objectives of software design are to serve as a blueprint for implementation, meet customer needs, and be easily extendible. Poor design leads to increased complexity that is difficult to understand and modify. Good design manages complexity through principles like modularity, hierarchical organization, information hiding, and abstraction. The benefits of good design include reduced complexity, easier maintenance and reuse, and improved quality. A generic design process involves understanding requirements, constructing models, looking for existing solutions, iterating based on feedback, and documenting the design.

Uploaded by

coook
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 100

Software Design and

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

translate system specifications into plans for


the technical implementation of the
software
Software Design Objectives
The
A "blueprint"
System Software
for
Specification Design
implementation
Process

Serves as a technical plan for


implementation
Software Design Objectives
The
A "blueprint"
System Software
for
Specification Design
implementation
Process

Specifies the overall structure and


organization of the eventual code
Software Design Objectives
The
A "blueprint"
System Software
for
Specification Design
implementation
Process

The system or program should


meet customer’s needs
Software Design Objectives
The
A "blueprint"
System Software
for
Specification Design
implementation
Process

Should be easy to implement


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

Should be “easily extendible” to


meet new needs
Software Design and
Architecture
Topic#002

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

The total amount of complexity


in a software solution is:
Essential Complexities
+
Accidental complexities
Design
An Antidote to Complexity
primary tool for managing
essential and accidental
complexities in software
Software Design and
Architecture
Topic#005

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

Design is a wicked problem!


Even those proficient at
software design might not
be able to fully explain
how they arrived at their
result
Software Design and
Architecture
Topic#008

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

(divide and conquer)


Hierarchical Organization
larger components may be
composed of smaller
components
Information Hiding
hide details and complexity
behind simple interfaces
Abstraction
use abstractions to suppress
details in places where they
are unnecessary
Software Design and
Architecture
Topic#010

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

No two designers or design


processes are likely to
produce the same output.
Heuristic
because design is non-
deterministic, design
techniques tend to rely on
heuristics and rules-of-thumb
rather than repeatable
processes.
Emergent
the final design evolves from
experience and feedback

Design is an iterative and


incremental process where a
complex system arises out of
relatively simple interactions
Software Design and
Architecture
Topic#011

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.

• Good design exposes defects and makes it


easier to test the software.

• Complexity is the root cause of other problems


such as security. A program that is difficult to
understand is more likely to be vulnerable to
exploits than one that is simpler.
Software Design and
Architecture
Topic#012

END!
Software Design and
Architecture
Topic#013
A Generic Design Process
The final design evolves from
experience and feedback

Design is an iterative and


incremental process where a
complex system arises out of
relatively simple interactions
1.
Understand the problem
(software requirements)
2.
Construct a “black-box” model of
solution (system specification).

System specifications are typically


represented with use cases
(especially when doing OOD).
3.
Look for existing solutions
(e.g. architecture and design
patterns) that cover some or
all of the software design
problems identified.
4.
Design not complete?
Discover missing requirements

Consider building prototypes


5.
Document and review design
6.
Iterate over solution
(Refactor) (Evolve the design
until it meets functional
requirements and maximizes
non-functional requirements)
Software Design and
Architecture
Topic#013

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

Maybe you don’t need


high levels of generality.
Extensibility
Design for today but with an
eye toward the future.

Note, this characteristic can be


in conflict with “minimize
complexity”.
Engineering is all
about balancing
conflicting
objectives
Loose coupling
minimize dependencies
between modules
Reusability
Reuse is a hallmark of a
mature engineering
discipline
Portability
works or can easily be made
to work in other
environments
Software Design and
Architecture
Topic#015

END!

You might also like