0% found this document useful (0 votes)
5 views

Lesson 4

The document outlines a lecture on Software Design, covering its meaning, elements, levels, principles, strategies, types, and analysis tools. It emphasizes the transformation of user requirements into implementable software and discusses various design principles such as modularization, abstraction, cohesion, and coupling. Additionally, it introduces design strategies like top-down and bottom-up approaches, and lists tools used in software analysis and design.

Uploaded by

Phial
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views

Lesson 4

The document outlines a lecture on Software Design, covering its meaning, elements, levels, principles, strategies, types, and analysis tools. It emphasizes the transformation of user requirements into implementable software and discusses various design principles such as modularization, abstraction, cohesion, and coupling. Additionally, it introduces design strategies like top-down and bottom-up approaches, and lists tools used in software analysis and design.

Uploaded by

Phial
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 22

Nyanza campus

Module: Introduction to Software Engineering


Lecturer: Dr. Taiwo Adigun Email:
[email protected]
Lecture 4: Software Design
Software Design

Outline:
 Meaning
 Elements of a System
 Software Design Levels
 Principles of Software Design
 Software Design Strategies
 Types of Software Design
 Software Analysis & Design Tools
Software Design

Specific Objectives:

By the end of this lesson, you should be able:


 Describe software system
 Explains concepts like software design levels, principles,
and approaches.
 Describe software design types.
Software Design – Meaning

 Software design is a process to transform user requirements into some suitable


form, which helps the programmer in software coding and implementation.

 Software design is a process to conceptualize the software requirements into


software implementation.

 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 that is easily
implementable using programming language.

 The output of this process can directly be used into implementation in


programming languages.
Software Design – Elements of Software System

 A software system is a system of intercommunicating components forming part of a


computer system.

Elements of a System

1. Architecture: This is the conceptual model that defines the structure, behavior, and
views of a system. We can use flowcharts to represent and illustrate the architecture.

2. Modules: These are components that handle one specific task in a system. A
combination of the modules makes up the system.

3. Components: This provides a particular function or group of related functions. They


are made up of modules.

4. Interfaces: This is the shared boundary across which the components of a system
exchange information and relate.

5. Data: This is the management of the information and data flow.


Levels of Software Design

 The software design process can be divided into the following three levels
design:

1. Architecture Design

2. High level Design

3. Detailed Design

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

High-level Design

 The high-level design breaks the ‘single entity-multiple component’


concept of architectural design into less-abstracted view of sub-systems
and modules and depicts their interaction with each other.

 High-level design focuses on how the system along with all of its
components can be implemented in forms of modules.

 It recognizes modular structure of each sub-system and their relation


and interaction among each other.
Levels of Software Design

Detailed Design

 Detailed design deals with the implementation part of what is seen as a

system and its sub-systems in the previous two designs.

 It is more detailed towards modules and their implementations.

 It defines logical structure of each module and their interfaces to

communicate with other modules.


Principles of Software Design

 Design Principles in System Design are a set of considerations and


concepts that form the basis of any good System.

 Design Principles help teams with decision-making about design choices


that will impact the overall system.

 Some of the most common Design Principles in System Design are:

i. Modularization

ii. Abstraction

iii. Concurrency

iv. Cohesion

v. Coupling
Principles of Software Design – Modularization

 Modularization is a technique to divide a software system into multiple discrete


and independent modules, which are expected to be capable of carrying out
task(s) independently.

 Designers tend to design modules such that they can be executed and/or
compiled separately and independently.

Advantage of modularization:

1. Smaller components are easier to maintain

2. Program can be divided based on functional aspects

3. Desired level of abstraction can be brought in the program

4. Components with high cohesion can be re-used again

5. Concurrent execution can be made possible

6. Desired from security aspect


Principles of Software Design – Abstraction
 Software abstraction involves simplifying complex systems by focusing on the most important details.

 It allows developers to create more manageable and maintainable systems by hiding irrelevant
details.

 There are two common abstraction mechanisms:

1. Functional Abstraction

2. Data Abstraction

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.

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.
Principles of Software Design – Concurrency

 In software design, concurrency is implemented by splitting the


software into multiple independent units of execution, like modules
and executing them in parallel.

 In other words, concurrency provides capability to the software to


execute more than one part of code in parallel to each other.

 It is necessary for the programmers and designers to recognize


those modules, which can be made parallel execution.
Principles of Software Design – Cohesion

 Cohesion is a measure that defines the degree of intra-dependability


within elements of a module.

 The greater the cohesion, the better is the program design.


Principles of Software Design – Cohesion
 There are seven types of cohesion, namely;

1. Functional Cohesion: Functional Cohesion is said to exist if the different elements of a module, cooperate
to achieve a single function.

2. Sequential Cohesion: A module is said to possess sequential cohesion if the element of a module form the
components of the sequence, where the output from one component of the sequence is input to the next.

3. Communicational Cohesion: A module is said to have communicational cohesion, if all tasks of the module
refer to or update the same data structure, e.g., the set of functions defined on an array or a stack.

4. Procedural Cohesion: A module is said to be procedural cohesion if the set of purpose of the module are all
parts of a procedure in which particular sequence of steps has to be carried out for achieving a goal, e.g., the
algorithm for decoding a message.

5. Temporal Cohesion: When a module includes functions that are associated by the fact that all the methods
must be executed in the same time, the module is said to exhibit temporal cohesion.

6. Logical Cohesion: A module is said to be logically cohesive if all the elements of the module perform a
similar operation. For example Error handling, data input and data output, etc.

7. Coincidental Cohesion: A module is said to have coincidental cohesion if it performs a set of tasks that are
associated with each other very loosely, if at all.
Principles of Software Design – Coupling

 Coupling is the degree of interdependence between software modules.

 Coupling is a measure that defines the level of inter-dependability among


modules of a program.

 It tells at what level the modules interfere and interact with each other. The
lower the coupling, the better the program.

 Two modules that are tightly coupled are strongly dependent on each other.
Principles of Software Design – Coupling

 There are five levels of coupling, namely -

1. Content coupling - When a module can directly access or modify or refer


to the contents of another module, it is called content level coupling.

2. Common coupling- When multiple modules have read and write access to
some global data, it is called common or global coupling.

3. Control coupling- Two modules are called control-coupled if one of them


decides the function of the other module or changes its flow of execution.

4. Stamp coupling- When multiple modules share common data structure and
work on different part of it, it is called stamp coupling.

5. Data coupling- Data coupling is when two modules interact with each other
by means of passing data (as parameter). If a module passes data structure
as parameter, then the receiving module should use all its components.
Software Design Strategies

 Design strategy is the process of organizing the program modules in such a


method that are easy to develop and latter too, change.

 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
Software Design Strategies - Top-down Approach

 Top-down design takes the whole software system as one entity and then decomposes
it to achieve more than one sub-system or component based on some characteristics.
 Each sub-system or component is then treated as a system and decomposed further.
 Top-down design starts with a generalized model of system and keeps on defining the
more specific part of it.
 Top-down design is more suitable when the software solution needs to be designed
from scratch and specific details are unknown.
Software Design Strategies - Bottom-up Approach

 The bottom up design model starts with most specific and basic
components.

 It proceeds with composing higher level of components by using basic or


lower level components.

 Bottom-up strategy is more suitable when a system needs to be created


from some existing system, where the basic primitives can be used in the
newer system.
Types of Software Design
 These are software design philosophies and methodologies strictly concerned with the design
of the software. The common design philosophies are:

1. Structured Design: Structured design is mostly based on ‘divide and conquer’ strategy where a
problem is broken into several small problems and each small problem is individually solved until the
whole problem is solved.

2. Functional Oriented Design: Function Oriented design is a method to software design where the
model is decomposed into a set of interacting units or modules where each unit or module has a
clearly defined function.

3. Object Oriented Design: In the object-oriented design method, the system is viewed as a collection
of objects (i.e., entities) and their characteristics instead of functions involved in the software system.

4. User Interface Design: It focuses on the visual part of the application through which a client
interacts with the system. It determines how commands are given to the computer or the program
and how data is displayed on the screen.

There are two main types of User Interface:


 Text-Based User Interface or Command Line Interface

 Graphical User Interface (GUI)


Software Analysis & Design Tools

 Software analysis and design includes all activities, which help the transformation of
requirement specification into implementation.

 They assist in understanding, modeling, and planning software projects, ensuring


that the final product meets user needs and performs reliably.

 These tools facilitate various stages of the software development lifecycle, including
requirements gathering, system design, and architectural planning.
1. Data Flow Diagram (DFD)

2. Structure Charts

3. HIPO (Hierarchical Input Process Output) Diagram

4. Structured English

5. Pseudo-Code

6. Decision Tables

7. Entity-Relationship Model (ERD)

8. Data Dictionary
Thank
s

You might also like