SlideShare a Scribd company logo
Refactoring for Software Design Smells
A Visual Overview
Link: http://amzn.com/0128013974
This presentation is
about our successful
book on refactoring.
Link: http://amzn.com/0128013974
You can view smells
as violation of
fundamental design
principles; our book
catalogs 25 design
smells
In this book, we
focus only on
“structural” and
“design” smells
You can apply the
principles of abstract,
encapsulation
modularisation and
hierarchy proactively
through these key
enabling techniques
Published	in	Journal	of	Object	Technology	(Vol.	12,	No.	2,	2013)	
  S	G	Ganesh,	Tushar	Sharma,	Girish	Suryanarayana.		Towards	a	Principle-based	
Classifica4on	of	Structural	Design	Smells.		In	Journal	of	Object	Technology,	vol.	
12,	no.	2,	2013,	pages	1:1–29.doi:10.5381/jot.2013.12.2.a1	
  URL:	hLp://www.jot.fm/issues/issue_2013_06/arPcle1.pdf	(open	access)
Published	in	Journal	of	Object	Technology	(Vol.	12,	No.	2,	2013)	
  S	G	Ganesh,	Tushar	Sharma,	Girish	Suryanarayana.		Towards	a	Principle-based	
Classifica4on	of	Structural	Design	Smells.		In	Journal	of	Object	Technology,	vol.	
12,	no.	2,	2013,	pages	1:1–29.doi:10.5381/jot.2013.12.2.a1	
  URL:	hLp://www.jot.fm/issues/issue_2013_06/arPcle1.pdf	(open	access)		
It all started with
our initial paper on
classifying smells; we
got really positive
review comments,
which encouraged us
to work further to
write it as a book
Our refactoring book
is now being
translated to other
languages; here is the
Korean translation of
the book!
Our work is being
well-received when
we present in top
conferences
We have written
many related articles
on this topic (this
article was published
in July 2015 in IEEE
Software magazine -
http://t.co/SiirTVDNa2)
We have presented in
many tutorials/
workshops across the
world - Tushar
presented this one in
DevWeek ’15
We have conducted
numerous workshops
on design smells
(this certificate is
from a workshop
organised by IEEE in
June 2015)
It’s a joy to see
people get “aha!”
moments and get
deeper
understanding when
they solve exercises
based on the book
(this picture was
taken during an
exercise in ICSE ’14
tutorial)
Developers and
architects have
picked up our design
smells work; here is
a Jam packed session
(100+ on-site and
180+ online
attendees) on Design
Smells in Siemens
PLM (Pune) in May
2016
People give awesome
feedback for our
training programs on
refactoring & design
smells
Check out Designite
tool (for C#) that
detects many smells
described in our
book and classifies
them based on
principles they
violate
(http://www:designite-tools:com/)
“Given its practical orientation and
the variety of real-world examples
offered throughout the book, this
is a must-have for any practicing
software engineer, developer,
software architect, or anyone else
interested in software design. This
book would also provide a good
introduction to real-world
problems in the context of a
software design or architecture
course."
- Extract from the book review in “ACM
Computing Reviews”
“Given its practical orientation and
the variety of real-world examples
offered throughout the book, this
is a must-have for any practicing
software engineer, developer,
software architect, or anyone else
interested in software design. This
book would also provide a good
introduction to real-world
problems in the context of a
software design or architecture
course."
- Extract from the book review in “ACM
Computing Reviews”
Numerous positive
reviews have
appeared for the
book; here is an
extract from one
such review
"This is a good book about ‘Design
Smells’ – actually a great book –
nicely organized - clearly written
with plenty of examples and a fair
sprinkling of anecdotes."
- Will Tracz (Principal Research Scientist
& Fellow, Lockheed Martin)
"This is a good book about ‘Design
Smells’ – actually a great book –
nicely organized - clearly written
with plenty of examples and a fair
sprinkling of anecdotes."
- Will Tracz (Principal Research Scientist
& Fellow, Lockheed Martin)
This quote is from
the book review in
ACM SIGSOFT
Software Engineering
Notes
Here is Tushar’s
recent work is on
detecting
configuration smells
(in Puppet code:
https://t.co/
RuypoQiNek)
We are also working
on the emerging
topic of architecture
smells and
refactoring (this
image from JDK 7
shows a tangle - an
architecture smell)
Refactoring for Software Design Smells
Abst%action
Missing Abst%action
This	smell	arises	when	clumps	of	data	or	
encoded	strings	are	used	instead	of	crea5ng	
a	class	or	an	interface.	
Imperative Abst%action
This	smell	arises	when	an	opera5on	is	
turned	into	a	class.		
Incomplete Abst%action
This	smell	arises	when	an	abstrac5on	does	
not	support	complementary	or	interrelated	
methods	completely.	
Multifaceted Abst%action
This	smell	arises	when	an	abstrac5on	has	
more	than	one	responsibility	assigned	to	it.	
Unnecessar9 Abst%action
This	smell	occurs	when	an	abstrac5on	which	
is	actually	not	needed	(and	thus	could	have	
been	avoided)	gets	introduced	in	a	so<ware	
design.		
Unutilized Abst%action
This	smell	arises	when	an	abstrac5on	is	le<	
unused	(either	not	directly	used	or	not	
reachable).	
Duplicate Abst%action
This	smell	arises	when	two	or	more	
abstrac5ons	have	the	iden5cal	name	or	
iden5cal	implementa5on	or	both.		
Encapsulation
Deficient Encapsulation
This	smell	occurs	when	the	declared	accessibility	
of	one	or	more	members	of	an	abstrac5on	is	
more	permissive	than	actually	required.	
Leaky Encapsulation
This	smell	arises	when	an	abstrac5on	“exposes”	
or	“leaks”	implementa5on	details	through	its	
public	interface.	
Missing Encapsulation
This	smell	occurs	when	the	encapsula5on	of	
implementa5on	varia5ons	in	a	type	or	hierarchy	
is	missing.	
UnexBloited Encapsulation
This	smell	arises	when	client	code	uses	explicit	
type	checks(using	chained	if-else	or	switch	
statements)	instead	of	exploi5ng	the	varia5on	in	
types	already	encapsulated	within	a	hierarchy.	
Modularization
Broken Modularization
This	smell	arises	when	data	and/or	methods	
that	ideally	should	have	been	localized	into	a	
single	abstrac5on	are	separated	and	spread	
across	mul5ple	abstrac5ons.	
Insufficient Modularization
This	smell	arises	when	an	abstrac5on	exists	that	
has	not	been	completely	decomposed	and	a	
further	decomposi5on	could	reduce	its	size,	
implementa5on	complexity,	or	both.		
Cyclically- dependent
Modularization
This	smell	arises	when	two	or	more	abstrac5ons	
depend	on	each	other	directly	or	indirectly	
(crea5ng	a	5ght	coupling	between	the	
abstrac5ons).		
Hub-like Modularization
This	smell	arises	when	an	abstrac5on	has	
dependencies	(both	incoming	and	outgoing)	
with	large	number	of	other	abstrac5ons.	
Hierarchy
Missing Hierarchy
This	smell	arises	when	a	code	segment	uses	
condi5onal	logic	(typically	in	conjunc5on	with	
“tagged	types”)	to	explicitly	manage	varia5on	in	
behavior	where	a	hierarchy	could	have	been	
created	and	used	to	encapsulate	those	
varia5ons.		
Unnecessar9 Hierarchy
This	smell	arises	when	the	whole	inheritance	
hierarchy	is	unnecessary,	indica5ng	that	
inheritance	has	been	applied	needlessly	for	the	
par5cular	design	context.		
Unfactored Hierarchy
This	smell	arises	when	there	is	unnecessary	
duplica5on	among	types	in	the	hierarchy.	
Wide Hierarchy
This	smell	arises	when	an	inheritance	hierarchy	
is	“too”	wide	indica5ng	that	intermediate	
abstrac5ons	may	be	missing.		
Speculative Hierarchy
This	smell	arises	when	one	or	more	types	in	a	
hierarchy	are	provided	specula5vely	(i.e.	based	
on	imagined	needs	rather	than	real	
requirements).	
Deep Hierarchy
This	smell	arises	when	an	inheritance	hierarchy	
is	"excessively"	deep.		
Rebellious Hierarchy
This	smell	arises	when	a	subtype	rejects	the	
methods	provided	by	its	supertype(s).		
Broken Hierarchy
This	smell	arises	when	a	supertype	and	its	
subtype	conceptually	do	not	share	an	“IS-A”	
rela5onship	resul5ng	in	broken	subs5tutability.		
Multipath Hierarchy
This	smell	arises	when	a	subtype	inherits	both	
directly	as	well	as	indirectly	from	a	supertype	
leading	to	unnecessary	inheritance	paths	in	the	
hierarchy.		
Cyclic Hierarchy
This	smell	arises	when	a	supertype	in	a	
hierarchy	depends	on	any	of	its	subtypes.		
“Refactoring for SoſtNare DesigO
Smells: Managing Technical Debt”,
Girish Sur9anarayana, Ganesh
SamarUhyam, Tushar SharVa, ISBN:
978-0128013977, Morgan KaufVann/
Elsevier, 2014
http://www.amazon.in/dp/935107305X
hbB://amzn.com/0128013974
Refactoring for Software Design Smells
Abst%action
Missing Abst%action
This	smell	arises	when	clumps	of	data	or	
encoded	strings	are	used	instead	of	crea5ng	
a	class	or	an	interface.	
Imperative Abst%action
This	smell	arises	when	an	opera5on	is	
turned	into	a	class.		
Incomplete Abst%action
This	smell	arises	when	an	abstrac5on	does	
not	support	complementary	or	interrelated	
methods	completely.	
Multifaceted Abst%action
This	smell	arises	when	an	abstrac5on	has	
more	than	one	responsibility	assigned	to	it.	
Unnecessar9 Abst%action
This	smell	occurs	when	an	abstrac5on	which	
is	actually	not	needed	(and	thus	could	have	
been	avoided)	gets	introduced	in	a	so<ware	
design.		
Unutilized Abst%action
This	smell	arises	when	an	abstrac5on	is	le<	
unused	(either	not	directly	used	or	not	
reachable).	
Duplicate Abst%action
This	smell	arises	when	two	or	more	
abstrac5ons	have	the	iden5cal	name	or	
iden5cal	implementa5on	or	both.		
Encapsulation
Deficient Encapsulation
This	smell	occurs	when	the	declared	accessibility	
of	one	or	more	members	of	an	abstrac5on	is	
more	permissive	than	actually	required.	
Leaky Encapsulation
This	smell	arises	when	an	abstrac5on	“exposes”	
or	“leaks”	implementa5on	details	through	its	
public	interface.	
Missing Encapsulation
This	smell	occurs	when	the	encapsula5on	of	
implementa5on	varia5ons	in	a	type	or	hierarchy	
is	missing.	
UnexBloited Encapsulation
This	smell	arises	when	client	code	uses	explicit	
type	checks(using	chained	if-else	or	switch	
statements)	instead	of	exploi5ng	the	varia5on	in	
types	already	encapsulated	within	a	hierarchy.	
Modularization
Broken Modularization
This	smell	arises	when	data	and/or	methods	
that	ideally	should	have	been	localized	into	a	
single	abstrac5on	are	separated	and	spread	
across	mul5ple	abstrac5ons.	
Insufficient Modularization
This	smell	arises	when	an	abstrac5on	exists	that	
has	not	been	completely	decomposed	and	a	
further	decomposi5on	could	reduce	its	size,	
implementa5on	complexity,	or	both.		
Cyclically- dependent
Modularization
This	smell	arises	when	two	or	more	abstrac5ons	
depend	on	each	other	directly	or	indirectly	
(crea5ng	a	5ght	coupling	between	the	
abstrac5ons).		
Hub-like Modularization
This	smell	arises	when	an	abstrac5on	has	
dependencies	(both	incoming	and	outgoing)	
with	large	number	of	other	abstrac5ons.	
Hierarchy
Missing Hierarchy
This	smell	arises	when	a	code	segment	uses	
condi5onal	logic	(typically	in	conjunc5on	with	
“tagged	types”)	to	explicitly	manage	varia5on	in	
behavior	where	a	hierarchy	could	have	been	
created	and	used	to	encapsulate	those	
varia5ons.		
Unnecessar9 Hierarchy
This	smell	arises	when	the	whole	inheritance	
hierarchy	is	unnecessary,	indica5ng	that	
inheritance	has	been	applied	needlessly	for	the	
par5cular	design	context.		
Unfactored Hierarchy
This	smell	arises	when	there	is	unnecessary	
duplica5on	among	types	in	the	hierarchy.	
Wide Hierarchy
This	smell	arises	when	an	inheritance	hierarchy	
is	“too”	wide	indica5ng	that	intermediate	
abstrac5ons	may	be	missing.		
Speculative Hierarchy
This	smell	arises	when	one	or	more	types	in	a	
hierarchy	are	provided	specula5vely	(i.e.	based	
on	imagined	needs	rather	than	real	
requirements).	
Deep Hierarchy
This	smell	arises	when	an	inheritance	hierarchy	
is	"excessively"	deep.		
Rebellious Hierarchy
This	smell	arises	when	a	subtype	rejects	the	
methods	provided	by	its	supertype(s).		
Broken Hierarchy
This	smell	arises	when	a	supertype	and	its	
subtype	conceptually	do	not	share	an	“IS-A”	
rela5onship	resul5ng	in	broken	subs5tutability.		
Multipath Hierarchy
This	smell	arises	when	a	subtype	inherits	both	
directly	as	well	as	indirectly	from	a	supertype	
leading	to	unnecessary	inheritance	paths	in	the	
hierarchy.		
Cyclic Hierarchy
This	smell	arises	when	a	supertype	in	a	
hierarchy	depends	on	any	of	its	subtypes.		
“Refactoring for SoſtNare DesigO
Smells: Managing Technical Debt”,
Girish Sur9anarayana, Ganesh
SamarUhyam, Tushar SharVa, ISBN:
978-0128013977, Morgan KaufVann/
Elsevier, 2014
http://www.amazon.in/dp/935107305X
hbB://amzn.com/0128013974
Download free
supporting material
from our website
www.designsmells.com
(this poster is
available for
download here)
Best of the
developers read
high-quality books to
hone their skills;
hope you’ll enhance
your book of
technical books by
adding our book!
ganesh.samarthyam@gmail.com
@GSamarthyam
www.designsmells.com
@designsmells

More Related Content

What's hot

Comparison between waterfall model and spiral model
Comparison between waterfall model and spiral modelComparison between waterfall model and spiral model
Comparison between waterfall model and spiral modelGalaxyy Pandey
 
Process model in Software engeneering
Process model in Software engeneering Process model in Software engeneering
Process model in Software engeneering
International Center for Chemical & Biological Sciences
 
Software process versus design quality a tug of war - ieee software july 2015
Software process versus design quality   a tug of war - ieee software july 2015Software process versus design quality   a tug of war - ieee software july 2015
Software process versus design quality a tug of war - ieee software july 2015
Ganesh Samarthyam
 
SE2_Lec 19_Design Principles and Design Patterns
SE2_Lec 19_Design Principles and Design PatternsSE2_Lec 19_Design Principles and Design Patterns
SE2_Lec 19_Design Principles and Design Patterns
Amr E. Mohamed
 
Software engineering Questions and Answers
Software engineering Questions and AnswersSoftware engineering Questions and Answers
Software engineering Questions and AnswersBala Ganesh
 
SE18_Lec 00_Course Outline
SE18_Lec 00_Course OutlineSE18_Lec 00_Course Outline
SE18_Lec 00_Course Outline
Amr E. Mohamed
 
Chap2
Chap2Chap2
Chap2Niit
 
Soft Eng - Software Process
Soft  Eng - Software ProcessSoft  Eng - Software Process
Soft Eng - Software ProcessJomel Penalba
 
Software Engineering
Software Engineering Software Engineering
Software Engineering
JayaKamal
 
[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLES[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLES
Ivano Malavolta
 
Chapter five HCI
Chapter five HCIChapter five HCI
Chapter five HCI
yihunie ayalew
 
Chapter 01 software engineering pressman
Chapter 01  software engineering pressmanChapter 01  software engineering pressman
Chapter 01 software engineering pressman
RohitGoyal183
 
Linux and Java - Understanding and Troubleshooting
Linux and Java - Understanding and TroubleshootingLinux and Java - Understanding and Troubleshooting
Linux and Java - Understanding and Troubleshooting
Jérôme Kehrli
 
Software systems engineering PRINCIPLES
Software systems engineering PRINCIPLESSoftware systems engineering PRINCIPLES
Software systems engineering PRINCIPLES
Ivano Malavolta
 
SE18_SE_Lec 12_ Project Management 1
SE18_SE_Lec 12_ Project Management 1SE18_SE_Lec 12_ Project Management 1
SE18_SE_Lec 12_ Project Management 1
Amr E. Mohamed
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
Pramod Parajuli
 
Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020 Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020
MuhammadTalha436
 
System development approaches
System development approachesSystem development approaches
System development approaches
Jaipal Dhobale
 
Design concepts
Design conceptsDesign concepts
Design concepts
JoshuaU1
 

What's hot (20)

Comparison between waterfall model and spiral model
Comparison between waterfall model and spiral modelComparison between waterfall model and spiral model
Comparison between waterfall model and spiral model
 
Process model in Software engeneering
Process model in Software engeneering Process model in Software engeneering
Process model in Software engeneering
 
Software process versus design quality a tug of war - ieee software july 2015
Software process versus design quality   a tug of war - ieee software july 2015Software process versus design quality   a tug of war - ieee software july 2015
Software process versus design quality a tug of war - ieee software july 2015
 
SE2_Lec 19_Design Principles and Design Patterns
SE2_Lec 19_Design Principles and Design PatternsSE2_Lec 19_Design Principles and Design Patterns
SE2_Lec 19_Design Principles and Design Patterns
 
Software engineering Questions and Answers
Software engineering Questions and AnswersSoftware engineering Questions and Answers
Software engineering Questions and Answers
 
SE18_Lec 00_Course Outline
SE18_Lec 00_Course OutlineSE18_Lec 00_Course Outline
SE18_Lec 00_Course Outline
 
Chap2
Chap2Chap2
Chap2
 
Soft Eng - Software Process
Soft  Eng - Software ProcessSoft  Eng - Software Process
Soft Eng - Software Process
 
Ch4
Ch4Ch4
Ch4
 
Software Engineering
Software Engineering Software Engineering
Software Engineering
 
[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLES[2015/2016] Software systems engineering PRINCIPLES
[2015/2016] Software systems engineering PRINCIPLES
 
Chapter five HCI
Chapter five HCIChapter five HCI
Chapter five HCI
 
Chapter 01 software engineering pressman
Chapter 01  software engineering pressmanChapter 01  software engineering pressman
Chapter 01 software engineering pressman
 
Linux and Java - Understanding and Troubleshooting
Linux and Java - Understanding and TroubleshootingLinux and Java - Understanding and Troubleshooting
Linux and Java - Understanding and Troubleshooting
 
Software systems engineering PRINCIPLES
Software systems engineering PRINCIPLESSoftware systems engineering PRINCIPLES
Software systems engineering PRINCIPLES
 
SE18_SE_Lec 12_ Project Management 1
SE18_SE_Lec 12_ Project Management 1SE18_SE_Lec 12_ Project Management 1
SE18_SE_Lec 12_ Project Management 1
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
 
Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020 Software Engineering Solved Past Paper 2020
Software Engineering Solved Past Paper 2020
 
System development approaches
System development approachesSystem development approaches
System development approaches
 
Design concepts
Design conceptsDesign concepts
Design concepts
 

Similar to Refactoring for Software Design Smells Book - A Visual Overview

Effective Architecting: Best Practices for Software Architects
Effective Architecting: Best Practices for Software ArchitectsEffective Architecting: Best Practices for Software Architects
Effective Architecting: Best Practices for Software Architects
Ganesh Samarthyam
 
How to Write Abstracts (for White Papers, Research Papers, ...)
How to Write Abstracts (for White Papers, Research Papers, ...)How to Write Abstracts (for White Papers, Research Papers, ...)
How to Write Abstracts (for White Papers, Research Papers, ...)
Ganesh Samarthyam
 
How to Write Abstracts
How to Write AbstractsHow to Write Abstracts
How to Write Abstracts
CodeOps Technologies LLP
 
.Net design pattern
.Net design pattern.Net design pattern
.Net design pattern
Mohamed Zakarya Abdelgawad
 
Refactoring guided by design principles driven by technical debt
Refactoring   guided by design principles driven by technical debtRefactoring   guided by design principles driven by technical debt
Refactoring guided by design principles driven by technical debt
Ganesh Samarthyam
 
On System Design
On System DesignOn System Design
On System Design
mustafa sarac
 
Towards a Principle-based Classification of Structural Design Smells
Towards a Principle-based Classification of Structural Design SmellsTowards a Principle-based Classification of Structural Design Smells
Towards a Principle-based Classification of Structural Design Smells
Tushar Sharma
 
Generation of Automatic Code using Design Patterns
Generation of Automatic Code using Design PatternsGeneration of Automatic Code using Design Patterns
Generation of Automatic Code using Design Patterns
IRJET Journal
 
Organisering av digitale prosjekt: Hva har IT-bransjen lært om store prosjekter?
Organisering av digitale prosjekt: Hva har IT-bransjen lært om store prosjekter?Organisering av digitale prosjekt: Hva har IT-bransjen lært om store prosjekter?
Organisering av digitale prosjekt: Hva har IT-bransjen lært om store prosjekter?
Torgeir Dingsøyr
 
Unit iii design patterns 9
Unit iii design patterns 9Unit iii design patterns 9
Unit iii design patterns 9
kiruthikamurugesan2628
 
Software Patterns
Software PatternsSoftware Patterns
Software Patterns
kim.mens
 
Modest Formalization of Software Design Patterns
Modest Formalization of Software Design PatternsModest Formalization of Software Design Patterns
Modest Formalization of Software Design Patterns
International Journal of Latest Research in Engineering and Technology
 
The Good the Bad and the Ugly of Dealing with Smelly Code (ITAKE Unconference)
The Good the Bad and the Ugly of Dealing with Smelly Code (ITAKE Unconference)The Good the Bad and the Ugly of Dealing with Smelly Code (ITAKE Unconference)
The Good the Bad and the Ugly of Dealing with Smelly Code (ITAKE Unconference)
Radu Marinescu
 
MELJUN CORTES research seminar_1_introductory_lectures_research_seminar_1
MELJUN CORTES research seminar_1_introductory_lectures_research_seminar_1MELJUN CORTES research seminar_1_introductory_lectures_research_seminar_1
MELJUN CORTES research seminar_1_introductory_lectures_research_seminar_1
MELJUN CORTES
 
Agile Architecture: Ideals, History, and a New Hope
Agile Architecture: Ideals, History, and a New HopeAgile Architecture: Ideals, History, and a New Hope
Agile Architecture: Ideals, History, and a New Hope
Gary Pedretti
 
Mobile phone based domestic electrical equipment controller
Mobile phone based domestic electrical equipment controllerMobile phone based domestic electrical equipment controller
Mobile phone based domestic electrical equipment controller
Amila Srimaal Gamage
 
Ptidej Architecture, Design, and Implementation in Action v2.1
Ptidej Architecture, Design, and Implementation in Action v2.1Ptidej Architecture, Design, and Implementation in Action v2.1
Ptidej Architecture, Design, and Implementation in Action v2.1
Yann-Gaël Guéhéneuc
 
Software Systems Requirements Engineering
Software Systems Requirements EngineeringSoftware Systems Requirements Engineering
Software Systems Requirements Engineering
Kristen Wilson
 
Essential java script design patterns
Essential java script design patternsEssential java script design patterns
Essential java script design patternsgaiashare
 

Similar to Refactoring for Software Design Smells Book - A Visual Overview (20)

Effective Architecting: Best Practices for Software Architects
Effective Architecting: Best Practices for Software ArchitectsEffective Architecting: Best Practices for Software Architects
Effective Architecting: Best Practices for Software Architects
 
How to Write Abstracts (for White Papers, Research Papers, ...)
How to Write Abstracts (for White Papers, Research Papers, ...)How to Write Abstracts (for White Papers, Research Papers, ...)
How to Write Abstracts (for White Papers, Research Papers, ...)
 
How to Write Abstracts
How to Write AbstractsHow to Write Abstracts
How to Write Abstracts
 
.Net design pattern
.Net design pattern.Net design pattern
.Net design pattern
 
Refactoring guided by design principles driven by technical debt
Refactoring   guided by design principles driven by technical debtRefactoring   guided by design principles driven by technical debt
Refactoring guided by design principles driven by technical debt
 
On System Design
On System DesignOn System Design
On System Design
 
Towards a Principle-based Classification of Structural Design Smells
Towards a Principle-based Classification of Structural Design SmellsTowards a Principle-based Classification of Structural Design Smells
Towards a Principle-based Classification of Structural Design Smells
 
Generation of Automatic Code using Design Patterns
Generation of Automatic Code using Design PatternsGeneration of Automatic Code using Design Patterns
Generation of Automatic Code using Design Patterns
 
Organisering av digitale prosjekt: Hva har IT-bransjen lært om store prosjekter?
Organisering av digitale prosjekt: Hva har IT-bransjen lært om store prosjekter?Organisering av digitale prosjekt: Hva har IT-bransjen lært om store prosjekter?
Organisering av digitale prosjekt: Hva har IT-bransjen lært om store prosjekter?
 
Unit iii design patterns 9
Unit iii design patterns 9Unit iii design patterns 9
Unit iii design patterns 9
 
Software Patterns
Software PatternsSoftware Patterns
Software Patterns
 
Modest Formalization of Software Design Patterns
Modest Formalization of Software Design PatternsModest Formalization of Software Design Patterns
Modest Formalization of Software Design Patterns
 
Architects and design-org
Architects and design-orgArchitects and design-org
Architects and design-org
 
The Good the Bad and the Ugly of Dealing with Smelly Code (ITAKE Unconference)
The Good the Bad and the Ugly of Dealing with Smelly Code (ITAKE Unconference)The Good the Bad and the Ugly of Dealing with Smelly Code (ITAKE Unconference)
The Good the Bad and the Ugly of Dealing with Smelly Code (ITAKE Unconference)
 
MELJUN CORTES research seminar_1_introductory_lectures_research_seminar_1
MELJUN CORTES research seminar_1_introductory_lectures_research_seminar_1MELJUN CORTES research seminar_1_introductory_lectures_research_seminar_1
MELJUN CORTES research seminar_1_introductory_lectures_research_seminar_1
 
Agile Architecture: Ideals, History, and a New Hope
Agile Architecture: Ideals, History, and a New HopeAgile Architecture: Ideals, History, and a New Hope
Agile Architecture: Ideals, History, and a New Hope
 
Mobile phone based domestic electrical equipment controller
Mobile phone based domestic electrical equipment controllerMobile phone based domestic electrical equipment controller
Mobile phone based domestic electrical equipment controller
 
Ptidej Architecture, Design, and Implementation in Action v2.1
Ptidej Architecture, Design, and Implementation in Action v2.1Ptidej Architecture, Design, and Implementation in Action v2.1
Ptidej Architecture, Design, and Implementation in Action v2.1
 
Software Systems Requirements Engineering
Software Systems Requirements EngineeringSoftware Systems Requirements Engineering
Software Systems Requirements Engineering
 
Essential java script design patterns
Essential java script design patternsEssential java script design patterns
Essential java script design patterns
 

More from Ganesh Samarthyam

Wonders of the Sea
Wonders of the SeaWonders of the Sea
Wonders of the Sea
Ganesh Samarthyam
 
Animals - for kids
Animals - for kids Animals - for kids
Animals - for kids
Ganesh Samarthyam
 
Applying Refactoring Tools in Practice
Applying Refactoring Tools in PracticeApplying Refactoring Tools in Practice
Applying Refactoring Tools in Practice
Ganesh Samarthyam
 
CFP - 1st Workshop on “AI Meets Blockchain”
CFP - 1st Workshop on “AI Meets Blockchain”CFP - 1st Workshop on “AI Meets Blockchain”
CFP - 1st Workshop on “AI Meets Blockchain”
Ganesh Samarthyam
 
Great Coding Skills Aren't Enough
Great Coding Skills Aren't EnoughGreat Coding Skills Aren't Enough
Great Coding Skills Aren't Enough
Ganesh Samarthyam
 
College Project - Java Disassembler - Description
College Project - Java Disassembler - DescriptionCollege Project - Java Disassembler - Description
College Project - Java Disassembler - Description
Ganesh Samarthyam
 
Coding Guidelines - Crafting Clean Code
Coding Guidelines - Crafting Clean CodeCoding Guidelines - Crafting Clean Code
Coding Guidelines - Crafting Clean Code
Ganesh Samarthyam
 
Design Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on ExamplesDesign Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on Examples
Ganesh Samarthyam
 
Bangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Brief PresentationBangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Brief Presentation
Ganesh Samarthyam
 
Bangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - PosterBangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - Poster
Ganesh Samarthyam
 
Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)
Ganesh Samarthyam
 
OO Design and Design Patterns in C++
OO Design and Design Patterns in C++ OO Design and Design Patterns in C++
OO Design and Design Patterns in C++
Ganesh Samarthyam
 
Bangalore Container Conference 2017 - Sponsorship Deck
Bangalore Container Conference 2017 - Sponsorship DeckBangalore Container Conference 2017 - Sponsorship Deck
Bangalore Container Conference 2017 - Sponsorship Deck
Ganesh Samarthyam
 
Let's Go: Introduction to Google's Go Programming Language
Let's Go: Introduction to Google's Go Programming LanguageLet's Go: Introduction to Google's Go Programming Language
Let's Go: Introduction to Google's Go Programming Language
Ganesh Samarthyam
 
Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction
Ganesh Samarthyam
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz Questions
Ganesh Samarthyam
 
Java Generics - by Example
Java Generics - by ExampleJava Generics - by Example
Java Generics - by Example
Ganesh Samarthyam
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz Questions
Ganesh Samarthyam
 
Docker by Example - Quiz
Docker by Example - QuizDocker by Example - Quiz
Docker by Example - Quiz
Ganesh Samarthyam
 
Core Java: Best practices and bytecodes quiz
Core Java: Best practices and bytecodes quizCore Java: Best practices and bytecodes quiz
Core Java: Best practices and bytecodes quiz
Ganesh Samarthyam
 

More from Ganesh Samarthyam (20)

Wonders of the Sea
Wonders of the SeaWonders of the Sea
Wonders of the Sea
 
Animals - for kids
Animals - for kids Animals - for kids
Animals - for kids
 
Applying Refactoring Tools in Practice
Applying Refactoring Tools in PracticeApplying Refactoring Tools in Practice
Applying Refactoring Tools in Practice
 
CFP - 1st Workshop on “AI Meets Blockchain”
CFP - 1st Workshop on “AI Meets Blockchain”CFP - 1st Workshop on “AI Meets Blockchain”
CFP - 1st Workshop on “AI Meets Blockchain”
 
Great Coding Skills Aren't Enough
Great Coding Skills Aren't EnoughGreat Coding Skills Aren't Enough
Great Coding Skills Aren't Enough
 
College Project - Java Disassembler - Description
College Project - Java Disassembler - DescriptionCollege Project - Java Disassembler - Description
College Project - Java Disassembler - Description
 
Coding Guidelines - Crafting Clean Code
Coding Guidelines - Crafting Clean CodeCoding Guidelines - Crafting Clean Code
Coding Guidelines - Crafting Clean Code
 
Design Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on ExamplesDesign Patterns - Compiler Case Study - Hands-on Examples
Design Patterns - Compiler Case Study - Hands-on Examples
 
Bangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Brief PresentationBangalore Container Conference 2017 - Brief Presentation
Bangalore Container Conference 2017 - Brief Presentation
 
Bangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - PosterBangalore Container Conference 2017 - Poster
Bangalore Container Conference 2017 - Poster
 
Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)Software Design in Practice (with Java examples)
Software Design in Practice (with Java examples)
 
OO Design and Design Patterns in C++
OO Design and Design Patterns in C++ OO Design and Design Patterns in C++
OO Design and Design Patterns in C++
 
Bangalore Container Conference 2017 - Sponsorship Deck
Bangalore Container Conference 2017 - Sponsorship DeckBangalore Container Conference 2017 - Sponsorship Deck
Bangalore Container Conference 2017 - Sponsorship Deck
 
Let's Go: Introduction to Google's Go Programming Language
Let's Go: Introduction to Google's Go Programming LanguageLet's Go: Introduction to Google's Go Programming Language
Let's Go: Introduction to Google's Go Programming Language
 
Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction Google's Go Programming Language - Introduction
Google's Go Programming Language - Introduction
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz Questions
 
Java Generics - by Example
Java Generics - by ExampleJava Generics - by Example
Java Generics - by Example
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz Questions
 
Docker by Example - Quiz
Docker by Example - QuizDocker by Example - Quiz
Docker by Example - Quiz
 
Core Java: Best practices and bytecodes quiz
Core Java: Best practices and bytecodes quizCore Java: Best practices and bytecodes quiz
Core Java: Best practices and bytecodes quiz
 

Recently uploaded

Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Globus
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
abdulrafaychaudhry
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 

Recently uploaded (20)

Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...Developing Distributed High-performance Computing Capabilities of an Open Sci...
Developing Distributed High-performance Computing Capabilities of an Open Sci...
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
Pro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp BookPro Unity Game Development with C-sharp Book
Pro Unity Game Development with C-sharp Book
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus Compute wth IRI Workflows - GlobusWorld 2024
Globus Compute wth IRI Workflows - GlobusWorld 2024
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 

Refactoring for Software Design Smells Book - A Visual Overview

  • 1. Refactoring for Software Design Smells A Visual Overview
  • 3. This presentation is about our successful book on refactoring. Link: http://amzn.com/0128013974
  • 4.
  • 5. You can view smells as violation of fundamental design principles; our book catalogs 25 design smells
  • 6.
  • 7. In this book, we focus only on “structural” and “design” smells
  • 8.
  • 9. You can apply the principles of abstract, encapsulation modularisation and hierarchy proactively through these key enabling techniques
  • 12.
  • 13. Our refactoring book is now being translated to other languages; here is the Korean translation of the book!
  • 14.
  • 15. Our work is being well-received when we present in top conferences
  • 16.
  • 17. We have written many related articles on this topic (this article was published in July 2015 in IEEE Software magazine - http://t.co/SiirTVDNa2)
  • 18.
  • 19. We have presented in many tutorials/ workshops across the world - Tushar presented this one in DevWeek ’15
  • 20.
  • 21. We have conducted numerous workshops on design smells (this certificate is from a workshop organised by IEEE in June 2015)
  • 22.
  • 23. It’s a joy to see people get “aha!” moments and get deeper understanding when they solve exercises based on the book (this picture was taken during an exercise in ICSE ’14 tutorial)
  • 24.
  • 25. Developers and architects have picked up our design smells work; here is a Jam packed session (100+ on-site and 180+ online attendees) on Design Smells in Siemens PLM (Pune) in May 2016
  • 26.
  • 27. People give awesome feedback for our training programs on refactoring & design smells
  • 28.
  • 29. Check out Designite tool (for C#) that detects many smells described in our book and classifies them based on principles they violate (http://www:designite-tools:com/)
  • 30. “Given its practical orientation and the variety of real-world examples offered throughout the book, this is a must-have for any practicing software engineer, developer, software architect, or anyone else interested in software design. This book would also provide a good introduction to real-world problems in the context of a software design or architecture course." - Extract from the book review in “ACM Computing Reviews”
  • 31. “Given its practical orientation and the variety of real-world examples offered throughout the book, this is a must-have for any practicing software engineer, developer, software architect, or anyone else interested in software design. This book would also provide a good introduction to real-world problems in the context of a software design or architecture course." - Extract from the book review in “ACM Computing Reviews” Numerous positive reviews have appeared for the book; here is an extract from one such review
  • 32. "This is a good book about ‘Design Smells’ – actually a great book – nicely organized - clearly written with plenty of examples and a fair sprinkling of anecdotes." - Will Tracz (Principal Research Scientist & Fellow, Lockheed Martin)
  • 33. "This is a good book about ‘Design Smells’ – actually a great book – nicely organized - clearly written with plenty of examples and a fair sprinkling of anecdotes." - Will Tracz (Principal Research Scientist & Fellow, Lockheed Martin) This quote is from the book review in ACM SIGSOFT Software Engineering Notes
  • 34.
  • 35. Here is Tushar’s recent work is on detecting configuration smells (in Puppet code: https://t.co/ RuypoQiNek)
  • 36.
  • 37. We are also working on the emerging topic of architecture smells and refactoring (this image from JDK 7 shows a tangle - an architecture smell)
  • 38. Refactoring for Software Design Smells Abst%action Missing Abst%action This smell arises when clumps of data or encoded strings are used instead of crea5ng a class or an interface. Imperative Abst%action This smell arises when an opera5on is turned into a class. Incomplete Abst%action This smell arises when an abstrac5on does not support complementary or interrelated methods completely. Multifaceted Abst%action This smell arises when an abstrac5on has more than one responsibility assigned to it. Unnecessar9 Abst%action This smell occurs when an abstrac5on which is actually not needed (and thus could have been avoided) gets introduced in a so<ware design. Unutilized Abst%action This smell arises when an abstrac5on is le< unused (either not directly used or not reachable). Duplicate Abst%action This smell arises when two or more abstrac5ons have the iden5cal name or iden5cal implementa5on or both. Encapsulation Deficient Encapsulation This smell occurs when the declared accessibility of one or more members of an abstrac5on is more permissive than actually required. Leaky Encapsulation This smell arises when an abstrac5on “exposes” or “leaks” implementa5on details through its public interface. Missing Encapsulation This smell occurs when the encapsula5on of implementa5on varia5ons in a type or hierarchy is missing. UnexBloited Encapsulation This smell arises when client code uses explicit type checks(using chained if-else or switch statements) instead of exploi5ng the varia5on in types already encapsulated within a hierarchy. Modularization Broken Modularization This smell arises when data and/or methods that ideally should have been localized into a single abstrac5on are separated and spread across mul5ple abstrac5ons. Insufficient Modularization This smell arises when an abstrac5on exists that has not been completely decomposed and a further decomposi5on could reduce its size, implementa5on complexity, or both. Cyclically- dependent Modularization This smell arises when two or more abstrac5ons depend on each other directly or indirectly (crea5ng a 5ght coupling between the abstrac5ons). Hub-like Modularization This smell arises when an abstrac5on has dependencies (both incoming and outgoing) with large number of other abstrac5ons. Hierarchy Missing Hierarchy This smell arises when a code segment uses condi5onal logic (typically in conjunc5on with “tagged types”) to explicitly manage varia5on in behavior where a hierarchy could have been created and used to encapsulate those varia5ons. Unnecessar9 Hierarchy This smell arises when the whole inheritance hierarchy is unnecessary, indica5ng that inheritance has been applied needlessly for the par5cular design context. Unfactored Hierarchy This smell arises when there is unnecessary duplica5on among types in the hierarchy. Wide Hierarchy This smell arises when an inheritance hierarchy is “too” wide indica5ng that intermediate abstrac5ons may be missing. Speculative Hierarchy This smell arises when one or more types in a hierarchy are provided specula5vely (i.e. based on imagined needs rather than real requirements). Deep Hierarchy This smell arises when an inheritance hierarchy is "excessively" deep. Rebellious Hierarchy This smell arises when a subtype rejects the methods provided by its supertype(s). Broken Hierarchy This smell arises when a supertype and its subtype conceptually do not share an “IS-A” rela5onship resul5ng in broken subs5tutability. Multipath Hierarchy This smell arises when a subtype inherits both directly as well as indirectly from a supertype leading to unnecessary inheritance paths in the hierarchy. Cyclic Hierarchy This smell arises when a supertype in a hierarchy depends on any of its subtypes. “Refactoring for SoſtNare DesigO Smells: Managing Technical Debt”, Girish Sur9anarayana, Ganesh SamarUhyam, Tushar SharVa, ISBN: 978-0128013977, Morgan KaufVann/ Elsevier, 2014 http://www.amazon.in/dp/935107305X hbB://amzn.com/0128013974
  • 39. Refactoring for Software Design Smells Abst%action Missing Abst%action This smell arises when clumps of data or encoded strings are used instead of crea5ng a class or an interface. Imperative Abst%action This smell arises when an opera5on is turned into a class. Incomplete Abst%action This smell arises when an abstrac5on does not support complementary or interrelated methods completely. Multifaceted Abst%action This smell arises when an abstrac5on has more than one responsibility assigned to it. Unnecessar9 Abst%action This smell occurs when an abstrac5on which is actually not needed (and thus could have been avoided) gets introduced in a so<ware design. Unutilized Abst%action This smell arises when an abstrac5on is le< unused (either not directly used or not reachable). Duplicate Abst%action This smell arises when two or more abstrac5ons have the iden5cal name or iden5cal implementa5on or both. Encapsulation Deficient Encapsulation This smell occurs when the declared accessibility of one or more members of an abstrac5on is more permissive than actually required. Leaky Encapsulation This smell arises when an abstrac5on “exposes” or “leaks” implementa5on details through its public interface. Missing Encapsulation This smell occurs when the encapsula5on of implementa5on varia5ons in a type or hierarchy is missing. UnexBloited Encapsulation This smell arises when client code uses explicit type checks(using chained if-else or switch statements) instead of exploi5ng the varia5on in types already encapsulated within a hierarchy. Modularization Broken Modularization This smell arises when data and/or methods that ideally should have been localized into a single abstrac5on are separated and spread across mul5ple abstrac5ons. Insufficient Modularization This smell arises when an abstrac5on exists that has not been completely decomposed and a further decomposi5on could reduce its size, implementa5on complexity, or both. Cyclically- dependent Modularization This smell arises when two or more abstrac5ons depend on each other directly or indirectly (crea5ng a 5ght coupling between the abstrac5ons). Hub-like Modularization This smell arises when an abstrac5on has dependencies (both incoming and outgoing) with large number of other abstrac5ons. Hierarchy Missing Hierarchy This smell arises when a code segment uses condi5onal logic (typically in conjunc5on with “tagged types”) to explicitly manage varia5on in behavior where a hierarchy could have been created and used to encapsulate those varia5ons. Unnecessar9 Hierarchy This smell arises when the whole inheritance hierarchy is unnecessary, indica5ng that inheritance has been applied needlessly for the par5cular design context. Unfactored Hierarchy This smell arises when there is unnecessary duplica5on among types in the hierarchy. Wide Hierarchy This smell arises when an inheritance hierarchy is “too” wide indica5ng that intermediate abstrac5ons may be missing. Speculative Hierarchy This smell arises when one or more types in a hierarchy are provided specula5vely (i.e. based on imagined needs rather than real requirements). Deep Hierarchy This smell arises when an inheritance hierarchy is "excessively" deep. Rebellious Hierarchy This smell arises when a subtype rejects the methods provided by its supertype(s). Broken Hierarchy This smell arises when a supertype and its subtype conceptually do not share an “IS-A” rela5onship resul5ng in broken subs5tutability. Multipath Hierarchy This smell arises when a subtype inherits both directly as well as indirectly from a supertype leading to unnecessary inheritance paths in the hierarchy. Cyclic Hierarchy This smell arises when a supertype in a hierarchy depends on any of its subtypes. “Refactoring for SoſtNare DesigO Smells: Managing Technical Debt”, Girish Sur9anarayana, Ganesh SamarUhyam, Tushar SharVa, ISBN: 978-0128013977, Morgan KaufVann/ Elsevier, 2014 http://www.amazon.in/dp/935107305X hbB://amzn.com/0128013974 Download free supporting material from our website www.designsmells.com (this poster is available for download here)
  • 40.
  • 41. Best of the developers read high-quality books to hone their skills; hope you’ll enhance your book of technical books by adding our book!