UNIT 1
Software Design Foundations
CPE 2201: Software Design
elfabian © 2025
What is software design?
▪ An iterative process through which requirements are
translated into a “blueprint” for constructing or
developing the software. Initially, the “blueprint”
depicts a holistic view of the software.
▪ A process to transform user requirements into some
suitable form, which helps the programmer in
software coding and implementation.
What is software design?
▪ Software design is the first step in SDLC (Software Design
Life Cycle), which moves the concentration from problem
domain to solution domain. It tries to specify how to fulfill
the requirements mentioned in SRS.
▪ Requirements specification was about WHAT the system
will do.
▪ Design is about HOW the system will perform its
functions.
Definition and Purpose of Software Design
▪ Definition:
▪ Software design is the process of defining the
architecture, components, interfaces, and other
characteristics of a software system.
▪ Purpose:
▪ To translate requirements into a blueprint for building the
software.
▪ Ensure clarity, maintainability, scalability, and robustness.
▪ Serve as a guide for developers during implementation.
▪ Importance:
▪ Ensures clarity, maintainability, and scalability of software
systems.
DALL·E 2025-01-21 22.37.22 - A professional flowchart illustrating the software design process steps. The flowchart includes the following stages_
Requirements Analysis (depicted
What is design?
What is design?
Software Design
▪ How to implement the what.
▪ Requirements Document (RD) is starting point.
▪ Software design is a highly-creative activity.
▪ Good designers are worth their weight in gold!
▪ Highly sought after, head-hunted, well-paid.
▪ Experience alone is not enough:
▪ creativity, “vision”, all-around brilliance required.
Software Design
▪ Some consider software design to be a “black art”:
▪ difficult to prescribe how to do it
▪ hard to measure a good design objectively
▪ “I know a good design when I see it.”
The Software Challenge
▪ People may come and go, but software may remain
▪ A software product is often expected to be used for an
extended period of time by someone who did not write
the program and who is not intimately familiar with its
internal design
▪ Software may evolve
▪ New features may be added, environments may change,
so initial specification may be incomplete
The Software Specification Challenge
▪ Software specification is not easy
▪ It should be generated at the beginning of project and
maintained up-to-date while the software goes through
changes
▪ It should be clarified through extensive interaction
between the users and the system analyst, and then
approved by the users
▪ It should be clear and understandable to any programmer
Role of Software Design in the SDLC
• Software Development Lifecycle (SDLC):
• Phases: Requirements analysis, design, implementation,
testing, deployment, and maintenance.
• Design Phase Responsibilities:
• Bridge the gap between requirements and implementation.
• Define the system’s structure and behavior.
• Set the foundation for quality assurance and user satisfaction.
• Outcomes of the Design Phase:
• Architectural design diagrams.
• Detailed design specifications.
Bridge Between Requirements and Code:
▪ Translates user needs into technical
solutions.
Influences Project Success:
▪ Poor design = higher costs and failures.
Foundation for Testing and Maintenance:
▪ Good design facilitates debugging and
scalability.
SDLC Model
▪ A framework that describes the activities performed
at each stage of a software development project.
▪ To help understand and implement the SDLC phases
various SDLC models have been created by software
development experts, universities, and standards
organizations.
Reasons for Using SDLC Models
▪ Provides the base for project planning, estimating &
scheduling.
▪ Provides framework for standard set of terminologies,
activities & deliverables.
▪ Provides mechanism for project tracking & control.
▪ Increases visibility of project progress to all stakeholders.
Overview of Software Development
Methodologies
Waterfall Model:
▪ Sequential approach with distinct phases.
▪ Advantages: Clear structure, well-documented stages.
▪ Drawbacks: Limited flexibility, challenging to
accommodate changes.
V-Shaped Model:
▪ Extension of the Waterfall model with a focus on
testing.
▪ Advantages: Emphasizes validation and verification at
every stage.
▪ Drawbacks: Rigid structure, not suitable for iterative
processes.
https://www.bdtask.com/blog/assets/plugins/ckfinder/core/connector/php/uploads/images/waterfall%20
model(1).jpg
https://www.bdtask.com/blog/assets/plugins/ckfinder/core/connector/php/uploads/images/diagram-of-
v-model.jpg
Overview of Software Development
Methodologies
▪ Prototyping Model:
▪ Focuses on creating prototypes to refine
requirements.
▪ Advantages: Improves requirement clarity, enhances
user involvement.
▪ Drawbacks: Risk of scope creep and additional
development effort.
▪ Rapid Application Development (RAD):
▪ Emphasizes quick development and iteration.
▪ Advantages: Faster delivery, adaptability to user
feedback.
▪ Drawbacks: Requires skilled teams and stakeholder
commitment.
https://i0.wp.com/notepub.io/wp-content/uploads/2021/04/prototyping_process-1.png?resize=569%2C356&ssl=1
https://images.squarespace-cdn.com/content/v1/634da32184270315fa0a94f4/1670708234911-JZS8YFMT3R2B333AL4AB/RAD.bg.png
Overview of Software Development
Methodologies
Spiral Model:
▪ Combines iterative and Waterfall approaches with risk
assessment.
▪ Advantages: Flexible, suitable for large and complex
projects.
▪ Drawbacks: High cost, requires expertise in risk
management.
Agile Development:
▪ Iterative and incremental approach.
▪ Advantages: Flexibility, customer collaboration, and
adaptive planning.
▪ Drawbacks: Requires constant stakeholder
involvement, potential scope creep.
https://www.bdtask.com/blog/assets/plugins/ckfinder/core/connector/php/uploads/images/what%20is%20spiral%20model%20for%20software%20
development.jpg https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSoGWpRRfHoeHdDY2bh1-Sy3JrkMnbHYtznWw&s
Overview of Software Development
Methodologies
Scrum Framework:
▪ A subset of Agile focusing on small, cross-
functional teams.
▪ Key elements: Sprints, roles (Product
Owner, Scrum Master), and artifacts
(Product Backlog, Sprint Backlog).
Choosing a Methodology:
▪ Depends on project size, complexity,
team expertise, and stakeholder
involvement.
https://miro.medium.com/v2/resize:fit:1400/1*e1UuaThtsV0qp28aln0DMw.jpeg
Top-Down vs Bottom-Up Design
▪ Top-down Design:
▪ Start with a coarsely-grained view of system, and
repeatedly refine components until you have concrete
sub-components.
▪ Bottom-up Design:
▪ Start with existing components and “glue” them together
to get what you want.
Top-Down vs Bottom-Up Design (Cont’d)
▪ Top-down is the “ideal” of most design methods, but
it’s rarely followed absolutely:
▪ some branches of development are expanded before
others are even started
▪ doesn’t adequately account for reuse of existing
components:
▪ COTS products, libraries, previous versions of the same system.
Key Characteristics of Good Design
▪ Clarity: Easy to understand for developers and
stakeholders.
▪ Maintainability: Facilitates updates and bug fixes.
▪ Scalability: Supports growth in users, features, or
workload.
▪ Examples of Good Design: Modular code, use of
design patterns.
Checklist of good design characteristics
▪ Clear and simple code structure.
▪ Modular and reusable components.
▪ Well-documented code and architecture.
▪ Proper error handling and logging mechanisms.
▪ Flexibility to adapt to future changes.
▪ Efficient use of resources.
Review of Object-Oriented Programming (OOP)
Concepts
Key OOP Principles:
• Inheritance:
• Mechanism to create a new class from an existing one.
• Promotes code reuse and hierarchical classification.
• Encapsulation:
• Restricts direct access to an object’s data.
• Protects the internal state and provides controlled access via methods.
• Polymorphism:
• Ability for different classes to be treated as instances of the same superclass.
• Supports method overriding and dynamic method invocation.
Importance in Design:
• Encourages good design practices through modularity and abstraction in software
systems.
Summary
▪ Software design is a critical step in transforming requirements into
actionable plans.
▪ Software design is essential for building effective and efficient
applications.
▪ It plays a pivotal role in the software development lifecycle.
▪ Good design ensures clarity, maintainability, and scalability.
▪ Core OOP principles (inheritance, encapsulation, and polymorphism)
are essential for creating robust designs.
▪ OOP principles form the backbone of modern software design.
▪ Understanding different development methodologies helps in
selecting the best approach for a given project.
https://scontent.fceb1-3.fna.fbcdn.net/v/t1.6435-9/67379560_540443319824005_4312672852001161216_n.jpg