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

  • 1.
  • 2.
    2 Technical debt “Technical debtis 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.
    3 Why care abouttechnical debt? Reference: Zen and the art of software quality – Jim Highsmith Agile 2009 conference
  • 4.
    4 What constitutes technicaldebt? … 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.
    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.
    6 How to improvedesign quality in practice?
  • 7.
  • 8.
    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.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
    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/