You are on page 1of 30

Software Design and

Architecture

Arranged by :
Topics
1 Introduction Software design and architecture

2 Principles of good software design.


Correctness and Robustness
Flexibility, reusability and efficiency

3 Introduction to software architecture

4 Software architectural design


Software architectural attributes
Attribute types
Trade-off of attributes and choices

5 Software Architectural Styles


Data flow architctures
Layered
Event-based
Data-centered
MVC
Multi-tier distributed
Service Oriented
• A staircase that leads right
into a wall!!!
• A door that would drop you 10 feet down!
• An impossible to use
ATM machine
• Software are no different.

• For a useful software, it has to be ‘engineered’; which involves


giving specific attention to every phase of software
development.
Problems in software development

• Common issues
– The final software does not fulfill the needs of the customer
– Hard to extend and improve: if you want to add a functionality
later its mission impossible
– Bad documentation
– Bad quality: frequent errors, hard to use, ...
– More time and costs than expected
Software Design
What is Design?
• Design is the first and one of the most important step in
the development phase for any engineered product or
system.

• Design is about HOW the system will perform its


functions.
Software Design

Software Design:

• Software design refers to the process of creating a plan or


blueprint for software development. It involves defining the
structure, behavior, and functionality of the software system.
• The software design process helps developers to understand
the requirements of the software and create a solution that
meets those requirements.
Software Design - Simplified

Requirements specification was about the *WHAT* the


system will do

Design is about the HOW the system will perform its functions
• provides the overall decomposition of the system
• allows to split the work among a team of developers
• also lays down the groundwork for achieving non-functional
requirements (performance, maintainability, reusability, etc.)
• takes target technology into account (e.g., kind of middleware,
database design, etc.)
Why Design is important?
• Without a proper design, we risk building an unstable
system
– one that will fail when small changes are made
– one that may be difficult to test
– one whose quality cannot be assessed until late in the software
process, perhaps when critical deadlines are approaching and
much capital has already been invested into the product.
Software Architecture
What is Architecture?

• Simply put, software architecture is the high-level design of a


software system.

• It's the blueprint for how the different components of the


system fit together, interact, and communicate with each
other.
Software Architecture

Software Architecture:

The following are the key elements of software architecture:

• Components: The building blocks of the software system.


• Relationships: The connections between the components.
• Constraints: The limitations or requirements that the system
must adhere to.
• Quality Attributes: The non-functional requirements of the
system, such as performance, reliability, and scalability.
Software Architecture - Simplified
Why is Architecture important ?
• Without a proper architecture, we risk building an unreliable system

• Effective software architecture is essential for the success of any software


project. Here are some key reasons why:

– Scalability: Good software architecture allows you to scale your


software to handle larger workloads by adding more resources, such as
servers, storage, or processing power.
– Maintainability: Good software architecture makes it easier to make
changes and updates to the software, with less risk of introducing bugs
or errors.
– Reusability: Good software architecture allows you to reuse code and
components across multiple projects, reducing development time and
costs.
– Performance: Good software architecture allows you to optimize the
software to run faster and more efficiently, improving user experience
and reducing costs.
Software Architecture Phases
Key principles of software architecture:

• Modularity: Breaking the system down into smaller, independent


parts or modules makes the system easier to understand, test,
and maintain.
• Separation of Concerns: Ensuring that each component of the
system has a clear and specific responsibility reduces complexity
and increases flexibility.
• Abstraction: Hiding the details of the system's implementation
from the outside world makes it easier for other components to
interact with it and for you to change the implementation details
without affecting the rest of the system.
• Standardization: Using common and standardized components
and technologies reduces development time, increases reliability,
and makes it easier to maintain and update the system.
Some Examples
Thank YOU

You might also like