You are on page 1of 27

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.
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.
• The design problem statement produced during the problem analysis
step should identify the people, other systems, and devices which are
collectively called agents.
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 on 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.
Software Design Levels or process
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.
• The architectural design adds important details ignored during the
interface design. Design of the internals of the major components is
ignored until the last phase of the design.
• Detailed Design:
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
Objectives of Software Design
• Correctness:Software design should be correct as per requirement.
• Completeness:The design should have all components like data
structures, modules, and external interfaces, etc.
• Efficiency:Resources should be used efficiently by the program.
• Flexibility:Able to modify on changing needs.
• Consistency:There should not be any inconsistency in the design.
• Maintainability: The design should be so simple so that it can be
easily maintainable by other designers.
Principles of Software Design:
1. Problem Partitioning
• For small problem, we can handle the entire problem at once but for
the significant problem, divide the problems and conquer the
problem it means to divide the problem into smaller pieces so that
each piece can be captured separately.
2. Abstraction
• An abstraction is a tool that enables a designer to consider a
component at an abstract level without bothering about the internal
details of the implementation. Abstraction can be used for existing
element as well as the component being designed.
i. Functional Abstraction
• A module is specified by the method it performs.
• 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.
ii. Data Abstraction
• Details of the data elements are not visible to the users of data. Data
Abstraction forms the basis for Object Oriented design approaches.
iii. Modularity
• Modularity 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.
• It is the only property that allows a program to be intellectually manageable.
Single large programs are difficult to understand and read due to a large
number of reference variables, control paths, global variables, etc.
Strategy of Design
• A good system design strategy is to organize the program modules in such a
method that are easy to develop and latter too, change.
• The most commonly utilized software design strategy involved decomposing the
design into functional components with system state information held in a shared
data area.
The design strategies are:
1. Functional design The system is designed as of a functional viewpoint starting
from with a high level view and progressively refining this into a more detailed
design. The system state is centralised as well as shared between the functions
operating on that state.
2. Object-oriented design: The system is observation as a collection of objects
rather than as functions. Object-oriented design is on the basis of idea of
information hiding. In a object-oriented design the system position is decentralized
and each object manages its own state information.
To design a system, there are two possible approaches:
• Top-down Approach
• Bottom-up Approach
1. Top-down Approach: This approach starts with the identification of
the main components and then decomposing them into their more
detailed sub-components.
Advantages:
The main advantage of top down approach is that its strong focus on
requirements helps to make a design responsive according to its
requirements.
• Bottom-up Approach: A bottom-up approach begins with the lower
details and moves towards up the hierarchy, as shown in fig. This
approach is suitable in case of an existing system.

Advantages:
The economics can result when general solutions can be reused.
It can be used to hide the low-level details of implementation and be
merged with top-down technique.
Characteristics of Good Software Design
1. Operational Characteristics:
These are functionality based factors and related to ‘external quality’ of software. Several
operational characteristics are:
a. Correctness:
A good software should be correctly implement all the functionalities of the system.
b. Understandability:
A good design of software should be easily understandable.
c. Efficiency:
A good software must be efficient. achieving maximum productivity with minimum wasted
effort or expense.
d. Reliability:
A good design of software should be reliable there not have any error or defect.
e. Security:
The software should not have any ill effect on data keep data secure from external threats.
2. Transitional characteristics:
a. Reusability:
If you able to use source code in software program that should be
change or up grade time to time according customer feedback.
b. Portability:
A good software design should be portable that means software
can be able to perform at any platforms.
3. Revision characteristics:
a. Maintainability: A good design should be easy to change. This is an
important requirement, since change requests usually keep coming from the
customer even after product release.
b. Flexibility: Good software design should be flexible.
d. Extensibility: Good software design should be able to increase the
functionality.
d. Scalability: Software should be scalable. i.e to handle the load from
the user.
e.g. one day a man goes to a restaurant and ordered the food and have
it the food was so tasty and he appreciated the work of the restaurant
and one day the same man went with khali to the same restaurant now
you can imagine khaliordered lots of foods here the food was not
enough and the service also goes slow.
Now you can say that the restaurant was not scalable because it
cannot manage the food and service of khali
e. Testability:
Software Design Concepts:
• Concepts are defined as a principal idea or invention that comes in
our mind or in thought to understand something.
• The software design concept simply means the idea or principle
behind the design.
• It describes how you plan to solve the problem of designing software,
the logic, or thinking behind how you will design software.
• It allows the software engineer to create the model of the system or
software or product that is to be developed or built.
• The software design concept provides a supporting and essential
structure or model for developing the right software.
• Abstraction- hide Irrelevant data
• Modularity- subdivide the system
• Architecture- design a structure of something
• Refinement- removes impurities
• Pattern- a repeated form
• Information Hiding- hide the information
• Refactoring- reconstruct something
What is Software Architecture Design?

• Software architecture design is a representation of system which aids


in the understanding of how the system will behave.
• It is a structured framework used to conceptualize software
elements, relationships and properties.
• Software architecture is used for defining and structuring of a
solution which connects technical and operational requirements.
• software architecture design includes major factors such as, business
strategy, quality, human resource, software design, environment.

It optimizes the attributes which involve a series of decisions such as,


security, performance and manageability. These decisions impact the
application quality, maintenance, performance and overall success.
Why is Software Architecture Design important?

• A software should be designed with consideration for the user, system and the
business goals.
• Software architecture considers a design for software to implement its structure
according to its rules and requirements.
• Software architecture manifests the earlier design decisions governing the system
to be built and can be analyzed.
• Software architecture considers the communication among stakeholders for
mutual understanding, negotiation and agreement.
• Software architecture constitutes transferable abstraction of a system and can
promote large scale reuse.
• It provides a common language in which different concerns can be expressed.
• Software architecture focuses on how the major elements and components within
an application are used or interacted within the application.
Goals of Software Architecture Design

• Software architecture design improves the common quality attributes


such as performance, security and manageability.

Good design and architecture reduces the business risks and is


flexible to handle the changes which occur over time in hardware and
software technology.
The important features of a good
architecture are as follows:
• An architecture should try to address the requirements of several
stakeholders.
• It should handle both the functional and quality requirements.
• It should realize all of the use cases, scenarios and hide implementation
details.
Following are the types of software architecture.
1. Business Architecture
2. Application Architecture
3. Information Architecture
4. Information Technology Architecture
1. Business Architecture
Business architecture defines the strategy of business, governance, organization
and key business processes within an enterprise.
This type of architecture focuses on the analysis and design of business processes.
2. Application Architecture
Application architecture serves as the blueprint for individual application system,
their interactions and relationships to the business processes of the organization.
3. Information Architecture
Information Architecture defines the logical and physical data assets and data
management resources.
4. Information Technology Architecture
IT architecture defines the hardware and software building blocks that make up the
overall information system of the organization.
Software Architecture Design Process

• A good system should be designed with proper consideration for the


user, IT infrastructure and business goals.
Following are the steps to compose the basic architecture design
process.

A. Recognize the Problem


B. Estimate the Architecture Design
C. Modify the Architecture Design
A. Recognize the Problem
Recognizing the problem is the most critical step of software architectural
design process, because it affects the quality of the design that follows.
Without recognizing the problem, it is not possible to clear the doubts or to
create an effective solution.
B. Estimate the Architecture Design
In this step, it evaluates the architecture correspondence to quality attribute
requirements.
If all the quality attributes are estimated as per the required standard then
architectural design process is finished.
C. Transform the Architecture Design
If all the quality attributes are not estimated as per the required standard
then the third phase of software architecture design is entered that is
transformation of architecture design.

You might also like