UNIT_III_Design Engineering
UNIT_III_Design Engineering
ENGINEERING
Software Design
◦Software design is a mechanism to transform user
requirements into some suitable form, which helps the
programmer in software coding and implementation.
◦It deals with representing the client's requirement, as
described in SRS (Software Requirement Specification)
document, into a form, i.e., easily implementable using
programming language.
Objectives of Software Design
◦Correctness: A good design should be correct, which means that it
should correctly implement all of the system's features.
◦Efficiency: A good software design should consider resource,
time, and cost optimization parameters.
◦Understandability: A good design should be easy to grasp, which
is why it should be modular, with all parts organized in layers.
◦Completeness: The design should include all components, such
as data structures, modules, and external interfaces, among
others.
◦Maintainability: A good software design should be flexible when
the client issues a modification request.
Software Design Process
three levels or phases of design:
◦Interface Design
◦Architectural Design
◦Detailed Design
Elements of a System
◦Architecture: This is the conceptual model that defines the
structure, behavior, and views of a system. We can use flowcharts
to represent and illustrate the architecture.
◦Modules: These are components that handle one specific task in
a system. A combination of the modules makes up the system.
◦Components: This provides a particular function or group of
related functions. They are made up of modules.
◦Interfaces: This is the shared boundary across which the
components of a system exchange information and relate.
◦Data: This is the management of the information and data flow.
◦Interface Design
◦Interface design is the specification of the interaction
between a system and its environment.
◦This phase proceeds at a high level of abstraction
with respect to the inner workings of the system i.e,
during interface design, the internal of the systems
are completely ignored, and the system is treated as
a black box.
◦Attention is focused on the dialogue between the
target system and the users, devices, and other
systems with which it interacts.
◦Interface design should include the following details:
◦Precise description of events in the environment, or
messages from agents to which the system must respond.
◦Precise description of the events or messages that the
system must produce.
◦Specification of the data, and the formats of the data
coming into and going out of the system.
◦Specification of the ordering and timing relationships
between incoming events or messages, and outgoing
events or outputs.
◦Architectural Design
◦Architectural design is the specification of the
major components of a system, their
responsibilities, properties, interfaces,
and the relationships and interactions
between them.
◦In architectural design, the overall structure of
the system is chosen, but the internal details
of major components are ignored.
◦Issues in architectural design includes:
◦Gross decomposition of the systems into major
components.
◦Allocation of functional responsibilities to
components.
◦Component Interfaces.
◦Component scaling and performance properties,
resource consumption properties, reliability
properties, and so forth.
◦Communication and interaction between
components.
◦ Detailed Design
◦ Detailed design is the specification of the internal elements of all major
system components, their properties, relationships, processing,
and often their algorithms and the data structures.
◦ The detailed design may include:
◦ Decomposition of major system components into program units.
◦ Allocation of functional responsibilities to units.
◦ User interfaces.
◦ Unit states and state changes.
◦ Data and control interaction between units.
◦ Data packaging and implementation, including issues of scope and
visibility of program elements.
◦ Algorithms and data structures.
Software Design Concepts:
◦Abstraction (Hide Irrelevant data)
◦Modularity (subdivide the system)
◦Architecture(design a structure of something)
◦Refinement(removes impurities)
◦Design Patterns (a Repeated form)
◦Information/Data Hiding(Hide the Information)
◦Refactoring(Reconstruct something)
Abstraction
◦One of the fundamental concepts of object-oriented
programming (OOP) languages is an abstraction.
◦Its primary purpose is to deal with complexity by
concealing internal details from the user.
◦This allows the user to build more complicated logic on
top of the offered abstraction without having to understand
or even consider all the hidden complexity.
Modularity
◦Modularity refers to breaking a system or project into smaller sections to
lessen the system's or project's complexity.
◦Similarly, modularity in design refers to the division of a system into smaller
elements that can be built independently and then used in multiple systems to
execute different purposes.
◦Sometimes to deal with Monolithic software (means "composed all in one
piece or too large), which is difficult to grasp for software engineers, it is
required to partition the software into components known as modules. As a
result, modularity in design has become a trend that is also essential.
Architecture
◦A system's software architecture represents the design decisions
linked to the general structure and behavior of the system.
◦It specifies how components of a software system are constructed,
as well as their relationships and communication.
◦It acts as a software application blueprint and a development
foundation for the developer team.
Refinement
◦Refinement means removing any impurities and improving
the quality of something.
◦The software design refinement idea is a process of building
or presenting the software or system in a detailed manner,
which implies elaborating on a system or software.
◦In addition, refinement is essential for identifying and
correcting any possible errors
Design Patterns
◦A Software Design Pattern is a general, reusable solution to a
commonly occurring problem within a given context in software
design.
◦They are templates to solve common software engineering
problems, representing some of the finest practices experienced
object-oriented software engineers utilize.
◦It discusses the problem, the remedy, when to use it, and the
repercussions (the usually bad effect of an event, action, or
decision).
◦It also provides implementation guidance and examples.
Information/Data Hiding
◦Simply put, information hiding implies
concealing information so that an unauthorized
entity cannot access it.
◦In software design, information hiding is
accomplished by creating modules in such a
way that information acquired or contained in
one module is concealed and cannot be
accessible by other modules.
Refactoring
◦Refactoring is the process of reorganizing code without affecting its
original functionality.
◦Refactoring aims to improve internal code by making modest
changes that do not affect the code's exterior behavior.
◦Computer programmers and software developers refactor code to
improve the software's design, structure, and implementation.
◦As a result, Refactoring increases code readability while decreasing
complications. Refactoring can also assist software engineers in
locating faults or vulnerabilities in their code.
Levels of Software Design
Architectural Design:
◦The architecture of a system can be viewed as the overall
structure of the system and the way in which structure
provides conceptual integrity of the system.
◦The architectural design identifies the software as a system
with many components interacting with each other. At
this level, the designers get the idea of the proposed
solution domain.
Preliminary or high-level design:
◦Here the problem is decomposed into a set of
modules, the control relationship among various
modules identified, and also the interfaces among
various modules are identified.
◦The outcome of this stage is called the program
architecture. Design representation techniques used
in this stage are structure chart and UML.
Detailed design:
◦Once the high-level design is complete, a
detailed design is undertaken. In detailed
design, each module is examined carefully to
design the data structure and algorithms.
◦The stage outcome is documented in the form
of a module specification document.
◦Software Architecture :
Software Architecture defines fundamental organization of a
system and more simply defines a structured solution. It
defines how components of a software system are
assembled, their relationship and communication between
them. It serves as a blueprint for software application and
development basis for developer team.
◦A software architecture defines structure of a system.
◦A software architecture defines behavior of a system.
◦A software architecture defines component relationship.
◦A software architecture defines communication structure.
◦A software architecture balances stakeholder’s needs.
◦A software architecture influences team structure.
◦A software architecture focuses on significant elements.
◦A software architecture captures early design decisions .
◦Importance of Software Architecture :
Software architecture comes under design phase of software development life
cycle. It is one of initial step of whole software development process. Without
software architecture proceeding to software development is like building a
house without designing architecture of house.
◦So software architecture is one of important part of software application
development. In technical and developmental aspects point of view below are
reasons software architecture are important.
◦Selects quality attributes to be optimized for a system.
◦Facilitates early prototyping.
◦Allows to be built a system in component wise.
◦Helps in managing the changes in System.
◦Advantages of Software ◦Disadvantages of Software
Architecture : Architecture :
◦Provides a solid foundation for ◦Sometimes getting good tools and
software project. standardization becomes a problem
◦Helps in providing increased for software architecture.
performance. ◦Initial prediction of success of
◦Reduces development cost. project based on architecture is not
always possible.
◦Software Architecture –
◦Architecture defines the blueprints of a system. It
serves as a communication and coordination
mechanism for the elements. It designs a structured
solution while keeping the performance, security etc.
in check. It impacts the quality, maintainability and
overall performance of the system.
◦ Software Design –