Coupling and Cohesion in Software Engineering: Types & Differences

Chapter 19

Coupling and Cohesion in Software Engineering: Types & Differences

Coupling and cohesion are two of the most important ideas in modular software design. Cohesion tells us how closely the responsibilities inside one module belong together, while coupling tells us how strongly one module depends on another. Understanding both concepts helps us design software that is easier to test, change and maintain.

Coupling and Cohesion in Simple Words

Cohesion is the degree to which the elements inside a module are related to each other.

Coupling is the degree of dependency between different modules.

A good modular design generally tries to achieve: high cohesion and low coupling.

Why Do Students Confuse Coupling and Cohesion?

Coupling and Cohesion in Software Engineering: Types & Differences

Both terms are used while discussing modules, so at first they look very similar. The easiest way to separate them is to remember where we are looking.

Look Inside One Module COHESION

Are the responsibilities inside this module strongly related?

VS
Look Between Modules COUPLING

How much does one module depend on another module?

Cohesion = Inside

Coupling = Between

Understand Coupling and Cohesion with One Example

Suppose we are developing an online shopping application.

One module is called Payment Module.

Good Payment Module:
  • Create payment request
  • Verify payment
  • Refund payment
  • Check transaction status

These activities belong to the same responsibility. Therefore, the module has high cohesion.

Poor Payment Module:
  • Process payment
  • Reset user password
  • Generate salary report
  • Manage products

These activities are unrelated. Therefore, the module has low cohesion.

Now suppose the Payment Module directly accesses internal variables from Order Module, User Module, Inventory Module and Notification Module.

It now has too many dependencies. This indicates high coupling.

Why Coupling and Cohesion Matter in Modular Design

Dividing software into modules is not enough.

The modules must also be designed properly.

User Module Focused user operations
Order Module Focused order operations
Payment Module Focused payment operations

Each module should have a focused purpose, and communication between modules should happen through clear interfaces.

What is Cohesion in Software Engineering?

Cohesion Definition

Cohesion refers to how strongly the elements, operations or responsibilities inside a single module are related to one another.

A module with high cohesion performs one clear or strongly related set of tasks.

A module with low cohesion performs unrelated tasks simply because they have been placed together.

High Cohesion vs Low Cohesion

Low Cohesion

One module handles:

  • Login
  • Invoice printing
  • Product search
  • Database backup

Responsibilities are not strongly related.

High Cohesion

Authentication Module handles:

  • Login
  • Logout
  • Password verification
  • Session validation

Responsibilities belong to one focused purpose.

Types of Cohesion in Software Engineering

Traditional structured-design literature describes several levels of cohesion. Textbooks sometimes use slightly different wording or ordering, but the following sequence is commonly taught from weaker to stronger cohesion.

Cohesion: Weak → Strong
Coincidental Weakest
Logical Weak
Temporal Better
Procedural Moderate
Communicational Good
Sequential Strong
Functional Very Strong
1

Coincidental Cohesion

Coincidental cohesion occurs when unrelated functions are placed inside the same module without a meaningful relationship.

Example:

One Utility Module contains:

  • calculateTax()
  • sendEmail()
  • resizeImage()
  • validatePassword()

These operations solve unrelated problems.

This is generally considered the weakest form of cohesion.

2

Logical Cohesion

Logical cohesion occurs when operations that belong to the same general category are grouped together, even though they may perform different tasks.

Example:

An InputHandler module contains:

  • readKeyboardInput()
  • readFileInput()
  • readNetworkInput()

All operations are related to input, but their actual processing is different.

3

Temporal Cohesion

Temporal cohesion occurs when operations are grouped because they need to happen at approximately the same time.

Example:

A startup module performs:

  • Load configuration
  • Initialize logger
  • Open required connections
  • Prepare application cache

These operations belong together mainly because they occur during application startup.

4

Procedural Cohesion

Procedural cohesion occurs when activities are grouped mainly because they follow a particular sequence of execution.

Example:
  1. Read student ID.
  2. Check student status.
  3. Display a message.

The steps are linked mainly by processing order.

5

Communicational Cohesion

Communicational cohesion occurs when operations are grouped because they use or update the same data.

Example:

A StudentRecord module:

  • updates student details,
  • calculates student attendance,
  • generates a student summary

while working with the same student record.

6

Sequential Cohesion

Sequential cohesion occurs when the output of one operation becomes the input of the next operation inside the same module.

Read Data
Validate Data
Transform Data
7

Functional Cohesion

Functional cohesion occurs when all parts of a module contribute to one clearly defined function.

Example:

A calculateInvoiceTotal() module contains only the steps required to calculate the final invoice total.

Functional cohesion is usually treated as one of the strongest forms in traditional structured design.

What is Informational Cohesion?

Some software engineering texts also discuss informational cohesion, particularly when several operations work on the same data structure but each operation has its own entry point.

Example:

A Stack module may provide:

  • push()
  • pop()
  • peek()
  • isEmpty()

All operations work around one well-defined data abstraction.

This idea is especially useful when discussing abstract data types and object-oriented modules.

Cohesion Types at a Glance

Type Main Reason Elements Are Together General Quality
Coincidental No meaningful relationship Very weak
Logical Same general category Weak
Temporal Executed at the same time Better
Procedural Follow a sequence Moderate
Communicational Use the same data Good
Sequential Output of one becomes input of next Strong
Functional Perform one clearly defined function Very strong

What is Coupling in Software Engineering?

Coupling Definition

Coupling is the degree of dependency or connection between different software modules.

When one module knows too much about the internal working of another module, the modules become tightly coupled.

When modules communicate only through small, clear interfaces, coupling is generally easier to manage.

Tight Coupling vs Loose Coupling

Tight Coupling

  • Modules know internal details of each other.
  • Changes spread across modules.
  • Testing becomes more difficult.
  • Reuse becomes harder.

Loose Coupling

  • Modules communicate through clear contracts.
  • Internal changes are better isolated.
  • Testing becomes easier.
  • Replacement becomes more practical.

Types of Coupling in Software Engineering

Traditional software engineering books describe several forms of coupling. The exact list can vary slightly between textbooks, especially when modern object-oriented concepts are included.

A commonly taught order moves from stronger, undesirable dependency toward weaker and more desirable dependency.

1

Content Coupling

Content coupling occurs when one module directly depends on or modifies the internal working of another module.

Example:

Module A directly changes an internal variable or internal code behaviour of Module B.

This creates very strong dependency and is generally considered highly undesirable.

2

Common Coupling

Common coupling occurs when multiple modules depend on shared global data.

Example:

User Module, Payment Module and Order Module all directly modify the same global variable.

A change by one module can unexpectedly affect the others.

3

External Coupling

External coupling occurs when modules depend on an externally imposed format, protocol, device interface or external communication rule.

Example:

Two modules both depend on a specific external file format or hardware protocol.

4

Control Coupling

Control coupling occurs when one module passes information that directly tells another module which internal logic to execute.

Example:

A module calls:

generateReport(mode = 1)

where the value 1 instructs the receiving module to execute a particular internal branch.

5

Stamp Coupling

Stamp coupling occurs when one module passes a complete data structure to another module even though the receiving module needs only a small part of it.

Example:

A complete Student object containing name, address, marks, password, attendance and fee details is passed to a function that only needs studentId.

6

Data Coupling

Data coupling occurs when modules communicate by passing only the specific data required for an operation.

Example:

calculateFine(studentId, overdueDays)

Only the data required by the function is supplied.

This is generally considered a low and desirable form of coupling in traditional structured design.

7

Message Coupling

Message coupling is often discussed in object-oriented or component-based systems. Components communicate through messages, method calls or well-defined interfaces without exposing their internal data.

Example:

OrderService calls:

paymentGateway.processPayment(request)

without knowing how the payment gateway performs the internal processing.

Coupling Types at a Glance

Type Main Dependency General Design Effect
Content Internal implementation of another module Very high dependency
Common Shared global data High dependency
External External format or protocol External dependency
Control Control information Moderate dependency
Stamp Complete data structure More dependency than required
Data Only required data Low dependency
Message Defined messages/interfaces Very loose interaction

Data Coupling vs Stamp Coupling

This is one of the most common exam questions.

Basis Data Coupling Stamp Coupling
Data Passed Only required values Complete structure/object
Dependency Lower Higher
Example sendMessage(userEmail) sendMessage(completeUserObject)
Preferred? Generally more desirable Use only when complete structure is genuinely needed

Understanding Control Coupling More Clearly

Report Controller
→
Generate Report
mode = 1 / 2 / 3

The first module sends a control value that determines what internal processing the second module performs.

This means the caller knows something about the internal decision structure of the receiving module.

Why High Cohesion and Low Coupling Are Preferred

HIGH COHESION ↑

Keep closely related responsibilities together.

+
LOW COUPLING ↓

Keep unnecessary dependency between modules low.

Benefits

Easy Maintenance

Changes are easier to understand and isolate.

Better Testing

Focused modules with fewer dependencies are easier to test.

Better Reuse

A focused module can be reused more easily.

Easy Debugging

Defects are easier to locate when responsibilities are clear.

Better Change Control

Changes spread to fewer unrelated modules.

Better Understanding

Each module has a more obvious purpose.

Difference Between Coupling and Cohesion

Basis Cohesion Coupling
Meaning Relationship among elements inside one module Dependency between different modules
Focus Internal module strength Inter-module dependency
Preferred Level High Low
Main Question Do these tasks belong together? How much do these modules depend on each other?
Impact Affects clarity of module responsibility Affects change propagation between modules
Good Design High cohesion Low coupling

Real-Life Analogy for Coupling and Cohesion

Think About a Hospital

A hospital has separate departments such as:

  • Cardiology
  • Pharmacy
  • Radiology
  • Billing

Each department has a focused responsibility. This is similar to high cohesion.

Departments communicate when required, but Cardiology should not need to understand every internal process of Billing. This is similar to low coupling.

Coupling and Cohesion in Object-Oriented Design

The same principles remain important in Object-Oriented Programming (OOP).

Classes should contain closely related data and behaviour, while dependencies between classes should remain controlled.

Good Example:

OrderService depends on a PaymentGateway interface rather than directly depending on every internal detail of one payment provider.

This allows one implementation to be replaced more easily when the interface remains stable.

Information Hiding, Encapsulation and Coupling

Information hiding reduces coupling because modules do not need to know unnecessary internal details of other modules.

Encapsulation supports this by keeping internal data protected and exposing controlled operations.

Poor Design:

Another module directly changes: account.balance

Better Design:

Another module calls: account.withdraw(amount)

The BankAccount class controls how its internal balance changes.

How to Improve Cohesion

Identify the Main Responsibility

Write one clear sentence explaining what the module is responsible for.

Find Unrelated Functions

Check whether any function does not support the main responsibility.

Split Large Modules

Move unrelated responsibilities into separate meaningful modules.

Keep Related Data Together

Data and behaviour serving one responsibility should remain close where appropriate.

Review the Module Name

A very broad name such as “UtilityManager” may indicate mixed responsibilities.

How to Reduce Coupling

Use Clear Interfaces

Let modules communicate through defined operations instead of internal variables.

Avoid Unnecessary Global Data

Shared mutable state creates hidden dependencies.

Pass Only Required Data

Do not pass an entire object when one small value is enough.

Hide Implementation Details

Other modules should depend on behaviour, not unnecessary internal structure.

Depend on Stable Contracts

Interfaces can reduce direct dependency on specific implementations.

Before and After Example

Before

OrderService directly:

  • Accesses payment database tables
  • Updates user profile
  • Sends email
  • Changes inventory data

Result: low cohesion and high coupling.

After

OrderService coordinates:

  • PaymentService
  • InventoryService
  • NotificationService

Each module keeps its own focused responsibility.

Cohesion and Single Responsibility Principle

High cohesion is closely related to the idea that a software unit should have a focused responsibility.

In object-oriented design, the Single Responsibility Principle (SRP) is often used to encourage classes that have one focused reason to change.

Important:

High cohesion and SRP are related ideas, but they are not simply two names for exactly the same definition.

Coupling and Dependency Control

Modern software design uses several techniques to reduce unnecessary dependency.

  • Interfaces
  • Dependency injection
  • Encapsulation
  • Layered architecture
  • Events and messages
  • Clear APIs

These techniques do not remove every dependency. Software components still need to cooperate.

The real goal is to keep dependencies clear, necessary and manageable.

Is Zero Coupling Always Possible?

No.

Software modules must communicate to complete useful work. Therefore, completely removing every dependency is neither practical nor desirable.

Correct Goal:

Reduce unnecessary coupling, not all communication.

Does High Cohesion Mean One Function Per Module?

No.

A module can contain several methods as long as those methods contribute to one clear responsibility.

Example:

AuthenticationService can reasonably contain:

  • login()
  • logout()
  • validateSession()
  • verifyPassword()

These methods are different, but all support authentication.

How Coupling and Cohesion Affect Software Quality

Quality Area Effect of Good Cohesion/Coupling
Maintainability Changes stay closer to the responsible module.
Testability Modules can be tested with fewer external dependencies.
Understandability Responsibilities are easier to identify.
Reusability Focused modules can be reused more easily.
Debugging Defects are easier to isolate.
Change Impact Changes are less likely to spread across unrelated modules.

Common Mistakes Students Make

Mistake 1: Saying Low Cohesion is Better

In general modular design, we want high cohesion.

Mistake 2: Saying High Coupling is Better

We normally try to reduce unnecessary coupling.

Mistake 3: Confusing Inside and Between

Cohesion is inside one module. Coupling is between different modules.

Mistake 4: Thinking Zero Dependency Is Required

Modules must communicate. The goal is manageable dependency.

Mistake 5: Passing Complete Objects Everywhere

If a method needs only one value, passing a huge data structure may create unnecessary dependency.

Mistake 6: Creating One Giant Utility Module

Unrelated helper functions placed together may produce low cohesion.

Mistake 7: Memorising Types Without Examples

The easiest way to remember cohesion and coupling types is to understand why the dependency or grouping exists.

Coupling and Cohesion Review Checklist

✓
Does every module have a clear purpose?
✓
Are unrelated responsibilities separated?
✓
Do methods inside a module work toward related goals?
✓
Does one module access another module's internal state?
✓
Are global variables creating hidden dependencies?
✓
Are modules passing more data than necessary?
✓
Are interfaces small and clear?
✓
Can important modules be tested independently?
✓
Will a small change affect many unrelated modules?
✓
Is high cohesion + low coupling reasonably achieved?

Exam-Oriented Definition of Cohesion

Cohesion is the degree to which the elements or functions within a software module are related to one another. A good modular design generally aims for high cohesion.

Exam-Oriented Definition of Coupling

Coupling is the degree of dependency between different software modules. A good modular design generally aims to minimise unnecessary coupling.

2 Marks: What is Functional Cohesion?

Functional cohesion occurs when all elements of a module work together to perform one clearly defined function. It is considered one of the strongest forms of cohesion in traditional structured design.

2 Marks: What is Content Coupling?

Content coupling occurs when one module directly depends on or modifies the internal content or implementation of another module.

5 Marks: Explain Types of Cohesion

Common traditional types of cohesion from weaker to stronger are:

  1. Coincidental Cohesion
  2. Logical Cohesion
  3. Temporal Cohesion
  4. Procedural Cohesion
  5. Communicational Cohesion
  6. Sequential Cohesion
  7. Functional Cohesion

A good design tries to move toward stronger cohesion because strongly related responsibilities make modules easier to understand and maintain.

5 Marks: Explain Types of Coupling

Common forms of coupling include:

  1. Content Coupling
  2. Common Coupling
  3. External Coupling
  4. Control Coupling
  5. Stamp Coupling
  6. Data Coupling
  7. Message Coupling

Strong coupling makes modules highly dependent on each other, while lower coupling helps isolate changes and improve maintainability.

5 Marks: Difference Between Coupling and Cohesion

Cohesion measures the relationship among elements inside one module, whereas coupling measures dependency between different modules.

High cohesion is desirable because it gives a module a focused responsibility. Low coupling is desirable because it reduces unnecessary dependencies between modules.

Therefore, the basic rule of good modular design is: High Cohesion + Low Coupling.

10 Marks: Explain Coupling and Cohesion in Detail

For a strong 10-mark answer, write in this order:

  1. Define modular design.
  2. Define cohesion.
  3. Explain high and low cohesion.
  4. Explain types of cohesion with examples.
  5. Define coupling.
  6. Explain tight and loose coupling.
  7. Explain types of coupling with examples.
  8. Write the difference between coupling and cohesion.
  9. Explain why high cohesion is desirable.
  10. Explain why low coupling is desirable.
  11. Draw a simple modular diagram.
  12. Write benefits for maintenance and testing.
  13. Finish with “High Cohesion + Low Coupling”.

Easy Memory Tricks

IN = Cohesion

Look inside one module.

BETWEEN = Coupling

Look at dependency between modules.

HC + LC

High Cohesion + Low Coupling

C L T P C S F

Coincidental → Logical → Temporal → Procedural → Communicational → Sequential → Functional

Quick Revision Notes

  • Cohesion measures relationships inside a module.
  • Coupling measures dependency between modules.
  • High cohesion is generally desirable.
  • Low unnecessary coupling is generally desirable.
  • Coincidental cohesion is very weak.
  • Logical cohesion groups similar categories of operations.
  • Temporal cohesion groups activities performed at the same time.
  • Procedural cohesion groups activities that follow a sequence.
  • Communicational cohesion works around the same data.
  • Sequential cohesion occurs when one output becomes the next input.
  • Functional cohesion performs one clearly defined function.
  • Content coupling creates very strong dependency.
  • Common coupling uses shared global data.
  • External coupling depends on external formats or protocols.
  • Control coupling passes information controlling another module's behaviour.
  • Stamp coupling passes a complete structure when only part may be needed.
  • Data coupling passes only required data.
  • Message coupling uses defined messages or interfaces.
  • Information hiding helps reduce coupling.
  • Modular design does not mean zero dependency.
  • Final rule: High Cohesion + Low Coupling.

Frequently Asked Questions

What is cohesion in software engineering?

Cohesion is the degree to which the elements or responsibilities inside one software module are related to one another.

What is coupling in software engineering?

Coupling is the degree of dependency between different software modules.

Which is better: high cohesion or low cohesion?

High cohesion is generally preferred because it keeps closely related responsibilities together inside a module.

Which is better: high coupling or low coupling?

Low unnecessary coupling is generally preferred because it reduces dependency between modules.

What is the main difference between cohesion and coupling?

Cohesion looks at relationships inside one module, while coupling looks at dependency between different modules.

What is functional cohesion?

Functional cohesion occurs when every element inside a module contributes to one clearly defined function.

What is coincidental cohesion?

Coincidental cohesion occurs when unrelated functions are placed in the same module without a meaningful relationship.

What is sequential cohesion?

Sequential cohesion occurs when the output of one activity becomes the input of the next activity.

What is content coupling?

Content coupling occurs when one module directly depends on or modifies the internal implementation of another module.

What is data coupling?

Data coupling occurs when modules communicate by passing only the specific data required for an operation.

What is stamp coupling?

Stamp coupling occurs when a complete data structure is passed between modules even though only part of it is required.

What is control coupling?

Control coupling occurs when one module sends information that tells another module which internal processing path to execute.

What is common coupling?

Common coupling occurs when several modules depend on shared global data.

What is message coupling?

Message coupling occurs when components communicate using defined messages, methods or interfaces without exposing unnecessary internal details.

Why is high cohesion and low coupling important?

It generally improves maintainability, testing, reuse, debugging and change isolation in modular software.

Is zero coupling possible?

Complete removal of dependency is usually not practical because software modules need to communicate. The goal is to reduce unnecessary dependency.

Conclusion

Coupling and cohesion help us judge whether software modules have been divided properly.

Cohesion looks inside a module. A highly cohesive module contains responsibilities that strongly belong together.

Coupling looks between modules. When modules depend too heavily on one another's internal details, even a small change can affect many parts of the system.

The traditional cohesion types help us understand how strongly module responsibilities are related, while coupling types help us understand the nature of dependencies between modules.

In practical software design, the goal is not to create completely independent modules. Useful software requires communication. The goal is to create clear responsibilities and controlled dependencies.

Final Memory:

Cohesion = How well things belong together inside a module.

Coupling = How much different modules depend on each other.

Good Modular Design = High Cohesion + Low Coupling.

Post a Comment

0 Comments
* Please Don't Spam Here. All the Comments are Reviewed by Admin.
Join Telegram Exam updates and free resources