Ganesh Samarthyam (ganesh@konfhub.com)
2
Technical debt
“Technical debt is the debt that accrues
when you knowingly or unknowingly make
wrong or non-optimal design decisions”
Reference: Refatoring for Software Design Smells– Girish et al Morgan Kaufman 2014
3
Why care about technical debt?
Reference: Zen and the art of software quality – Jim Highsmith Agile 2009 conference
4
What constitutes technical debt?
…
Code debt
Static
analysis tool
violations
Inconsistent
coding style
Design debt
Design smells
Violations of
design rules
Test debt
Lack of tests
Inadequate
test coverage
Architecture debt
Lacking
structure (big
ball of mud)
Violation of
Architecture
Rules
5
What is refactoring?
Refactoring (noun): a change
made to the internal structure of
software to make it easier to
understand and cheaper to
modify without changing its
observable behavior
Refactor (verb): to restructure
software by applying a series
of refactorings without
changing its observable
behavior
6
How to improve design quality in practice?
7
We need tool help
8
Tools to explore
Jhawk
(Java)
CodeCity
(C++, Java, C#)
CppDepend
(C++)
Sotograph
(C++, Java, C#)
Imagix 4D
(C, C++, Java)
Lattix
(C/C++, Java, C#)
SolidSX
(C++, Java, C#)
Bauhaus
(C/C++, Java, C#)
Structure101
(Java, C#)
Understand
(C/C++, Java, C#)
Simian
(C/C++, Java, C#, …)
Jarchitect
(Java)
Ndepend
(C#)
Stan4J
(Java)
InFusion
(C/C++, Java)
InCode
(C/C++, Java)
9
Structural Analysis for Java (stan4j)
10
JArchitect
11
InFusion/InCode
12
PMD CPD
13
SotoArc
14
Lattix DSM
15
CodeCity
16
JHawk
17
SolidSx
18
Structure 101
19
Understand
20
Imagix 4D
21
Bauhaus
22
Eclipse IDE
23
Tool links
• Structure101: https://structure101.com/
• Jarchitect: https://www.jarchitect.com/
• Designite: http://www.designite-
tools.com/DesigniteJava/
• PMD CPD: https://pmd.github.io
• Stan4J: http://stan4j.com/
• IntelliJ IDEA: https://www.jetbrains.com/idea/
• Sotograph/SotoArc:
https://www.hello2morrow.com/products/sotograph
• Lattix: https://lattix.com/
• SolidSX: http://www.solidsourceit.com/

Applying Refactoring Tools in Practice