SlideShare a Scribd company logo
1 of 1
Download to read offline
Abstraction
MissingAbstraction
This smell arises when clumps of data or
encoded strings are used instead of creating
a class or an interface.
ImperativeAbstraction
This smell arises when an operation is
turned into a class.
IncompleteAbstraction
This smell arises when an abstraction does
not support complementary or interrelated
methods completely.
MultifacetedAbstraction
This smell arises when an abstraction has
more than one responsibility assigned to it.
UnnecessaryAbstraction
This smell occurs when an abstraction which
is actually not needed (and thus could have
been avoided) gets introduced in a software
design.
UnutilizedAbstraction
This smell arises when an abstraction is left
unused (either not directly used or not
reachable).
DuplicateAbstraction
This smell arises when two or more
abstractions have the identical name or
identical implementation or both.
Encapsulation
DeficientEncapsulation
This smell occurs when the declared
accessibility of one or more members of an
abstraction is more permissive than actually
required.
LeakyEncapsulation
This smell arises when an abstraction “exposes”
or “leaks” implementation details through its
public interface.
MissingEncapsulation
This smell occurs when the encapsulation of
implementation variations in a type or hierarchy
is missing.
UnexploitedEncapsulation
This smell arises when client code uses explicit
type checks(using chained if-else or switch
statements) instead of exploiting the variation
in types already encapsulated within a
hierarchy.
Modularization
Hierarchy
MissingHierarchy DeepHierarchy
Modularization
BrokenModularization
This smell arises when data and/or methods
that ideally should have been localized into a
single abstraction are separated and spread
acrossmultiple abstractions.
InsufficientModularization
This smell arises when an abstraction exists that
has not been completely decomposed and a
further decomposition could reduce its size,
implementation complexity, or both.
Cyclically-dependent
Modularization
This smell arises when two or more abstractions
depend on each other directly or indirectly
(creating a tight coupling between the
abstractions).
Hub-likeModularization
This smell arises when an abstraction has
dependencies (both incoming and outgoing)
with large number of other abstractions.
MissingHierarchy
This smell arises when a code segment uses
conditional logic (typically in conjunction with
“tagged types”) to explicitly manage variation in
behavior where a hierarchy could have been
created and used to encapsulate those
variations.
UnnecessaryHierarchy
This smell arises when the whole inheritance
hierarchy is unnecessary, indicating that
inheritancehas been applied needlessly for the
particulardesign context.
UnfactoredHierarchy
This smell arises when there is unnecessary
duplication among types in the hierarchy.
WideHierarchy
This smell arises when an inheritance hierarchy
is “too” wide indicating that intermediate
abstractions may be missing.
SpeculativeHierarchy
This smell arises when one or more types in a
hierarchy are provided speculatively (i.e. based
on imagined needs rather than real
requirements).
DeepHierarchy
This smell arises when an inheritance hierarchy
is "excessively" deep.
RebelliousHierarchy
This smell arises when a subtype rejects the
methods provided by its supertype(s).
BrokenHierarchy
This smell arises when a supertype and its
subtype conceptually do not share an “IS-A”
relationship resulting in broken substitutability.
MultipathHierarchy
This smell arises when a subtype inherits both
directly as well as indirectly from a supertype
leading to unnecessary inheritance paths in the
hierarchy.
CyclicHierarchy
This smell arises when a supertype in a
hierarchy depends on any of its subtypes.
Authors:Girish Suryanarayana, Ganesh
Samarthyam,Tushar Sharma
Publisher:Morgan Kaufmann
Publicationdate:Nov 2014

More Related Content

More from Tushar Sharma

Does Your Configuration Code Smell?
Does Your Configuration Code Smell?Does Your Configuration Code Smell?
Does Your Configuration Code Smell?
Tushar Sharma
 

More from Tushar Sharma (16)

House of Cards: Code Smells in Open-source C# Repositories
House of Cards: Code Smells in Open-source C# RepositoriesHouse of Cards: Code Smells in Open-source C# Repositories
House of Cards: Code Smells in Open-source C# Repositories
 
The tail of two source-code analysis tools - Learning and experiences
The tail of two source-code analysis tools - Learning and experiencesThe tail of two source-code analysis tools - Learning and experiences
The tail of two source-code analysis tools - Learning and experiences
 
Designite: A Customizable Tool for Smell Mining in C# Repositories
Designite: A Customizable Tool for Smell Mining in C# RepositoriesDesignite: A Customizable Tool for Smell Mining in C# Repositories
Designite: A Customizable Tool for Smell Mining in C# Repositories
 
Writing Maintainable Code
Writing Maintainable Code Writing Maintainable Code
Writing Maintainable Code
 
FOSDEM - Does your configuration code smell?
FOSDEM - Does your configuration code smell?FOSDEM - Does your configuration code smell?
FOSDEM - Does your configuration code smell?
 
Achieving Design Agility by Refactoring Design Smells
Achieving Design Agility by Refactoring Design SmellsAchieving Design Agility by Refactoring Design Smells
Achieving Design Agility by Refactoring Design Smells
 
Does your configuration code smell?
Does your configuration code smell?Does your configuration code smell?
Does your configuration code smell?
 
Designite – Software Design Quality Assessment Tool
Designite – Software Design Quality Assessment ToolDesignite – Software Design Quality Assessment Tool
Designite – Software Design Quality Assessment Tool
 
Does Your Configuration Code Smell?
Does Your Configuration Code Smell?Does Your Configuration Code Smell?
Does Your Configuration Code Smell?
 
Technical debt - The elephant in the room
Technical debt - The elephant in the roomTechnical debt - The elephant in the room
Technical debt - The elephant in the room
 
Understanding software metrics
Understanding software metricsUnderstanding software metrics
Understanding software metrics
 
Pragmatic Technical Debt Management
Pragmatic Technical Debt ManagementPragmatic Technical Debt Management
Pragmatic Technical Debt Management
 
Tools for Identifying and Addressing Technical Debt
Tools for Identifying and Addressing Technical DebtTools for Identifying and Addressing Technical Debt
Tools for Identifying and Addressing Technical Debt
 
Infographic - Pragmatic Technical Debt Management
Infographic - Pragmatic Technical Debt ManagementInfographic - Pragmatic Technical Debt Management
Infographic - Pragmatic Technical Debt Management
 
Does your design smell?
Does your design smell?Does your design smell?
Does your design smell?
 
Refactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 TutorialRefactoring for Design Smells - ICSE 2014 Tutorial
Refactoring for Design Smells - ICSE 2014 Tutorial
 

Recently uploaded

AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 

Recently uploaded (20)

tonesoftg
tonesoftgtonesoftg
tonesoftg
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 

Refactoring for Software Design Smells: Managing Technical Debt

  • 1. Abstraction MissingAbstraction This smell arises when clumps of data or encoded strings are used instead of creating a class or an interface. ImperativeAbstraction This smell arises when an operation is turned into a class. IncompleteAbstraction This smell arises when an abstraction does not support complementary or interrelated methods completely. MultifacetedAbstraction This smell arises when an abstraction has more than one responsibility assigned to it. UnnecessaryAbstraction This smell occurs when an abstraction which is actually not needed (and thus could have been avoided) gets introduced in a software design. UnutilizedAbstraction This smell arises when an abstraction is left unused (either not directly used or not reachable). DuplicateAbstraction This smell arises when two or more abstractions have the identical name or identical implementation or both. Encapsulation DeficientEncapsulation This smell occurs when the declared accessibility of one or more members of an abstraction is more permissive than actually required. LeakyEncapsulation This smell arises when an abstraction “exposes” or “leaks” implementation details through its public interface. MissingEncapsulation This smell occurs when the encapsulation of implementation variations in a type or hierarchy is missing. UnexploitedEncapsulation This smell arises when client code uses explicit type checks(using chained if-else or switch statements) instead of exploiting the variation in types already encapsulated within a hierarchy. Modularization Hierarchy MissingHierarchy DeepHierarchy Modularization BrokenModularization This smell arises when data and/or methods that ideally should have been localized into a single abstraction are separated and spread acrossmultiple abstractions. InsufficientModularization This smell arises when an abstraction exists that has not been completely decomposed and a further decomposition could reduce its size, implementation complexity, or both. Cyclically-dependent Modularization This smell arises when two or more abstractions depend on each other directly or indirectly (creating a tight coupling between the abstractions). Hub-likeModularization This smell arises when an abstraction has dependencies (both incoming and outgoing) with large number of other abstractions. MissingHierarchy This smell arises when a code segment uses conditional logic (typically in conjunction with “tagged types”) to explicitly manage variation in behavior where a hierarchy could have been created and used to encapsulate those variations. UnnecessaryHierarchy This smell arises when the whole inheritance hierarchy is unnecessary, indicating that inheritancehas been applied needlessly for the particulardesign context. UnfactoredHierarchy This smell arises when there is unnecessary duplication among types in the hierarchy. WideHierarchy This smell arises when an inheritance hierarchy is “too” wide indicating that intermediate abstractions may be missing. SpeculativeHierarchy This smell arises when one or more types in a hierarchy are provided speculatively (i.e. based on imagined needs rather than real requirements). DeepHierarchy This smell arises when an inheritance hierarchy is "excessively" deep. RebelliousHierarchy This smell arises when a subtype rejects the methods provided by its supertype(s). BrokenHierarchy This smell arises when a supertype and its subtype conceptually do not share an “IS-A” relationship resulting in broken substitutability. MultipathHierarchy This smell arises when a subtype inherits both directly as well as indirectly from a supertype leading to unnecessary inheritance paths in the hierarchy. CyclicHierarchy This smell arises when a supertype in a hierarchy depends on any of its subtypes. Authors:Girish Suryanarayana, Ganesh Samarthyam,Tushar Sharma Publisher:Morgan Kaufmann Publicationdate:Nov 2014