Software Engineering- Module 4
Project Scheduling and Tracking
Notes
By – Charushila Jadhav
Software Design:
Q.1 Define software design.
Q.2 Explain the software design process with suitable example.
Q.3 Explain characteristics for good design.
Definition: Software design is the process of transforming requirements specified in the
Software Requirement Specification (SRS) into a structured solution.
It acts as a blueprint for developing the system by defining architecture, components,
and their interactions.
There are three different steps/process for software design as follow:
Steps:
1. Interface Design
2. Architectural Design
3. Component Design
Example: Online Shopping System
Interface Design:
Design login page, product page, cart, and payment interface.
Architectural Design:
Divide system into modules like User Module, Product Module, Payment
Module, and Database.
Component Design:
Define how payment is processed, how products are searched, and how orders
are stored
Diagram:
1. Architectural Design
It defines the overall structure of
the system.
It Identifies major
modules/components
It Defines relationships and
communication between them
Defines overall system structure
Identifies major modules and their
relationships
Example: Dividing system into
modules like login, database,
payment
2. Interface Design
It defines how users and system
components interact.
o It Includes user interface
(screens, forms, buttons)
o It Includes system interfaces
(APIs, data exchange)
Defines interaction between user
and system
Includes UI (screens, forms) and
system interfaces (APIs)
Ensures usability and
communication between
components
3. Component Design (Detailed Design)
Focuses on internal working of each module
Defines algorithms, data structures, and logic
It focuses on internal details of each module.
o Algorithms
o Data structures
o Logic implementation
Advantages:
It reduces the complexity
Software designing improves maintainability
It ensures better quality software
It helps in error detection early
Key Elements of Software Design
These are the fundamental components that define a software system:
1. Architecture
It shows overall structure of the system
Architecture defines components and their relationships
It ensures system is scalable and maintainable
2. Modules
Independent units performing specific tasks
Help divide complex systems into smaller parts
Improve readability and testing
3. Components
Functional units that provide specific services
Can be reused across systems
Help in building modular systems
4. Interfaces
Define communication between modules/components
Includes user interface and system interfaces (APIs)
Ensures smooth interaction
5. Data
Defines how data is stored, accessed, and managed
Includes data structures and data flow
Important for system efficiency and accuracy
Characteristics of Good Software Design
These ensure the quality and effectiveness of the system:
1. High Cohesion
Each module performs a single task
Improves clarity and maintainability
2. Low Coupling
Minimal dependency between modules
Makes system flexible and easy to modify
3. Simplicity
Design should be easy to understand
Avoid unnecessary complexity
4. Modularity
System divided into smaller modules
Helps in development, testing, and maintenance
5. Reusability
Components can be reused in other systems
Saves time and effort
6. Maintainability
Easy to fix bugs and update system
Reduces long-term cost
7. Scalability
System can handle increased workload
Easy to expand in future
8. Efficiency
Optimal use of resources (time, memory)
Fast performance
9. Reliability
System performs correctly under all conditions
Less prone to failure
10. Flexibility
Easy to adapt to changes
Supports future enhancements
Modular Design:
Q.1 What is modularity?
Q.2 Describe modular design and its benefits in real-world applications.
Definition:
Modularity is the process of dividing a software system into smaller, independent
modules.
Each module performs a specific function, making the system easier to develop, test,
maintain, and reuse.
Explanation
In modular design, the system is broken into parts such as modules or components.
These modules interact with each other through well-defined interfaces. It promotes
functional independence, meaning each module focuses on a single task with
minimal dependency on others.
Benefits of Modular Design
1. Easy Development
Different modules can be developed simultaneously by different teams
Speeds up the development process
2. Easy Maintenance
Errors can be fixed in one module without affecting others
Simplifies debugging
3. Reusability
Modules can be reused in other projects
Saves time and effort
4. Improved Testing
Each module can be tested independently
Ensures better quality
5. Flexibility
Changes in one module do not affect the entire system
Easy to upgrade or modify
6. Reduced Complexity
Breaking system into smaller parts makes it easier to understand
Real-World Example: Online Shopping System
User Module: Handles login and registration
Product Module: Displays products
Cart Module: Manages selected items
Payment Module: Processes payments
Coupling & Cohesion:
Q.3 Define cohesion.
Q.4 What is coupling?
Q.6 Apply the concept of cohesion to improve a module design.
Q.7 Analyze the difference between coupling and cohesion with examples.
Q.8 Explain types of coupling and analyze their impact on system design.
Q.9 Compare top-down and bottom-up design approaches.
Q.10 Evaluate the importance of coupling and cohesion in software quality.
Definition:
Cohesion: It refers to the degree to which elements within a module are related to
each other. High cohesion means all elements work together to perform a single
task, which improves clarity and maintainability.
Goal: High cohesion (best design)
Types of Cohesion (Worst → Best)
1. Coincidental Cohesion
o Unrelated tasks grouped together
o Worst type
2. Logical Cohesion
o Similar types of tasks grouped (e.g., all input functions)
3. Temporal Cohesion
o Tasks executed at the same time (e.g., initialization)
4. Procedural Cohesion
o Tasks follow a sequence of steps
5. Communicational Cohesion
o Tasks operate on the same data
6. Sequential Cohesion
o Output of one function is input to another
7. Functional Cohesion
o Module performs a single task
o Best type
Advantages of High Cohesion
Easy to understand
Easy maintenance
Better reusability
Coupling: is the degree of interdependence between different modules in a system.
Low coupling is preferred because it reduces dependency, making the system easier
to modify and maintain.
Goal: Low coupling (best design)
Types of Coupling (Worst → Best)
1. Content Coupling
o One module directly modifies another
o Worst type
2. Common Coupling
o Modules share global data
3. Control Coupling
o One module controls another using flags
4. Stamp Coupling
o Whole data structure passed but partially used
5. Data Coupling
o Modules share only required data
o Best type
6. External Coupling
o Dependency on external systems or formats
Advantages of Low Coupling
Easy to modify
Reduces error propagation
Improves flexibility
Relationship Between Cohesion and Coupling
High cohesion → better module design
Low coupling → better system design
Both together improve software quality
Good Design = High Cohesion + Low Coupling
Importance of Cohesion in Software Quality
1. Improves Understandability
High cohesion ensures a module performs a single task
Makes code easier to read and understand
2. Enhances Maintainability
Changes are localized within a module
Easier to debug and update
3. Promotes Reusability
Highly cohesive modules can be reused in other systems
4. Increases Reliability
Focused functionality reduces chances of errors
Importance of Coupling in Software Quality
1. Reduces Dependency
Low coupling minimizes interconnections between modules
Changes in one module do not affect others
2. Improves Flexibility
Modules can be modified or replaced independently
3. Easier Testing
Independent modules can be tested separately
4. Prevents Error Propagation
Errors remain confined within a module
Evaluation (Critical Analysis)
High cohesion without low coupling is not effective, as modules may still depend
heavily on each other
Low coupling without cohesion may lead to poorly structured modules
The best design achieves a balance of both
Real-World Example
In an online shopping system:
A Payment Module should only handle payment (high cohesion)
It should not depend heavily on other modules like Product or User (low coupling)
Difference:
Cohesion Coupling
Degree to which elements within a module are Degree of interdependence between
related modules
Internal strength of a module Relationship between different modules
Achieve high cohesion Achieve low coupling
Intra-module (within module) Inter-module (between modules)
Improves clarity and maintainability Affects flexibility and independence
Functional cohesion (best type) Data coupling (best type)
Coincidental cohesion Content coupling
Reduces dependency and error
Makes modules focused and reusable
propagation
Changes stay within module Changes may affect multiple modules
Module Design Strategies / Approaches
The strategy of modular design refers to the approaches used to divide a software
system into smaller modules for easier development, maintenance, and
understanding.
1. Top-Down Approach
Design starts from the main system (top level)
System is gradually broken down into smaller sub-modules
It also called stepwise refinement
Process: Main System → Subsystems → Modules → Components
Level 1
Level 2
Level 3
Advantages
Clear overall system structure
Easy to manage large systems
Better control and planning
Disadvantages
Low-level details may be ignored initially
2. Bottom-Up Approach
Design starts from small, basic modules
These modules are combined to form larger systems
Process: Small Modules → Subsystems → Complete System
Advantages
Easy to test small modules early
Encourages reusability
More flexible
Disadvantages
Overall system structure may not be clear initially
Integration may be complex
Architecture Style:
Refer PPT
UI Design:
Refer PPT
Definition
User Interface (UI) Design Process is the systematic approach of designing how users interact
with a software system. It focuses on creating interfaces that are user-friendly, efficient, and
visually appealing.
Steps in UI Design Process
1. User Analysis
Identify target users and their needs
Understand user skills, preferences, and expectations
2. Task Analysis
Identify tasks users want to perform
Define user goals and workflows
3. Interface Design (Wireframing & Prototyping)
Create basic layouts (wireframes)
Develop prototypes to visualize screens and navigation
4. Design Implementation
Convert designs into actual UI using tools or code
Apply colors, typography, and layout principles
5. Evaluation and Testing
Test interface with real users
Identify usability issues and improve design
UI Design Principles (Brief)
Consistency
Simplicity
User control
Feedback
Error prevention
Example
In an online shopping app:
User analysis → Understand shoppers
Task analysis → Search, add to cart, checkout
Design → Create product page and cart UI
Testing → Improve navigation and usability
Edit