SEPM Unit3
SEPM Unit3
Data
Dictionary Interface design
Architectural design
Design Model
Control Specification
Figure 3.1: Software Design and Software Engineering
The Design
Process:
Software design is an iterative process through which requirements are translated into a “blueprint” for
constructing the software. Initially, the blueprint depicts a holistic view of software. That is, the design is
represented at a high level of abstraction at level that can be directly traced to the specific system objective and
more detailed data, functional, and behavioral requirements. As design iterations occur, subsequent refinement
leads to design representations at much lower level of abstraction. These can still be trace or requirements, but
the connection is subtler.
DESIGN CONCEPTS AND PRINCIPLES:
Design Principles: -
Software design is both a process and a model. The design process is a sequence of steps that enable the
designer to describe all aspects of the software to be built. It is important to note, however, that the design
process is not simply a cookbook. Creative skill, past experience, a sense of what makes “good” software, and
an overall commitment to quality are critical success factors for a competent design.
The design model is the equivalent of an architect’s plans for a house. It begins by representing the totality of
the thing to be built (e.g., a three-dimensional rendering of the house) and slowly refines the thing to provide
guidance for constructing each detail (e.g., the plumbing layout). Similarly, the design model that is created for
software provides a variety of different views of the computer software. Basic design principles enable the
software engineer to navigate the design process.
Principles for software design, which have been adapted and extended in the following list:
The design process should not suffer from “tunnel vision.”
The design should be traceable to the analysis model.
The design should not reinvent the wheel.
The design should “minimize the intellectual distance” between the software and the problem as it
exists in the real world.
That is, the structure of the software design should (whenever possible) mimic the structure of the
problem domain.
The design should exhibit uniformity and integration.
The design should be structured to accommodate change.
The design should be structured to degrade gently.
The design should be assessed for quality as it is being created, not after the fact.
The design should be reviewed to minimize conceptual (semantic) errors.
Design concepts:
Following issues are considered while designing the software.
Abstraction: “Abstraction permits one to concentrate on a problem at some level of abstraction without
regard to low level detail. At the highest level of abstraction a solution is stated in broad terms using the
language of the problem environment. At lower level, a procedural orientation is taken. At the lowest
level of abstraction the solution is stated in a manner that can be directly implemented.
Types of abstraction: 1. Procedural Abstraction 2. Data Abstraction
Refinement: Process of elaboration. Refinement function defined at the abstract level, decompose the
statement of function in a stepwise fashion until programming language statements are reached.
Modularity: software is divided into separately named and addressable components called modules.
Follows “divide and conquer” concept, a complex problem is broken down into several manageable
pieces.
Client Client
Software Software
Client
Client Software
Software
Data Store
(Repository)
Client
Client Software
Software
Client Client
Software Software
Piper
Filter Filter
Filter
(a) Pipes and Filters
architecture
Call and return Architectures: The program structure can be easily modified or scaled. The
programstructure is organized into modules within the program. In this architecture how modules
call each other. The program structure decomposes the function into control hierarchy where a main
programinvokes number of program components.
Main Fan-out
a b c
d k m n
g
l
e h i p q
o
f Fan -in
j r
Figure 3.4: Call and return architecture
Object-oriented Architecture: The components of a system encapsulate data and the operations that
must be applied to manipulate the data. Communication and coordination between components is
accomplished via message passing.
Operations Operations
Messages Messages
Attributes Attributes
Operations Operations
Application Layer
Utility Layer
Core
Layer
Components
Scenarios
The structure principle: Design should organize the user interface purposefully, in meaningful and
useful ways based on clear, consistent models that are apparent and recognizable to users, putting related
things together and separating unrelated things, differentiating dissimilar things and making similar
things resemble one another. The structure principle is concerned with overall user interface
architecture.
The simplicity principle: The design should make simple, common tasks easy, communicating clearly
and simply in the user's own language, and providing good shortcuts that are meaningfully related to
longer procedures.
The visibility principle: The design should make all needed options and materials for a given task
visible without distracting the user with extraneous or redundant information. Good designs don't
overwhelmusers with alternatives or confuse with unneeded information.
The feedback principle: The design should keep users informed of actions or interpretations, changes
of state or condition, and errors or exceptions that are relevant and of interest to the user through clear,
concise, and unambiguous language familiar to users.
The tolerance principle: The design should be flexible and tolerant, reducing the cost of mistakes and
misuse by allowing undoing and redoing, while also preventing errors wherever possible by tolerating
varied inputs and sequences and by interpreting all reasonable actions.
The reuse principle: The design should reuse internal and external components and behaviors,
maintaining consistency with purpose rather than merely arbitrary consistency, thus reducing the need
for users to rethink and remember.
Start of process
Release
Release
Release
Interface design
Implementation
FUNCTION-ORIENTED DESIGN:
In function-oriented design, the system is comprised of many smaller sub-systems known as functions. These
functions are capable of performing significant task in the system. The system is considered as top view of all
functions.
Function oriented design inherits some properties of structured design where divide and conquer methodology
is used.
This design mechanism divides the whole system into smaller functions, which provides means of abstraction
by concealing the information and their operation. These functional modules can share information among
themselves by means of information passing and using information available globally.
Another characteristic of functions is that when a program calls a function, the function changes the state of the
program, which sometimes is not acceptable by other modules. Function oriented design works well where the
system state does not matter and program/functions work on input rather than on a state.
Functional design process:
Data-flow design: Model the data processing in the system using data-flow diagrams.
Structural decomposition: Model how functions are decomposed to sub-functions using graphical
structure charts.
Detailed design: The entities in the design and their interfaces are described in detail. These may be
recorded in a data dictionary and the design expressed using a PDL.
DESIGN METRICS
In software development, a metric is the measurement of a particular characteristic of a program's performance
or efficiency. Design metric measure the efficiency of design aspect of the software. Design model considering
three aspects:
Architectural design
Object oriented design
User interface design