Refactor to the Limit!
1
1 Your Code Stinks!
2 JDeodorant
3 JMove
4 JSpIRIT
5 Stench Blossom
6 TopicViewer
7 iPlasma
8 The Plan
9 If I Had Time
10 Wrapup
Agenda
2
Your Code Stinks!
The following are from Object Oriented Metrics in Practice, Lanza & Marinescu (2004)
God Class – Performs too much work on its own and centralizes the intelligence of a system. Reduces
reusability, understandability, and maintainability of a class or subsystem.
Feature Envy – Method that is more interested in the data of other classes than its own class. The
method may be misplaced and should be moved to another class.
Data Class – “Dumb” data holders without complex functionality but other classes strongly rely on them.
Brain Method – Centralizes the functionality of a class, and is often hard to maintain and understand.
Is long, has excessive branching, deep nesting, and uses many local and instance variables.
Brain Class – Similar to God Classes in that they are large and complex, but do not abusively access the
data of “satellite” classes or are more cohesive. They have at least one Brain Method.
Intensive Coupling – A single client method is strongly coupled with only a few provider classes.
Dispersed Coupling – A single method is excessively tied to many other operations dispersed among
many classes.
Shotgun Surgery – A single method has many methods in other classes depending on it.
Refused Parent Bequest – Child class does not specialize its parent class
Tradition Breaker – Child class does not enhance / specialize the functionality of the parent class
Disharmonies We’ll be Talking About Today
3
Your Code Stinks!
How the Disharmonies are Related
From Object Oriented Metrics in Practice, Lanza & Marinescu (2004)
4
Your Code Stinks!
God Classes
• 5 – 7 times more change prone
• 4 – 19 times more bug prone
Dispersed Coupling
• Points to defect and maintenance prone classes
From the Technical Debt webinar at
https://fc-d.umd.edu/sites/default/files/Publications/ReportsAndPresentations/TD_webinar_11_11_10.pdf
The Worst Offenders
5
1 Your Code Stinks!
2 JDeodorant
3 JMove
4 JSpIRIT
5 Stench Blossom
6 TopicViewer
7 iPlasma
8 The Plan
9 If I Had Time
10 Wrapup
6
JDeodorant
Detects several code smells and provides actionable suggestions to remedy them:
• God Class
• Long Method
• Type Checking
• Feature Envy
• Duplicated Code (not discussed here)
Project site: http://users.encs.concordia.ca/~nikolaos/jdeodorant/
Written by a team of professors and PhD students
About JDeodorant
7
JDeodorant
1) Install from the update site http://users.encs.concordia.ca/~nikolaos/update/
2) Open the desired smell detection strategy from the Bad Smells menu
How to Use JDeodorant
8
JDeodorant
3) Select the project you would like scanned from the Package Explorer
4) Click on the i button in the opened smell view to start the scan
How to use JDeodorant
9
JDeodorant
Identifies God classes and proposes class extraction refactorings
Took 11 minutes (w/3GB RAM) to analyze JHotDraw 7.6 (120K LOC) and produced 115 suggestions
God Class
10
JDeodorant
Iidentifies Feature Envy smells and suggests Move Method refactorings
Took about 5 min (w/3GB RAM) to run against JHotDraw 7.6
Feature Envy
11
JDeodorant
A long method may not be entirely cohesive and it may be possible to extract one or more blocks of logic
into a separate method, making the method easier to understand and maintain.
Took 1 hour and 40 minutes to analyze JHotDraw 7.6 (w/3GB RAM) and didn’t find any instances of this
smell. May run faster with more memory.
Long Method
Picture from JDeodorant Site
12
JDeodorant
The Type Checking scan identifies where polymorphism or the strategy pattern should be used
Took less than 10 seconds to analyze JHotDraw 7.6 and did not find any instances of this smell.
Type Checking
Picture from JDeodorant Site
13
JDeodorant
Pros
Open Sourced under the Eclipse Public License at https://github.com/tsantalis/JDeodorant
Works in the most recent release of Eclipse
Provides UML visualizations
At version 5.0 and is mature and full-featured
Successfully works in most recent release of Eclipse (Mars R.2)
Once project is parsed for a smell, incremental scans can quickly be re-run against individual packages or
classes
Cons
Can’t run in the background
Some detections can take a long time for medium and large projects
Pros and Cons
14
1 Your Code Stinks!
2 JDeodorant
3 JMove
4 JSpIRIT
5 Stench Blossom
6 TopicViewer
7 iPlasma
8 The Plan
9 If I Had Time
10 Wrapup
15
JMove
• JMove identfies Feature Envy smells and suggests Move Method refactorings
• If the method is could be moved to multiple classes, a recommendation is made to move it to the class
where it will be the most similar to the other methods in that class
• Project page: http://aserg.labsoft.dcc.ufmg.br/jmove/ (links to paper and plugin)
• Took 45 minutes against JHotDraw 7.6 w/3GB RAM and provided 13 suggestions
• Checks if a method has more similarities to the methods in another class than its current class. It
takes dependencies of the following types between the current class and possible target classes into
account:
• Method Calls
• Field accesses
• Object Instantiations
• Local Declarations
• Return Types
• Exceptions
• Annotations
About JMove
16
JMove
1) Download from http://aserg.labsoft.dcc.ufmg.br/jmove/ and unzip in your Eclipse installation root
directory.
2) Start Eclipse and select Bad Smells -> JMove or Refactorings -> JMove from the menu.
3) Select the project you’d like scanned from the Package Explorer.
4) Click on the i button in the JMove view to start the scan
How to use JMove
17
JMove
Jmove in Action
18
JMove
Pros
• Tool authors found that JMove‘s precision and recall were 60% and 81%, compared to 26% and 54%
for JDeodorant. Authors found it produced fewer recommendations, but they were better.
• Open sourced under the MIT license at https://github.com/vitormsales/JMove
• Easy to install and use
Cons
• Required to scan an entire Eclipse project – no incremental re-scans
• Can’t be run in the background
• Has been at Beta 0.1 for 3 years
• Not under active development
• Stops working mid-analysis in the Eclipse Mars.2 (4.5.2) but works in Mars (4.5.0)
Pros and Cons
19
1 Your Code Stinks!
2 JDeodorant
3 JMove
4 JSpIRIT
5 Stench Blossom
6 TopicViewer
7 iPlasma
8 The Plan
9 If I Had Time
10 Wrapup
20
JSpIRIT
Identifies 10 of the 11 code disharmonies presented in Lanza & Merinescu’s “Object Oriented Metrics in
Practice” The Significant Duplication disharmony was not included
Found 1349 disharmonies in JHotDraw 7.6 in 1 minute (with 2 GB RAM)
Identified disharmonies can be clicked on to show where the disharmony is located in the codebase
About JSpIRIT
21
JSpIRIT
1) Download the non-agglomeration version from the JSpIRIT page at
https://sites.google.com/site/santiagoavidal/projects/jspirit
2) Copy it to the dropins directory of your Eclipse installation and start Eclipse
3) Select the project you’d like to analyze, right click it, and select JSpIRIT -> Find Code Smells
How to use JSpIRIT
22
JSpIRIT
How to use JSpIRIT
The JSpIRIT View will pop up once the analysis is complete
Clicking on the item in the view will bring you to the afflicted class or method
23
JSpIRIT
Pros
Works with most recent release of Eclipse (Mars.2 / 4.5.2)
Ranks which design flaws are the worst
Clicking on the design flaw brings you to the element in the code
Ranking is configurable
Free as in beer
Cons
Must be run on entire project. No incremental analysis is possible
Does not propose fixes or specifics about the problem
Eclipse not responsive during analysis
Agglomeration view produces errors in the Agglomeration version
Not open source
Pros and Cons
24
JSpIRIT
Similar to JSpIRIT in its goal of detecting same disharmonies
Available from
https://sewiki.iai.uni-bonn.de/research/cultivate/tutorial_exploring_smells_and_metrics
Unfortunately it is a bit difficult to set up and use
Similar Tool: Cultivate
25
1 Your Code Stinks!
2 JDeodorant
3 JMove
4 JSpIRIT
5 Stench Blossom
6 TopicViewer
7 iPlasma
8 The Plan
9 If I Had Time
10 Wrapup
26
Stench Blossom
Identifies code smells as you develop and makes you aware of them without getting in your way.
Detects 10 code smells and indicates their severity:
• Data Clumps
• Feature Envy
• Message Chain
• Switch Statement
• Typecast
• InstanceOf
• Long Method
• Large Class
• Primitive Obsession
• Magic Number
• (Long) Comments
• Duplicated Code
About Stench Blossom
27
Stench Blossom
Install the Stench Blossom Eclipse plugin from
https://github.com/CaptainEmerson/refactoring-
tools/raw/master/installables/update_sites/stench_blossom
Enable the Stench Blossom Smell Indicator in the Eclipse Toolbar
Installing Stench Blossom
28
Stench Blossom
Less obvious smells -> orange and above the horizontal line
Obvious smells -> blue and below the horizontal line
Horizontal (thin) line appears if the cursor is not in the editor
Each smell has a specific wedge
Worse the smell, the larger the radius
Understanding the Ambient View
29
Stench Blossom
Hovering your mouse over a wedge shows which smell it is indicating
Clicking on the tooltip will enable the Exploration View
Using the Active View
30
Stench Blossom
Using the Explanation View
References to methods and variables of external classes are highlighted
Suggestions not provided on purpose to allow developer to come up with the best solution
Explanation views can be pinned / prevented from scrolling by clicking on the staple icon
31
Stench Blossom
Code elements are boxed in the editor when hovered in the Explanation view
Using the Exploration View
32
Stench Blossom
Pros
Identifies smells as you work, avoiding the need to stop working and wait for analysis to complete
Does not slow the IDE down
Open Sourced at https://github.com/DeveloperLiberationFront/refactoring-tools
Documented in https://pdfs.semanticscholar.org/5705/85ed977bf37b586d6a01e2845a388afb1a26.pdf
All features work in Eclipse Mars R.2
Cons
Not sure if it works with Java 8 features since it was last updated over 2 years ago
Pros and Cons
33
1 Your Code Stinks!
2 JDeodorant
3 JMove
4 JSpIRIT
5 Stench Blossom
6 TopicViewer
7 iPlasma
8 The Plan
9 If I Had Time
10 Wrapup
34
TopicViewer
Analyzes words used in source files. Can optionally include Javadoc and comments in vocabulary
extraction.
Produces a colorful map with recommendations of classes that belong together.
Project site at https://code.google.com/archive/p/topic-viewer/
I’ve exported the code from Google Code to https://github.com/jimbethancourt/topic-viewer and recently
improved semantic clustering performance by more than 2X (2:10 mins -> 43sec onJHotDraw) for
version under source control.
Downloadable from https://dl.dropboxusercontent.com/u/67114006/TopicViewer.rar (from Google Code
project site)
Vocabulary Extraction (1st step) took about 30 seconds for JHotDraw 7.6 (using defaults)
Semantic Clustering (2nd step) took less than 1 minute and 30 seconds for downloaded version
About TopicViewer
35
TopicViewer
Our Goal: A Distribution Map
36
TopicViewer
1) Download Topic Viewer from https://dl.dropboxusercontent.com/u/67114006/TopicViewer.rar
and unzip
2) Double-click the TopicViewer.jar and TopicViewer starts. To use more memory than the default
heap size of your JVM, you will need to launch it from the command line or a batch file.
Installing TopicViewer
37
TopicViewer
Activities -> Configure Workspace
Step 1: Configure Workspace
38
TopicViewer
Select a workspace directory where the project files for a single codebase analysis will live
Click Open Workspace
You should get the message “Workspace has just been configured” once complete
Step 2: Select a Workspace
39
TopicViewer
Step 3: Extract the Project Vocabulary
40
TopicViewer
Click the Select button (on the top right) and select desired root directory of your codebase. Be
careful you don’t include test directories if you don’t want them included in the analysis.
Set desired analysis options and click the Start button.
Step 4: Run Semantic Analysis of Codebase
41
TopicViewer
Click on Activities -> Semantic Clustering
Specify parameters (I take the defaults)
Click Select on the Top right, select workspace/lsi/src-root-directory-name.matrix, and click Open
Click Start on the bottom left
Step 5: Run Semantic Clustering
42
TopicViewer
Select Activities -> View Results -> Distribution Map
Click Select in the top left and select workspace/correlation/src-root-directory-name.matrix
Classes that may belong together in the same package have the same color / number
Step 6: Open Distribution Map
43
TopicViewer
Pros
Produces insightful and helpful suggestions
Simple
Cons
No guided workflow
App not responsive during analysis
Progress bar doesn’t update until it’s complete
Medium and large codebases require more memory and time.
Attempts implement concurrency and streams have failed miserably.
Notes
Downloaded version run faster for large codebases since it uses Sparse matrices in some spots and
needs less memory.
May be worth backing out the Parallel Colt migration and re-applying code changes made in the
HierarchicalClustering class (mostly fixing equals / not equals checks)
Pros and Cons
44
1 Your Code Stinks!
2 JDeodorant
3 JMove
4 JSpIRIT
5 Stench Blossom
6 TopicViewer
7 iPlasma
8 The Plan
9 If I Had Time
10 Wrapup
45
iPlasma
Tool for performing quality analysis of object-oriented software systems
Development led by the authors of the book Object Oriented Metrics in Practice
Project page: http://loose.upt.ro/reengineering/research/iplasma
Download from http://loose.upt.ro/iplasma/iplasma.zip
Once unzipped, run unzip_DiriPlasma6toolsiPlasmainsider.bat to launch iPlasma
About iPlasma
46
iPlasma
Click Load -> Java Sources
Using iPlasma
47
iPlasma
Enter the path of the root directory of the codebase you want to analyze in the Source path textbox.
You can also navigate to it and select it by clicking on the “…” button
The Cache file name textbox can be left blank
Click OK and the model will load. JHotDraw 7.6 loaded in just over a minute (1:04)
Using iPlasma
48
iPlasma
Once codebase is loaded, you’re presented with an Overview Pyramid.
Quick explanation available at https://sewiki.iai.uni-
bonn.de/research/cultivate/tutorial_exploring_smells_and_metrics#overview_pyramid
Using iPlasma
49
iPlasma
Click on the directory you’re interested in learning more about and the Group menu option will
activate:
Using iPlasma
50
iPlasma
The Group menu allows you to select a group of metrics (most but not all work).
iPlasma’s Group Menu
51
iPlasma
Options in the Group and Property menus change depending on what element is clicked in the
navigation tree tree in the top left.
Group menu options show new children in the navigation tree
Property menu options show new sortable columns
The Group and Property Menus Change
52
iPlasma
Clicking a class will show details about the class, the disharmonies the class is suffering from,
and recommendations of improvements that could be made to it.
Click a Class to Learn More About It
53
iPlasma
Click on an item under Root and then select an option from the Filter menu to filter in (show) only
classes with that property
Filter Menu
54
iPlasma
Pros
Parses source quickly
Open sourced at https://sourceforge.net/p/iplasma-horia/code/HEAD/tree/ (no license specified)
Finds a number of issues in codebase that are not found by other tools
Cons
Older – Parser may not support Java 8 code
Somewhat clunky and not the most intuitive tool to use
Not all features are fully implemented (though most appear to be)
Pros and Cons
55
1 Your Code Stinks!
2 JDeodorant
3 JMove
4 JSpIRIT
5 Stench Blossom
6 TopicViewer
7 iPlasma
8 The Plan
9 If I Had Time
10 Wrapup
56
The Plan
On an day-to-day basis
• Refactor as you develop – there’s no better time than the present
• Focus on delivering business value for your effort and minimize business disruption
• Don’t refactor all problems.
Only stop work and refactor
• Code that changes frequently
• See Ranking Refactoring Suggestions based on Historical Volatility
http://users.encs.concordia.ca/~nikolaos/publications/CSMR_2011.pdf
or the presentation at
http://www.slideshare.net/tsantalis/ranking-refactoring-suggestions-based-on-historical-volatility
• Code that is bug prone
• It will likely have bugs in the future if not refactored
Coordinate move method & move class refactorings with your team to avoid surprises since these
refactorings may impact a significant number of classes.
What / When Should I Refactor?
57
1 Your Code Stinks!
2 JDeodorant
3 JMove
4 JSpIRIT
5 Stench Blossom
6 TopicViewer
7 iPlasma
8 The Plan
9 If I Had Time
10 Wrapup
58
If I Had Time
Another tool for identifying Extract Method opportunities, but it doesn’t work
Authors indicated recall and precision was significantly higher than JDeodorant
Project page: http://aserg.labsoft.dcc.ufmg.br/jextract/ (with downloadable source)
Paper: http://homepages.dcc.ufmg.br/~mtov/pub/2014_cbsoft_jextract.pdf
Video: https://www.youtube.com/watch?v=6htJOzXwRNA
JExtract
59
If I Had Time
Analyzes source code commit history and identifies co-change clusters. Idea is that code that
changes together belongs together.
Project site: http://aserg.labsoft.dcc.ufmg.br/modularitycheck/
Source code: https://github.com/aserg-ufmg/ModularityCheck
ModularityCheck
60
If I Had Time
Eclipse plugin that makes software remodularization / class move suggestions:
https://www.sg.ethz.ch/media/publication_files/2014_Modularity_1.pdf
https://sourceforge.net/projects/somomoto/ (plugin doesn’t work in present state) GPL 3 license
From the paper above:
SOMOMOTO
Test case: the remodularization of JGRAPHX (a JAVA
graphical library). The JAVA classes are depicted as circles,
while their color reflects the corresponding package
membership (same color, same package). (a) original. (b)
after remodularization by SOMOMOTO.
61
If I Had Time
Dr. Jehad Delal’s publication Identifying Refactoring Opportunities in Object-Oriented Code: A
Systematic Literature Review
(http://www.isc.ku.edu.kw/drjehad/identifying%20refactoring%20opprtunities%20IST.pdf) lists a
number of papers that discuss refactoring opportunity discovery tools.
Investigate all Papers on Tools
62
1 Your Code Stinks!
2 JDeodorant
3 JMove
4 JSpIRIT
5 Stench Blossom
6 TopicViewer
7 iPlasma
8 The Plan
9 If I Had Time
10 Wrapup
63
Wrapup
Not all tools will detect that the same piece of code needs to be refactored
Not every instance of every detected smell may be a valid one
Be careful that move method & move class refactorings do not introduce cyclic dependencies
There is no substitute for YOU and your experience
Most of these tools will likely move you away from package-by-layer and towards package-by-
feature (which is usually a good thing!)
Keep in Mind
64
Wrapup
JDeodorant: http://users.encs.concordia.ca/~nikolaos/jdeodorant/
Jmove : http://aserg.labsoft.dcc.ufmg.br/software/
JSpIRIT: https://sites.google.com/site/santiagoavidal/projects/jspirit
Stench Blossom: https://github.com/CaptainEmerson/refactoring-
tools/raw/master/installables/update_sites/stench_blossom
TopicViewer: https://dl.dropboxusercontent.com/u/67114006/TopicViewer.rar
My TopicViewer repo: https://github.com/jimbethancourt/topic-viewer
iPlasma: http://loose.upt.ro/iplasma/iplasma.zip
http://www.oreilly.com/programming/free/files/software-architecture-patterns.pdf
Take a Picture of THIS Page
Thank You!

Refactor to the Limit!

  • 1.
  • 2.
    1 1 Your CodeStinks! 2 JDeodorant 3 JMove 4 JSpIRIT 5 Stench Blossom 6 TopicViewer 7 iPlasma 8 The Plan 9 If I Had Time 10 Wrapup Agenda
  • 3.
    2 Your Code Stinks! Thefollowing are from Object Oriented Metrics in Practice, Lanza & Marinescu (2004) God Class – Performs too much work on its own and centralizes the intelligence of a system. Reduces reusability, understandability, and maintainability of a class or subsystem. Feature Envy – Method that is more interested in the data of other classes than its own class. The method may be misplaced and should be moved to another class. Data Class – “Dumb” data holders without complex functionality but other classes strongly rely on them. Brain Method – Centralizes the functionality of a class, and is often hard to maintain and understand. Is long, has excessive branching, deep nesting, and uses many local and instance variables. Brain Class – Similar to God Classes in that they are large and complex, but do not abusively access the data of “satellite” classes or are more cohesive. They have at least one Brain Method. Intensive Coupling – A single client method is strongly coupled with only a few provider classes. Dispersed Coupling – A single method is excessively tied to many other operations dispersed among many classes. Shotgun Surgery – A single method has many methods in other classes depending on it. Refused Parent Bequest – Child class does not specialize its parent class Tradition Breaker – Child class does not enhance / specialize the functionality of the parent class Disharmonies We’ll be Talking About Today
  • 4.
    3 Your Code Stinks! Howthe Disharmonies are Related From Object Oriented Metrics in Practice, Lanza & Marinescu (2004)
  • 5.
    4 Your Code Stinks! GodClasses • 5 – 7 times more change prone • 4 – 19 times more bug prone Dispersed Coupling • Points to defect and maintenance prone classes From the Technical Debt webinar at https://fc-d.umd.edu/sites/default/files/Publications/ReportsAndPresentations/TD_webinar_11_11_10.pdf The Worst Offenders
  • 6.
    5 1 Your CodeStinks! 2 JDeodorant 3 JMove 4 JSpIRIT 5 Stench Blossom 6 TopicViewer 7 iPlasma 8 The Plan 9 If I Had Time 10 Wrapup
  • 7.
    6 JDeodorant Detects several codesmells and provides actionable suggestions to remedy them: • God Class • Long Method • Type Checking • Feature Envy • Duplicated Code (not discussed here) Project site: http://users.encs.concordia.ca/~nikolaos/jdeodorant/ Written by a team of professors and PhD students About JDeodorant
  • 8.
    7 JDeodorant 1) Install fromthe update site http://users.encs.concordia.ca/~nikolaos/update/ 2) Open the desired smell detection strategy from the Bad Smells menu How to Use JDeodorant
  • 9.
    8 JDeodorant 3) Select theproject you would like scanned from the Package Explorer 4) Click on the i button in the opened smell view to start the scan How to use JDeodorant
  • 10.
    9 JDeodorant Identifies God classesand proposes class extraction refactorings Took 11 minutes (w/3GB RAM) to analyze JHotDraw 7.6 (120K LOC) and produced 115 suggestions God Class
  • 11.
    10 JDeodorant Iidentifies Feature Envysmells and suggests Move Method refactorings Took about 5 min (w/3GB RAM) to run against JHotDraw 7.6 Feature Envy
  • 12.
    11 JDeodorant A long methodmay not be entirely cohesive and it may be possible to extract one or more blocks of logic into a separate method, making the method easier to understand and maintain. Took 1 hour and 40 minutes to analyze JHotDraw 7.6 (w/3GB RAM) and didn’t find any instances of this smell. May run faster with more memory. Long Method Picture from JDeodorant Site
  • 13.
    12 JDeodorant The Type Checkingscan identifies where polymorphism or the strategy pattern should be used Took less than 10 seconds to analyze JHotDraw 7.6 and did not find any instances of this smell. Type Checking Picture from JDeodorant Site
  • 14.
    13 JDeodorant Pros Open Sourced underthe Eclipse Public License at https://github.com/tsantalis/JDeodorant Works in the most recent release of Eclipse Provides UML visualizations At version 5.0 and is mature and full-featured Successfully works in most recent release of Eclipse (Mars R.2) Once project is parsed for a smell, incremental scans can quickly be re-run against individual packages or classes Cons Can’t run in the background Some detections can take a long time for medium and large projects Pros and Cons
  • 15.
    14 1 Your CodeStinks! 2 JDeodorant 3 JMove 4 JSpIRIT 5 Stench Blossom 6 TopicViewer 7 iPlasma 8 The Plan 9 If I Had Time 10 Wrapup
  • 16.
    15 JMove • JMove identfiesFeature Envy smells and suggests Move Method refactorings • If the method is could be moved to multiple classes, a recommendation is made to move it to the class where it will be the most similar to the other methods in that class • Project page: http://aserg.labsoft.dcc.ufmg.br/jmove/ (links to paper and plugin) • Took 45 minutes against JHotDraw 7.6 w/3GB RAM and provided 13 suggestions • Checks if a method has more similarities to the methods in another class than its current class. It takes dependencies of the following types between the current class and possible target classes into account: • Method Calls • Field accesses • Object Instantiations • Local Declarations • Return Types • Exceptions • Annotations About JMove
  • 17.
    16 JMove 1) Download fromhttp://aserg.labsoft.dcc.ufmg.br/jmove/ and unzip in your Eclipse installation root directory. 2) Start Eclipse and select Bad Smells -> JMove or Refactorings -> JMove from the menu. 3) Select the project you’d like scanned from the Package Explorer. 4) Click on the i button in the JMove view to start the scan How to use JMove
  • 18.
  • 19.
    18 JMove Pros • Tool authorsfound that JMove‘s precision and recall were 60% and 81%, compared to 26% and 54% for JDeodorant. Authors found it produced fewer recommendations, but they were better. • Open sourced under the MIT license at https://github.com/vitormsales/JMove • Easy to install and use Cons • Required to scan an entire Eclipse project – no incremental re-scans • Can’t be run in the background • Has been at Beta 0.1 for 3 years • Not under active development • Stops working mid-analysis in the Eclipse Mars.2 (4.5.2) but works in Mars (4.5.0) Pros and Cons
  • 20.
    19 1 Your CodeStinks! 2 JDeodorant 3 JMove 4 JSpIRIT 5 Stench Blossom 6 TopicViewer 7 iPlasma 8 The Plan 9 If I Had Time 10 Wrapup
  • 21.
    20 JSpIRIT Identifies 10 ofthe 11 code disharmonies presented in Lanza & Merinescu’s “Object Oriented Metrics in Practice” The Significant Duplication disharmony was not included Found 1349 disharmonies in JHotDraw 7.6 in 1 minute (with 2 GB RAM) Identified disharmonies can be clicked on to show where the disharmony is located in the codebase About JSpIRIT
  • 22.
    21 JSpIRIT 1) Download thenon-agglomeration version from the JSpIRIT page at https://sites.google.com/site/santiagoavidal/projects/jspirit 2) Copy it to the dropins directory of your Eclipse installation and start Eclipse 3) Select the project you’d like to analyze, right click it, and select JSpIRIT -> Find Code Smells How to use JSpIRIT
  • 23.
    22 JSpIRIT How to useJSpIRIT The JSpIRIT View will pop up once the analysis is complete Clicking on the item in the view will bring you to the afflicted class or method
  • 24.
    23 JSpIRIT Pros Works with mostrecent release of Eclipse (Mars.2 / 4.5.2) Ranks which design flaws are the worst Clicking on the design flaw brings you to the element in the code Ranking is configurable Free as in beer Cons Must be run on entire project. No incremental analysis is possible Does not propose fixes or specifics about the problem Eclipse not responsive during analysis Agglomeration view produces errors in the Agglomeration version Not open source Pros and Cons
  • 25.
    24 JSpIRIT Similar to JSpIRITin its goal of detecting same disharmonies Available from https://sewiki.iai.uni-bonn.de/research/cultivate/tutorial_exploring_smells_and_metrics Unfortunately it is a bit difficult to set up and use Similar Tool: Cultivate
  • 26.
    25 1 Your CodeStinks! 2 JDeodorant 3 JMove 4 JSpIRIT 5 Stench Blossom 6 TopicViewer 7 iPlasma 8 The Plan 9 If I Had Time 10 Wrapup
  • 27.
    26 Stench Blossom Identifies codesmells as you develop and makes you aware of them without getting in your way. Detects 10 code smells and indicates their severity: • Data Clumps • Feature Envy • Message Chain • Switch Statement • Typecast • InstanceOf • Long Method • Large Class • Primitive Obsession • Magic Number • (Long) Comments • Duplicated Code About Stench Blossom
  • 28.
    27 Stench Blossom Install theStench Blossom Eclipse plugin from https://github.com/CaptainEmerson/refactoring- tools/raw/master/installables/update_sites/stench_blossom Enable the Stench Blossom Smell Indicator in the Eclipse Toolbar Installing Stench Blossom
  • 29.
    28 Stench Blossom Less obvioussmells -> orange and above the horizontal line Obvious smells -> blue and below the horizontal line Horizontal (thin) line appears if the cursor is not in the editor Each smell has a specific wedge Worse the smell, the larger the radius Understanding the Ambient View
  • 30.
    29 Stench Blossom Hovering yourmouse over a wedge shows which smell it is indicating Clicking on the tooltip will enable the Exploration View Using the Active View
  • 31.
    30 Stench Blossom Using theExplanation View References to methods and variables of external classes are highlighted Suggestions not provided on purpose to allow developer to come up with the best solution Explanation views can be pinned / prevented from scrolling by clicking on the staple icon
  • 32.
    31 Stench Blossom Code elementsare boxed in the editor when hovered in the Explanation view Using the Exploration View
  • 33.
    32 Stench Blossom Pros Identifies smellsas you work, avoiding the need to stop working and wait for analysis to complete Does not slow the IDE down Open Sourced at https://github.com/DeveloperLiberationFront/refactoring-tools Documented in https://pdfs.semanticscholar.org/5705/85ed977bf37b586d6a01e2845a388afb1a26.pdf All features work in Eclipse Mars R.2 Cons Not sure if it works with Java 8 features since it was last updated over 2 years ago Pros and Cons
  • 34.
    33 1 Your CodeStinks! 2 JDeodorant 3 JMove 4 JSpIRIT 5 Stench Blossom 6 TopicViewer 7 iPlasma 8 The Plan 9 If I Had Time 10 Wrapup
  • 35.
    34 TopicViewer Analyzes words usedin source files. Can optionally include Javadoc and comments in vocabulary extraction. Produces a colorful map with recommendations of classes that belong together. Project site at https://code.google.com/archive/p/topic-viewer/ I’ve exported the code from Google Code to https://github.com/jimbethancourt/topic-viewer and recently improved semantic clustering performance by more than 2X (2:10 mins -> 43sec onJHotDraw) for version under source control. Downloadable from https://dl.dropboxusercontent.com/u/67114006/TopicViewer.rar (from Google Code project site) Vocabulary Extraction (1st step) took about 30 seconds for JHotDraw 7.6 (using defaults) Semantic Clustering (2nd step) took less than 1 minute and 30 seconds for downloaded version About TopicViewer
  • 36.
  • 37.
    36 TopicViewer 1) Download TopicViewer from https://dl.dropboxusercontent.com/u/67114006/TopicViewer.rar and unzip 2) Double-click the TopicViewer.jar and TopicViewer starts. To use more memory than the default heap size of your JVM, you will need to launch it from the command line or a batch file. Installing TopicViewer
  • 38.
    37 TopicViewer Activities -> ConfigureWorkspace Step 1: Configure Workspace
  • 39.
    38 TopicViewer Select a workspacedirectory where the project files for a single codebase analysis will live Click Open Workspace You should get the message “Workspace has just been configured” once complete Step 2: Select a Workspace
  • 40.
    39 TopicViewer Step 3: Extractthe Project Vocabulary
  • 41.
    40 TopicViewer Click the Selectbutton (on the top right) and select desired root directory of your codebase. Be careful you don’t include test directories if you don’t want them included in the analysis. Set desired analysis options and click the Start button. Step 4: Run Semantic Analysis of Codebase
  • 42.
    41 TopicViewer Click on Activities-> Semantic Clustering Specify parameters (I take the defaults) Click Select on the Top right, select workspace/lsi/src-root-directory-name.matrix, and click Open Click Start on the bottom left Step 5: Run Semantic Clustering
  • 43.
    42 TopicViewer Select Activities ->View Results -> Distribution Map Click Select in the top left and select workspace/correlation/src-root-directory-name.matrix Classes that may belong together in the same package have the same color / number Step 6: Open Distribution Map
  • 44.
    43 TopicViewer Pros Produces insightful andhelpful suggestions Simple Cons No guided workflow App not responsive during analysis Progress bar doesn’t update until it’s complete Medium and large codebases require more memory and time. Attempts implement concurrency and streams have failed miserably. Notes Downloaded version run faster for large codebases since it uses Sparse matrices in some spots and needs less memory. May be worth backing out the Parallel Colt migration and re-applying code changes made in the HierarchicalClustering class (mostly fixing equals / not equals checks) Pros and Cons
  • 45.
    44 1 Your CodeStinks! 2 JDeodorant 3 JMove 4 JSpIRIT 5 Stench Blossom 6 TopicViewer 7 iPlasma 8 The Plan 9 If I Had Time 10 Wrapup
  • 46.
    45 iPlasma Tool for performingquality analysis of object-oriented software systems Development led by the authors of the book Object Oriented Metrics in Practice Project page: http://loose.upt.ro/reengineering/research/iplasma Download from http://loose.upt.ro/iplasma/iplasma.zip Once unzipped, run unzip_DiriPlasma6toolsiPlasmainsider.bat to launch iPlasma About iPlasma
  • 47.
    46 iPlasma Click Load ->Java Sources Using iPlasma
  • 48.
    47 iPlasma Enter the pathof the root directory of the codebase you want to analyze in the Source path textbox. You can also navigate to it and select it by clicking on the “…” button The Cache file name textbox can be left blank Click OK and the model will load. JHotDraw 7.6 loaded in just over a minute (1:04) Using iPlasma
  • 49.
    48 iPlasma Once codebase isloaded, you’re presented with an Overview Pyramid. Quick explanation available at https://sewiki.iai.uni- bonn.de/research/cultivate/tutorial_exploring_smells_and_metrics#overview_pyramid Using iPlasma
  • 50.
    49 iPlasma Click on thedirectory you’re interested in learning more about and the Group menu option will activate: Using iPlasma
  • 51.
    50 iPlasma The Group menuallows you to select a group of metrics (most but not all work). iPlasma’s Group Menu
  • 52.
    51 iPlasma Options in theGroup and Property menus change depending on what element is clicked in the navigation tree tree in the top left. Group menu options show new children in the navigation tree Property menu options show new sortable columns The Group and Property Menus Change
  • 53.
    52 iPlasma Clicking a classwill show details about the class, the disharmonies the class is suffering from, and recommendations of improvements that could be made to it. Click a Class to Learn More About It
  • 54.
    53 iPlasma Click on anitem under Root and then select an option from the Filter menu to filter in (show) only classes with that property Filter Menu
  • 55.
    54 iPlasma Pros Parses source quickly Opensourced at https://sourceforge.net/p/iplasma-horia/code/HEAD/tree/ (no license specified) Finds a number of issues in codebase that are not found by other tools Cons Older – Parser may not support Java 8 code Somewhat clunky and not the most intuitive tool to use Not all features are fully implemented (though most appear to be) Pros and Cons
  • 56.
    55 1 Your CodeStinks! 2 JDeodorant 3 JMove 4 JSpIRIT 5 Stench Blossom 6 TopicViewer 7 iPlasma 8 The Plan 9 If I Had Time 10 Wrapup
  • 57.
    56 The Plan On anday-to-day basis • Refactor as you develop – there’s no better time than the present • Focus on delivering business value for your effort and minimize business disruption • Don’t refactor all problems. Only stop work and refactor • Code that changes frequently • See Ranking Refactoring Suggestions based on Historical Volatility http://users.encs.concordia.ca/~nikolaos/publications/CSMR_2011.pdf or the presentation at http://www.slideshare.net/tsantalis/ranking-refactoring-suggestions-based-on-historical-volatility • Code that is bug prone • It will likely have bugs in the future if not refactored Coordinate move method & move class refactorings with your team to avoid surprises since these refactorings may impact a significant number of classes. What / When Should I Refactor?
  • 58.
    57 1 Your CodeStinks! 2 JDeodorant 3 JMove 4 JSpIRIT 5 Stench Blossom 6 TopicViewer 7 iPlasma 8 The Plan 9 If I Had Time 10 Wrapup
  • 59.
    58 If I HadTime Another tool for identifying Extract Method opportunities, but it doesn’t work Authors indicated recall and precision was significantly higher than JDeodorant Project page: http://aserg.labsoft.dcc.ufmg.br/jextract/ (with downloadable source) Paper: http://homepages.dcc.ufmg.br/~mtov/pub/2014_cbsoft_jextract.pdf Video: https://www.youtube.com/watch?v=6htJOzXwRNA JExtract
  • 60.
    59 If I HadTime Analyzes source code commit history and identifies co-change clusters. Idea is that code that changes together belongs together. Project site: http://aserg.labsoft.dcc.ufmg.br/modularitycheck/ Source code: https://github.com/aserg-ufmg/ModularityCheck ModularityCheck
  • 61.
    60 If I HadTime Eclipse plugin that makes software remodularization / class move suggestions: https://www.sg.ethz.ch/media/publication_files/2014_Modularity_1.pdf https://sourceforge.net/projects/somomoto/ (plugin doesn’t work in present state) GPL 3 license From the paper above: SOMOMOTO Test case: the remodularization of JGRAPHX (a JAVA graphical library). The JAVA classes are depicted as circles, while their color reflects the corresponding package membership (same color, same package). (a) original. (b) after remodularization by SOMOMOTO.
  • 62.
    61 If I HadTime Dr. Jehad Delal’s publication Identifying Refactoring Opportunities in Object-Oriented Code: A Systematic Literature Review (http://www.isc.ku.edu.kw/drjehad/identifying%20refactoring%20opprtunities%20IST.pdf) lists a number of papers that discuss refactoring opportunity discovery tools. Investigate all Papers on Tools
  • 63.
    62 1 Your CodeStinks! 2 JDeodorant 3 JMove 4 JSpIRIT 5 Stench Blossom 6 TopicViewer 7 iPlasma 8 The Plan 9 If I Had Time 10 Wrapup
  • 64.
    63 Wrapup Not all toolswill detect that the same piece of code needs to be refactored Not every instance of every detected smell may be a valid one Be careful that move method & move class refactorings do not introduce cyclic dependencies There is no substitute for YOU and your experience Most of these tools will likely move you away from package-by-layer and towards package-by- feature (which is usually a good thing!) Keep in Mind
  • 65.
    64 Wrapup JDeodorant: http://users.encs.concordia.ca/~nikolaos/jdeodorant/ Jmove :http://aserg.labsoft.dcc.ufmg.br/software/ JSpIRIT: https://sites.google.com/site/santiagoavidal/projects/jspirit Stench Blossom: https://github.com/CaptainEmerson/refactoring- tools/raw/master/installables/update_sites/stench_blossom TopicViewer: https://dl.dropboxusercontent.com/u/67114006/TopicViewer.rar My TopicViewer repo: https://github.com/jimbethancourt/topic-viewer iPlasma: http://loose.upt.ro/iplasma/iplasma.zip http://www.oreilly.com/programming/free/files/software-architecture-patterns.pdf Take a Picture of THIS Page
  • 66.

Editor's Notes

  • #11 Here the plugin is suggesting that the performAction and the setAction method, along with the action and actionArea member varialbes should be extracted into their own classes.
  • #37 The colored squares are classes. Squares with the same colors will ideally belong in the same package.
  • #44 You can also select Activities -> View Results -> Correlation Matrix and select the same file to view the image of the correlation matrix. I’m not sure how to make sense of it, though.