0% found this document useful (0 votes)
9 views30 pages

Design Concepts

Software design is the process of transforming user requirements into a high-quality system, involving principles and practices that encompass architecture, data structures, and interfaces. It is conducted by software design engineers and focuses on creating a blueprint for coding, emphasizing objectives like correctness, simplicity, and modularity. Key concepts include abstraction, modularity, and design patterns, which help in achieving low coupling and high cohesion for effective software development.

Uploaded by

juirsakpal13
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views30 pages

Design Concepts

Software design is the process of transforming user requirements into a high-quality system, involving principles and practices that encompass architecture, data structures, and interfaces. It is conducted by software design engineers and focuses on creating a blueprint for coding, emphasizing objectives like correctness, simplicity, and modularity. Key concepts include abstraction, modularity, and design patterns, which help in achieving low coupling and high cohesion for effective software development.

Uploaded by

juirsakpal13
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

SOFTWARE DESIGN CONCEPTS

Software Design
What it is?
• Software design encompasses the set of principles, concepts and
practices that lead to the development of a high-quality system or
product.
• It is the place where creativity rules- where stakeholders
requirements, business needs and technical considerations all come
together in the formulation of a product or system.
• Design creates a representation or model of a software.
• It provides detail about software architecture, data structures,
interfaces and components that are necessary to implement the
system.
Software Design
• Thus, in short, it is a process to transform user requirements into
some suitable form, which helps the programmer in software coding
and implementation.
• It tries to specify how to fulfill the requirements mentioned in SRS
Designing means deciding:
• How the system will be organized
• What modules will exist
• How modules will interact
• What data structures will be used
• What algorithms will be applied
Software Design
Who does it?
• Software design engineers conduct each of the design tasks.

During software design, developers create:


• System architecture
• Module descriptions
• Algorithms and logic
• Database structure
• User interface design
Design vs Coding

Basis Design Coding

Definition Blueprint of software Implementation of blueprint

Phase Before coding After design

Focus Structure & logic Writing instructions

Output Diagrams, models Executable program

Error Impact Early mistakes costly later Easier to fix if design is correct
Objectives of Software Design
1. Correctness
2. Simplicity
3. Modularity
4. Efficiency
5. Flexibility
6. Reliability
7. Maintainability
8. Reusability
9. Security
Software Design Process
Software Design Process
• It can be divided into 3 levels of phase of design:
1. Interface Design: Focused on interaction between the system and
the users devices. Scenario and behavioral based diagrams used.
Not focus on internal structure.
2. Architectural Design: Focused on major components of system their
responsibilities, properties, interfaces, relationships and
interactions between them. Class based and flow based diagram
used.
3. Detailed Design: Focused on internal elements of all major system
components, their properties, relationships, processing, algorithms
and data structures.
Software Quality Guidelines
In order to evaluate the quality of a design representation, members of
software team must establish technical criteria for good design.
1. A design is generated using the recognizable architectural styles and
compose a good design characteristic of components and it is
implemented in evolutionary manner for testing.
2. A design of software must be modular i.e. the software must be
logically partitioned into sub elements.
3. In design, the representation of data, architecture, interface and
components should be distinct
4. A design must carry appropriate data structure and recognizable
data patterns
Software Quality Guidelines
5. Design components must show the independent functional
characteristics.

6. A design creates an interface that reduce the complexity of


corrections between the components with external environment.

7. A design must be derived using the repeatable method.

8. The notations should be used in design which can effectively


communicate its meaning.
Software Quality Attributes
• Hewlett-Packard developed a set of quality attributes called as
“FURPS”. It represents a target for all software design.

1. Functionality: It evaluates the feature set and capabilities of the


program
2. Usability: It is accessed by considering the factors such as human
factor, consistency and documentation.
3. Reliability: It is evaluated by measuring parameters like frequency
and security failure, output result accuracy, recovery from failure
and program predictability.
Software Quality Attributes
4. Performance: It is measured by considering processing speed,
response time, resource consumption, throughput and efficiency

5. Supportability: It combines the ability to extend the program,


adaptability, serviceability, testability, compatibility and configurability
are the terms using which a system can be easily installed and found
the problem easily.
• So, these quality attributes must be considered as design
commences, not after the design is complete and construction has
begun.
Assessing Design Quality- Technical Review
• Design is important because it allows a software team to assess the
quality of software before it is implemented.
• But Software can’t be tested because there is no executable software
to test. Then how do we assess quality during design?
Technical Reviews (TRs)
• It is a meeting conducted by members of software team.
• The review leader plans the meeting, sets agenda and runs meeting.
• Recorder takes notes so that nothing is missed.
• Producer is the person whose work product is been reviewed.
• Review team determines whether further actions are required on the
part of producer or approves final design model
Design Concepts
• The beginning of wisdom for software engineer is to recognize the
difference between getting a program work and getting it right.
Design concepts provides the necessary framework for getting it right.
• Simply means, the idea or principle behind the design.
• It describes how you plan to solve the problem of designing software.
• It also shows the logic or thinking behind how you will design
software.
• The software design concept for developing the right software
provides a supporting and essential structure or model.
1. Abstraction
• Abstraction is used to hide background details or unnecessary
implementation about the data, so that users see only required
information.
• Type1: Procedural Abstraction:
• There is collection of subprograms.
• One is hidden group another is visible group of functionalities.
• Type2: Data Abstraction
• Collection of data that describe data objects
• Show representation data and hide manipulation data.
2. Architecture
• It is the structure of program modules where they interact with each
other in a specialized way.

• Structural properties: Architectural design represents different types


of components, modules, objects and relationship between these.
• Extra-Functional properties: How design architecture achieve
requirements of performance, capacity, reliability, security,
adaptability and other system characteristics.
• Families of related systems: The architectural designs should draw
repeatable patterns. They have ability to reuse repeatable blocks.
3. Design Patterns
• Design pattern describes design structure that solves a particular
design problem within a specific context.
• The intent of each design pattern is to provide a description that
enables a designer to determine:

• Whether the pattern is applicable to current work.


• Whether the pattern can be reused
• Whether the pattern can serve as a guide for developing a similar but
functionally or structurally different pattern.
4. Modularity
• Modularity simply means dividing the system or project into smaller
parts, to reduce the complexity of system or project.

• After developing the modules, they are integrated together to meet


the software requirements.

• Modularizing a design helps to effective development, accommodate


changes easily, conduct testing, debugging efficiently and conduct
maintenance work easily.
5. Information Hiding
• Modules should be specified and designed in such a way that the data
structures and algorithm details of one module are not accessible to
other modules
• They pass only that much information to each other, which is required
to accomplish the software functions.
• The way of hiding unnecessary details in modules is refered to as
information hiding.
6. Functional Independence
• It is the concept of separation and related to the concept of
modularity, abstraction and information hiding.
• Criteria1: Coupling
• The degree in which module is “connected” to other module in the
system.
• Low coupling is necessary in good software.
• Criteria 2: Cohesion
• The degree in which module perform functions in inner module in the
system.
• High cohesion necessary in good software.
6. Functional Independence

Good Software Design =

High Cohesion + Low Coupling


7. Refinement

• Refinement is a top-down design approach


• It is a process of elaboration.
• A program is established for refining levels of procedural details
• A hierarchy is established by decomposing a statement of function in
a stepwise manner till the programming language statement are
reached.
8. Refactoring

• Refactoring is the process of changing the internal software system in


a way that it does not change the external behavior of the code still
improves its internal structure.

• When software is refactored the existing design is examined for


redundancy, unused design elements, unnecessary design algorithms,
poorly constructed data, inappropriate data structure or any other
design failure that can be corrected for better design.
9. Object Oriented Design Concepts
Most popular design approach. Different concepts are:
• Abstraction
• Encapsulation
• Polymorphism
• Inheritance
• Class
• Object
Advantage:
• Fast and low cost development and creates a high quality software
Coupling
• The coupling is the degree of dependency between modules in a
software system.
Coupling

• Two modules that are tightly/highly coupled are strongly dependent


on each other.
• Two modules that are loosely coupled are not much dependent on
each other.
• A good design is the one that has Low coupling because modules can
work independently.
• High coupling generates more errors because they share large
amount of data and changes in one module affect others.
Coupling
• Tightly coupled • Loosely coupled
• When two modules are highly dependent on • When modules are independent and
each other, they are called tightly coupled. communicate only through parameters, they are
loosely coupled.
• If one module changes, the other module must
also change. • E.g
• E.g void calculatePrice(int price, int discount)
int discount = 10; // global variable { int finalPrice = price - discount;
void calculatePrice(int price) printf("Final Price: %d", finalPrice);
{ int finalPrice = price - discount; }
printf("Final Price: %d", finalPrice); int main()
} { int price = 500;
int discount = 10;
calculatePrice(price, discount);
}
Types of coupling

• Types of coupling are arranged from highest(worst) to lowest(best)


1. Content Coupling
2. Common Coupling
3. External Coupling
4. Control Coupling
5. Stamp Coupling (Data structure Coupling)
6. Data Coupling
Cohesion
• Cohesion refers to the degree to which the elements within a module
are related to each other.

• In simple words, cohesion measures how strongly the tasks inside a


module belong together.

• A module with high cohesion performs one specific task.


• A module with low cohesion performs many unrelated tasks.
Types of Cohesion

• Coincidental (Worst)
• Logical
• Temporal
• Procedural
• Communicational
• Sequential
• Functional (Best)

You might also like