Software
Design & Architecture
Lecture 2
SESD-2222
SPRING 2024
Madiha Yousaf Malik
[email protected]Office: Cabin #5, C-Block
OFFICE HOURS: Monday : 10:00 AM- 01:00 PM
Tuesday: 10:00 AM- 01:00 PM
Software Design
Software Design
What is Design?
Why Design is so important?
Levels of Design
The Design Process
What is Design?
Design is the creation of a plan or convention for the
construction an object or the system.
What is Design?
Another definition for design is a roadmap or a strategic
approach for someone to achieve a unique expectation. It
defines the specifications, plans, parameters, costs, activities,
processes and how and what to do within legal, political, social,
environmental, safety and economic constraints in achieving that
objective.
Software Design
There are two ways of constructing a software design: One way is to
make it so simple that there are obviously no deficiencies, and the
other way is to make it so complicated that there are no obvious
deficiencies.”
- C.A.R. Hoare
Software Design
Requirements specification was about the WHAT the system will do
Design is about the HOW the system will
perform its functions.
Design provides the overall decomposition of the system
Design allows to split the work among a team of developers
Design also lays down the groundwork for
achieving non-functional requirements (performance,
maintainability, reusability, etc.)
Design takes target technology into account (e.g., database design,
etc.)
Why Design is so Important?
Design it so that it connects with the end-user
Levels of Design
Two basic Levels of Design:
Architectural design (also: high-level design)
the overall structure main modules and their connections
design that covers the main use-cases of the system
Addresses the main non-functional requirements(e.g., throughput,
reliability)
hard to change
Note: A high-level design document will usually include a high- level
architecture diagram depicting the components, interfaces and
networks that need to be further specified or developed.
Levels of Design
Two basic Levels of Design:
Detailed design (also: low-level design)
the inner structure of the main modules
may take the target programming language into account
detailed enough to be implemented in the programming language
Top-Down vs Bottom-Up Design
Top-Down Design Bottom-Up Design
Recursively partition Assemble, adapt, and
problem into smaller sub- extend existing solutions to
problems fit the problem.
Continue until tractable
solutions found
Note: Not practical for large
system in its pure form
Software Architecture
• Software Architecture
What is Architecture?
Why Architecture is
important?
Software Architecture
12
What is Architecture?
Architecture (ANSI/IEEE 1471-2000)
• The fundamental organization of a system embodied in its
components, their relationships to each other, and to the
environment, and the principles guiding its design and
evolution
13
* Reference [5]
Architecture (Cont...)
Architecture is: Architecture is not:
• All about communication. • About development.
• What ‘parts’ are there? • About algorithms.
• How do the • About data structures.
‘parts’ fit together?
14
Why Architecture is important?
• Architecture “constitutes a relatively small, intellectually graspable model of how the
system is structured and how its components work together” -- L. Bass
• Representations of software architecture are an enabler for communication between
all parties (stakeholders) interested in the development of a computer-based system.
15
* Reference [6]
Software Architecture
Software Architecture (Eoin Woods)
“Software architecture is the set of design decisions which, if made incorrectly, may
cause you project to be cancelled.’
A software architecture defines:
• The components of the software system
• How the components use each other’s functionality and data
• How control is managed between the components
16
Software Design Vs Architecture
17
What is Software Architecture?
• A software architecture is typically a set
of design decisions to address
non-functional
various requirements
and attributes of a software
system/application.
• It primarily focuses on aspects such as
performance, reliability, scalability,
testability, maintainability and various
other attributes, which can be key both
structurally and behaviourally of a
software system.
18
* Reference [7]
Software Design Vs Architecture
• Grady Booch says: "All architecture is design but not all
design is architecture".
• Software architecture deals with high level concepts without
regard to any implementation details. Software design on the
other hand takes high level concepts and applies concrete
details so that software can be implemented.
19
Software Design Vs Architecture
• The architecture of a system is its 'skeleton'. It's the
highest level of abstraction of a system. For example:
How do modules interact with each other.
While
Software design is about designing the individual modules
/ components. What are the responsibilities,
functions, of module x? Of class Y?
• So in short, Software architecture is more about the design of
the entire system, while software design emphasizes on module
/ component / class level.
20
21 Engineering Problem Solving
22 Activity
The problem specification is as follows: there are six equal matches; connect each match to form four
equilateral triangles.
23
24 Context of software design: Software
Development Life Cycle (SDLC)
25 Why study Software Engineering Design ?
Systems are increasingly dependent on software components e.g. microwave oven, washing
machine, cars etc. increased complexity because of embedded software
Maintaining reliability in software-intensive systems is very difficult
Way study Software Engineering Design .. Famous software Bugs
26 History of software bugs
Software encountered notorious bugs that were the cause of
financial lose and deaths of many people.
i. Ariane 501
On 4 June 1996, the Ariane 501 satellite launch failed terribly 40
seconds after initiation of the flight sequence, incurring a direct
cost of approximately $370 million
ii. The Millennium Bug, or Y2K
Two digits were used to show the date, e.g. 98 instead of 1998,
the year 2000 could only be represented as ’00′, which might
confuse computers into thinking it meant the year 1900
27 Why study Software Engineering Design
The reasons for studying software engineering design can be described using a :
1. Product development perspective
2. Project management perspective.
28 Product Development Perspective
designs form the foundation for all other software construction activities create models
that represent the structure and behavior of the software system
modularization, cohesiveness, and coupling, are all born in the design phase
For complex tasks, abstractions and encapsulation are used in software design as means to
provide a systematic approach for problem solving
software designs are reusable
29
Project Management Perspective
Changing requirements, tight schedules, cost constraints, high expectations for software quality etc.
Software design helps to accommodate changes to the requirements or system updates, therefore
minimizing impact on schedule, cost, and quality.
Helps in tasks allocation to human resources in efficient way
30 Software Design Challenges
Requirements Volatility
Process
Technology
Ethical and Professional Practices
Managing Design Influences
Stakeholders
Development Organization’s Structure
31 Roles Of The Software Designer
References
1. http://java.dzone.com/articles/challenges-requirements
2. http://eduhunch.com/why-design-is-the-most-important- factor-for-future-
products/
3. http://www.informationweek.com/mobile/mobile-devices/10- best-and-worst-
cellphones-of-all-time/d/d- id/1109416?page_number=6
4. http://en.wikipedia.org/wiki/Sustainable_design
5. http://en.wikipedia.org/wiki/IEEE_1471
6. Software architecture in practice by Len Bass, Clements, Rick
Kazman Paul
7. http://www.prowareness.com/blog/software-architecture/
8. Chapter 1: “software engineering design, theory and practice by Carlos -E-Otero
”
32