Software Design (Finals) Flashcards
a mechanism to transform user requirements into some suitable
form, which helps the programmer in software coding and implementation.
Software design
It deals
with representing the client’s requirement, as described in SRS
Software design
Objectives of Software Design
Correctness
Completeness
Efficiency
Flexibility
Consistency
Maintainability
are concerned with providing means to handle the complexity of the design process effectively.
Software design principles
the goal is to divide the problem into manageable pieces.
Problem Partitioning
Two Types of Abstraction
Functional Abstraction
Data Abstraction
The Software Design Principles
Problem Partitioning
Abstraction
Modularity
Top-down and Bottom-up Approach
achieved by developing
functions that perform only one kind of task and do not excessively interact with other modules.
Functional Independence
a tool that enables a designer to consider a component at an
abstract level without bothering about the internal details of the implementation.
Abstraction
The details of the algorithm to accomplish the functions are not visible to the
user of the function.
* Functional abstraction forms the basis for Function oriented design approaches.
Functional Abstraction
specifies to the division of software into separate modules which are
differently named and addressed and are integrated later on in to obtain the
completely functional software.
Modularity
Details of the data elements are not visible to the users of data. It forms the basis for Object Oriented design approaches.
Data Abstraction
only property that allows a program to be intellectually manageable.
Modularity
It measures the relative function strength of a module.
Cohesion
It measures the relative interdependence among modules.
Coupling
suggests that modules
can be characterized by the design decisions that protect from the others, i.e., In other words, modules should be specified that data include within a module is inaccessible to other modules that do not need for such information.
Information hiding
2 Strategy of Design
Top-down Approach
Bottom-up Approach
explains a system’s core ideas and characteristics with respect to its relationships, environment, and other design principles.
Software architecture
Additional Software Design Principles
- DRY (Don’t Repeat Yourself)
- Encapsulation Principle
- Principle of Least Astonishment (PoLA)
- You Aren’t Gonna Need It (YAGNI)
- Keep It Simple, Stupid (KISS)
Different Architectural Patterns
Event Driven Architecture
Client-Server Architecture
Layered Pattern
Microservices
Monolithic
MV* Pattern
- Defines the high-level structure and organization of a software system.
- focus on the system’s macro-level aspects
and establish a framework for the design and implementation of the entire
application.
Software Architecture Pattern
An older approach where all components of an application are tightly integrated into a single codebase and are deployed together. While less common now, it’s still seen in some legacy systems.
Monolithic
Structures applications as a collection of small, independently deployable services, enabling scalability and rapid development. Common in cloud-based systems.
Microservices
It is an umbrella term that encompasses variants of this architecture pattern, and they differ in terms of the type and level of coupling between the components.
MV* Pattern
They provide tested answers to common design issues, helping developers reduce code structure and improve maintainability.
Design patterns
- general, recurring solution to a commonly encountered problem in software design that is utilized in software engineering.
- It is not a comprehensive design that can be implemented in code straight immediately.
Design Pattern
Types of Design Pattern
Creational Design Patterns
Structural Patterns
Behavioral Design Patterns
- Attempt to generate things in a manner appropriate to the situation.
- Are concerned with the generation of objects, ensuring that they are formed in a
situationally appropriate manner
Creational Design Patterns
*Concerned with object composition, specifying how to combine items to achieve
additional functionality
* It is a formula for combining many objects and classes to create a larger structure.
* It’s similar to building a house based on a blueprint.
Structural Patterns
These patterns help resolve typical issues with how parts of codeshare work, disguise
what they do, and stay organized.
Behavioral Design Patterns
A stage where software developers define the technical details of the product.
Design Phase in SDLC
All the details about the system design phase are mentioned in this document
software requirement
specification document.
It includes a brief description and the name of each module.
High-Level Design (HLD)
It includes the functional logic of the modules. You have to collect the details of the interface, database tables, and type and size.
Low-Level Design (LLD)
Provides business-related information, reviews materials prepared by the team,
and approves project milestones.
Client
Leads the project and makes decisions to ensure a successful outcome (project organization, task allocation, budget planning, progress monitoring,
and others).
Project manager
Ensures that the user’s interaction with the product is logical by creating
user-centered product interface designs
UX designer
Helps clients translate their requirements into product features, create an original code for the product
Software developer
Creates product requirements for UX designers and reviews the designs they make
Business analyst
basic blueprints that help teams align on requirements, keeping UX design
conversations focused and constructive.
Wireframes
Involved in analyzing requirements and testing product designs to ensure a lack of performance issues.
Quality assurance (QA) specialist
prioritizes speed, so it’s limited in scope—but even a quick mockup
can stress-test and improve a product design.
Rapid prototyping
Create mock-ups of a design concept or flow, keeping your users’ needs and
company’s goals in mind.
Build
Test your prototype with target users and key stakeholders to learn whether it
meets expectations.
Review
Adjust the prototype based on the feedback you receive
Refine
It is one of the most common types of architecture in software engineering. Organizes software into horizontal layers, each responsible for distinct functionalities like presentation, business logic, and data storage.
Layered Pattern
Separates application into clients (user interfaces) and servers (data processing) to manage data sharing and user interactions. Ideal for distributed systems like web-based services.
Client-Server Architecture
Emphasizes communication between components through asynchronous events, triggered by user actions or data changes. Used in real-time systems and graphical user interfaces.
Event Driven Architecture