Nothing Special   »   [go: up one dir, main page]

Wa0010.

Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

Module-4

Software Design
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.

The software design phase is the first step in SDLC (Software Design Life Cycle), which moves the concentration
from the problem domain to the solution domain. In software design, we consider the system to be a set of
components or modules with clearly defined behaviors & boundaries.
Software Design
Software Design

1. Correctness:Software design should be correct as per


requirement.
2. Completeness:The design should have all components like
data structures, modules, and external interfaces, etc.
3. Efficiency:Resources should be used efficiently by the
program.
4. Flexibility:Able to modify on changing needs.
5. Consistency:There should not be any inconsistency in the
design.
6. Maintainability: The design should be so simple so that it can
be easily maintainable by other designers.
Software Design Principles

1. Software design principles are concerned with providing means to handle the complexity of the design
process effectively. Effectively managing the complexity will not only reduce the effort needed for design
but can also reduce the scope of introducing errors during design.
Software Design Principles

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.

For software design, the goal is to divide the problem into manageable pieces.

Benefits of Problem Partitioning


1. Software is easy to understand
2. Software becomes simple
3. Software is easy to test
4. Software is easy to modify
5. Software is easy to maintain
6. Software is easy to expand
Software Design Principles
2 Modularity
1. 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.
2. The desirable properties of a modular system are:

Each module is a well-defined system that can be used with other applications.

Each module has single specified objectives.

Modules can be separately compiled and saved in the library.

Modules should be easier to use than to build.

Modules are simpler from outside than inside.


Software Design Principles
Advantages of Modularity

There are several advantages of Modularity

○ It allows large programs to be written by several or different people


○ It encourages the creation of commonly used routines to be placed in the library and used by other
programs.
○ It simplifies the overlay procedure of loading a large program into main storage.
○ It provides more checkpoints to measure progress.
○ It provides a framework for complete testing, more accessible to test
○ It produced the well designed and more readable program.

Disadvantages of Modularity

There are several disadvantages of Modularity

○ Execution time maybe, but not certainly, longer


○ Storage size perhaps, but is not certainly, increased
○ Compilation and loading time may be longer
○ Inter-module communication problems may be increased
○ More linkage required, run-time may be longer, more source lines must be written, and more
documentation has to be done
Software Design Principles
○ Modular Design
○ Modular design reduces the design complexity and results in easier and faster implementation by allowing
parallel development of various parts of a system. We discuss a different section of modular design in detail
in this section:
○ 1. Functional Independence: Functional independence is achieved by developing functions that perform
only one kind of task and do not excessively interact with other modules. Independence is important
because it makes implementation more accessible and faster. The independent modules are easier to
maintain, test, and reduce error propagation and can be reused in other programs as well. Thus, functional
independence is a good design feature which ensures software quality.

It is measured using two criteria:

○ Cohesion: It measures the relative function strength of a module.


○ Coupling: It measures the relative interdependence among modules.
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. Structured design methods help developers to deal with the size and complexity of programs.
Analysts generate instructions for the developers about how code should be composed and how pieces of code
should fit together to form a program.

To design a system, there are two possible approaches:

1. Top-down Approach
2. Bottom-up Approach
Strategy of Design
1. Top-down Approach: This approach starts with the identification of the main components and then
decomposing them into their more detailed sub-components.
Strategy of Design
2. 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.
Coupling and Cohesion
Module Coupling
In software engineering, the coupling is the degree of interdependence between software modules. Two modules
that are tightly coupled are strongly dependent on each other. However, two modules that are loosely coupled are
not dependent on each other. Uncoupled modules have no interdependence at all within them.

The various types of coupling techniques are shown in fig:

A good design is the one that has low coupling. Coupling is measured by the number of relations between the
modules. That is, the coupling increases as the number of calls between modules increase or the amount of
shared data is large. Thus, it can be said that a design with high coupling will have more errors.
1. No Direct Coupling: There is no direct coupling between M1 and M2.

In this case, modules are subordinates to different modules. Therefore, no direct coupling.

2. Data Coupling: When data of one module is passed to another module, this is called data coupling.
3. Stamp Coupling: Two modules are stamp coupled if they communicate using composite data items such as structure, objects, etc.
When the module passes non-global data structure or entire structure to another module, they are said to be stamp coupled. For
example, passing structure variable in C or object in C++ language to a module.

4. Control Coupling: Control Coupling exists among two modules if data from one module is used to direct the structure of instruction
execution in another.

5. External Coupling: External Coupling arises when two modules share an externally imposed data format, communication protocols,
or device interface. This is related to communication to external tools and devices.

6. Common Coupling: Two modules are common coupled if they share information through some global data items.

7. Content Coupling: Content Coupling exists among two modules if they share code, e.g., a branch from one module
into another module.

You might also like