0% found this document useful (0 votes)
61 views42 pages

Unit-3 - Software Design

This document provides an overview of software design. It begins by defining software design and explaining that it is the process of transforming user requirements into a suitable form for implementation. Software design is divided into conceptual design and technical design phases. Conceptual design focuses on non-technical representations like wireframes, while technical design addresses implementation concerns using diagrams. The objectives, principles, and importance of software design are also outlined. Key principles discussed include modularity, coupling, abstraction, and anticipating change. The document explains various types of module cohesion and coupling.

Uploaded by

20124011
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
61 views42 pages

Unit-3 - Software Design

This document provides an overview of software design. It begins by defining software design and explaining that it is the process of transforming user requirements into a suitable form for implementation. Software design is divided into conceptual design and technical design phases. Conceptual design focuses on non-technical representations like wireframes, while technical design addresses implementation concerns using diagrams. The objectives, principles, and importance of software design are also outlined. Key principles discussed include modularity, coupling, abstraction, and anticipating change. The document explains various types of module cohesion and coupling.

Uploaded by

20124011
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 42

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).

You might also like