UNIT - III - SOFTWARE DESIGN
BY: PROF. SUSHMA VANKHEDE
Third Year - Computer Science and Engineering,
Navrachana University
INDEX
Software design
Objectives of software design
Software Design principles
Why software design is so important ??
SOFTWARE DESIGN
Software design is a method of creating a blueprint, or layout, for organizing the code of a software program.
Software design is the process of designing the elements of a software such as the architecture, modules and
components, different interfaces of those components and the data that goes into it.
In software designing we transform user requirements into some suitable form, which helps the programmer in
software coding and implementation.
In software design, the development is divided into several sub-activities, which coordinate with each other to
achieve the main objective of software development.
Software development is a multi-step process. The software is a multi-layer, multi-dimensional spectrum with
numerous intermediary processes in its construction.
SOFTWARE DESIGN
Software design phase transforms SRS document into a form which can be easily implementable in some
programming language.
Design Activities
SRS Document SDS Document
SOFTWARE DESIGN….CONT
Software designing is divided into two major phases:
Conceptual Design
Technical Design
CONCEPTUAL DESIGN
Conceptual design process is bringing bits of software together in a non-technical way as part of concept
generation.
For instance, you could wish to generate a list of all the components and their functions and wireframes and flow
diagrams. As a result, we concentrate on non-technical representations of software in conceptual design.
Common methods used for conceptual designs are:
Wireframes
Mockups & Flow chart
Component diagrams
Class-Responsibility-Collaboration (CRC) cards. [Brainstorming tool used for designing OO software] - Example
CONCEPTUAL DESIGN..CONT
Written in simple language i.e. customer understandable language.
Detailed explanation about system characteristics.
Describes the functionality of the system.
It is independent of implementation.
Linked with requirement document.
TECHNICAL DESIGN
After completion of the conceptual design, now there is need think about the technical details. The following
questions might help to generate the technical design.
How would it get implemented?
How will it interact with the Server/Database?
How will it interact with other modules?
During the technical design phase, all of these concerns are addressed. In technical design, you're mostly
concerned with how the implementation will be carried out. The following are examples of common technical
design methods:
Class Diagrams
Activity diagram
Sequence diagram
State Diagram
TECHNICAL DESIGN..CONT
Hardware component and design.
Functionality and hierarchy of software components.
Software architecture
Network architecture
Data structure and flow of data.
I/O component of the system.
Shows interface.
ARCHITECTURAL VIEWS
The views describe how the software architecture is broken
into modules and interrelated modules, capturing the
essential software design decisions concerning the structure.
These software design decisions must, of course, be based
on requirements, functional and non-functional restrictions,
and other constraints.
However, these decisions impose further limitations on
demands and future software design options at a lesser level.
Multiple architectural viewpoints are frequently used to
depict software architecture. Consumers, designers,
managers, system engineers, programmers, and other
stakeholders in the software development process are
addressed by each architectural approach.
OBJECTIVES OF SOFTWARE DESIGN
The objective of having software design can be listed as follows:
Correctness:A good design should correctly implement all the functionalities of the system.
Efficiency: Good software addresses all the resources, cost, and time optimization issues.
Understandability: A good design is understandable. It should be modular, and all its modules are arranged in
layers.
Completeness: The design should have all the components like data structures, modules, external interfaces, etc.
Maintainability:A good software design should be easily adaptable whenever a change request is made from the
customer side.
SOFTWARE DESIGN PRINCIPLES
MODULARITY
Modularity is dividing a big software project into smaller portions/modules.
It's the key to designing robust and technical, and maintainable software.
The project is split into several portions.
Each worked on separately. Because of the modularity, testing each module becomes easier.
Link to modularization
COUPLING
An aspect of good design is low coupling.
Because of the minimal coupling, modifications to each module can be made without affecting the others. ·
ABSTRACTION
Abstraction is the process of isolating the core behavior from its implementation and eliminating extraneous
elements to identify it.
The unnecessary coupling will result from distinguishing important behavior from its implementation.
ANTICIPATION OF CHANGE
Software needs are always evolving, resulting in constant changes in requirements.
The ability to adapt and adjust to change pleasantly is important in creating a strong software design.
SIMPLICITY
The goal of great software design is to keep things simple.
Each job has a module that may be used and modified independently.
It makes the code more user-friendly and decreases the number of errors.
SUFFICIENCY AND COMPLETENESS
A good software design guarantees that the program is sufficient and comprehensive in terms of the
requirements.
It ensures that the program has been constructed properly and completely.
WHY SOFTWARE DESIGN IS SO IMPORTANT?
Software with a better design is more adaptable. As a result, you can add a new component to the current
program without impacting it.
Reusability is improved by well-designed software.
Easy to Understand
Cost-efficiency is Increased
HELPFUL TOOLS FOR SOFTWARE DESIGN
Draw.io
Jira
Mockflow
Figma
Marvel
Zeplin
WHAT ARE THE MODULES ??
Module consist of several functions and associated
data structures.
Each module works independently known as
modularization and it is fundamental attribute of
Independent any good software design.
Units
Decomposition of problem cleanly into modules.
Modules are independent of each other
Divide and Conquer principles
Modules
CLEAN - COMPLEX DECOMPOSED MODULES
Clean Complex
Dependency Level : Low Dependency Level : High
COHESION AND COUPLING
Cohesion and coupling are common concepts in designing modular software systems.
Developed by Larry Constantine in the late 1960s, they have proved to be foundational in areas ranging from
software design to software metrics. They have subsequently become standard terms.
Module 1 Module 1I
Module 1II
In technical term modules should display high cohesion and low coupling
COHESION
FUNCTIONAL COHESION
Functional Cohesion: Every essential element for a single computation is contained in the component. A
functional cohesion performs the task and functions. It is an ideal situation.
SEQUENTIAL COHESION
Sequential Cohesion: An element outputs some data that becomes the input for other element, i.e., data flow
between the parts. It occurs naturally in functional programming languages.
COMMUNICATIONAL COHESION
Communicational Cohesion: Two elements operate on the same input data or contribute towards the same
output data. Example- update record in the database and send it to the printer.
PROCEDURAL COHESION
Procedural Cohesion: Elements of procedural cohesion ensure the order of execution. Actions are still weakly
connected and unlikely to be reusable. Ex- calculate student GPA, print student record, calculate cumulative GPA,
print cumulative GPA.
TEMPORAL COHESION
Temporal Cohesion: The elements are related by their timing involved. A module connected with temporal
cohesion all the tasks must be executed in the same time span. This cohesion contains the code for initializing all
the parts of the system. Lots of different activities occur, all at unit time.
LOGICAL COHESION
Logical Cohesion: The elements are logically related and not functionally. Ex- A component reads inputs from
tape, disk, and network. All the code for these functions is in the same component. Operations are related, but the
functions are significantly different.
COINCIDENTAL COHESION
Coincidental Cohesion: The elements are not related(unrelated). The elements have no conceptual relationship
other than location in source code. It is accidental and the worst form of cohesion. Ex- print next line and reverse
the characters of a string in a single component.
COUPLING
DATA COUPLING
Data Coupling: If the dependency between the modules is based on the fact that they communicate by passing
only data, then the modules are said to be data coupled. In data coupling, the components are independent of
each other and communicate through data. Module communications don’t contain tramp data. Example-customer
billing system.
STAMP COUPLING
Stamp Coupling In stamp coupling, the complete data structure is passed from one module to another module.
Therefore, it involves tramp data. It may be necessary due to efficiency factors- this choice was made by the
insightful designer, not a lazy programmer.
CONTROL COUPLING
Control Coupling: If the modules communicate by passing control information, then they are said to be control
coupled. It can be bad if parameters indicate completely different behavior and good if parameters allow factoring
and reuse of functionality. Example- sort function that takes comparison function as an argument.
EXTERNAL COUPLING
External Coupling: In external coupling, the modules depend on other modules, external to the software being
developed or to a particular type of hardware. Ex- protocol, external file, device format, etc.
COMMON COUPLING
Common Coupling: The modules have shared data such as global data structures. The changes in global data
mean tracing back to all modules which access that data to evaluate the effect of the change. So it has got
disadvantages like difficulty in reusing modules, reduced ability to control data accesses, and reduced
maintainability.
CONTENT COUPLING
Content Coupling: In a content coupling, one module can modify the data of another module, or control flow
is passed from one module to the other module. This is the worst form of coupling and should be avoided.
DIFFERENCE BETWEEN COHESION AND COUPLING
SUMMARY
The Software Design Process is the most important phase in developing efficient software since it is the first and
most important step.
It's a user-centered procedure.
It prioritizes the needs, requirements, and constraints of the user.
It is crucial for drawing people to the product and retaining their loyalty.
One can create better, highly efficient, and user-friendly software designs by using numerous tools and rigorously
following the software design process's several phases.
Thank You
Back
CRC CARDS
CRC (Class Responsibility Collaborator) cards are a simple way to break down the functionality of an
application to reason about what the basic entities are (class), what they do (responsibility), and which other
entities they need to communicate with (collaborator).