SlideShare a Scribd company logo
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!

More Related Content

Similar to Refactor to the Limit!

Are Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping ProgrammersAre Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping Programmers
Chris Parnin
 
A Study on Code Smell Detection with Refactoring Tools in Object Oriented Lan...
A Study on Code Smell Detection with Refactoring Tools in Object Oriented Lan...A Study on Code Smell Detection with Refactoring Tools in Object Oriented Lan...
A Study on Code Smell Detection with Refactoring Tools in Object Oriented Lan...
ijcnes
 
Writting Better Software
Writting Better SoftwareWritting Better Software
Writting Better Software
svilen.ivanov
 
Chaos Engineering Without Observability ... Is Just Chaos
Chaos Engineering Without Observability ... Is Just ChaosChaos Engineering Without Observability ... Is Just Chaos
Chaos Engineering Without Observability ... Is Just Chaos
Charity Majors
 
Testing and TDD - KoJUG
Testing and TDD - KoJUGTesting and TDD - KoJUG
Testing and TDD - KoJUG
lburdz
 
Refactoring
RefactoringRefactoring
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)
guestebde
 
Debugging
DebuggingDebugging
App locker
App lockerApp locker
Refactoring for Software Design Smells - 1 day Workshop
Refactoring for Software Design Smells - 1 day Workshop Refactoring for Software Design Smells - 1 day Workshop
Refactoring for Software Design Smells - 1 day Workshop
Ganesh Samarthyam
 
Cinci ug-january2011-anti-patterns
Cinci ug-january2011-anti-patternsCinci ug-january2011-anti-patterns
Cinci ug-january2011-anti-patterns
Steven Smith
 
Technologies for startup
Technologies for startupTechnologies for startup
Technologies for startup
Dzung Nguyen
 
Software Carpentry and the Hydrological Sciences @ AGU 2013
Software Carpentry and the Hydrological Sciences @ AGU 2013Software Carpentry and the Hydrological Sciences @ AGU 2013
Software Carpentry and the Hydrological Sciences @ AGU 2013
Aron Ahmadia
 
Fast detection of Android malware: machine learning approach
Fast detection of Android malware: machine learning approachFast detection of Android malware: machine learning approach
Fast detection of Android malware: machine learning approach
Yury Leonychev
 
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения..."Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
Yandex
 
Code Smells - Refactoring
Code Smells - RefactoringCode Smells - Refactoring
Code Smells - Refactoring
Shobi P P
 
Code Refactoring
Code RefactoringCode Refactoring
Intro to programing with java-lecture 1
Intro to programing with java-lecture 1Intro to programing with java-lecture 1
Intro to programing with java-lecture 1
Mohamed Essam
 
Structured Software Design
Structured Software DesignStructured Software Design
Structured Software Design
Giorgio Zoppi
 
Works For Me! Characterizing Non-Reproducible Bug Reports
Works For Me! Characterizing Non-Reproducible Bug ReportsWorks For Me! Characterizing Non-Reproducible Bug Reports
Works For Me! Characterizing Non-Reproducible Bug Reports
SALT Lab @ UBC
 

Similar to Refactor to the Limit! (20)

Are Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping ProgrammersAre Automated Debugging Techniques Actually Helping Programmers
Are Automated Debugging Techniques Actually Helping Programmers
 
A Study on Code Smell Detection with Refactoring Tools in Object Oriented Lan...
A Study on Code Smell Detection with Refactoring Tools in Object Oriented Lan...A Study on Code Smell Detection with Refactoring Tools in Object Oriented Lan...
A Study on Code Smell Detection with Refactoring Tools in Object Oriented Lan...
 
Writting Better Software
Writting Better SoftwareWritting Better Software
Writting Better Software
 
Chaos Engineering Without Observability ... Is Just Chaos
Chaos Engineering Without Observability ... Is Just ChaosChaos Engineering Without Observability ... Is Just Chaos
Chaos Engineering Without Observability ... Is Just Chaos
 
Testing and TDD - KoJUG
Testing and TDD - KoJUGTesting and TDD - KoJUG
Testing and TDD - KoJUG
 
Refactoring
RefactoringRefactoring
Refactoring
 
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)
 
Debugging
DebuggingDebugging
Debugging
 
App locker
App lockerApp locker
App locker
 
Refactoring for Software Design Smells - 1 day Workshop
Refactoring for Software Design Smells - 1 day Workshop Refactoring for Software Design Smells - 1 day Workshop
Refactoring for Software Design Smells - 1 day Workshop
 
Cinci ug-january2011-anti-patterns
Cinci ug-january2011-anti-patternsCinci ug-january2011-anti-patterns
Cinci ug-january2011-anti-patterns
 
Technologies for startup
Technologies for startupTechnologies for startup
Technologies for startup
 
Software Carpentry and the Hydrological Sciences @ AGU 2013
Software Carpentry and the Hydrological Sciences @ AGU 2013Software Carpentry and the Hydrological Sciences @ AGU 2013
Software Carpentry and the Hydrological Sciences @ AGU 2013
 
Fast detection of Android malware: machine learning approach
Fast detection of Android malware: machine learning approachFast detection of Android malware: machine learning approach
Fast detection of Android malware: machine learning approach
 
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения..."Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
"Быстрое обнаружение вредоносного ПО для Android с помощью машинного обучения...
 
Code Smells - Refactoring
Code Smells - RefactoringCode Smells - Refactoring
Code Smells - Refactoring
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Intro to programing with java-lecture 1
Intro to programing with java-lecture 1Intro to programing with java-lecture 1
Intro to programing with java-lecture 1
 
Structured Software Design
Structured Software DesignStructured Software Design
Structured Software Design
 
Works For Me! Characterizing Non-Reproducible Bug Reports
Works For Me! Characterizing Non-Reproducible Bug ReportsWorks For Me! Characterizing Non-Reproducible Bug Reports
Works For Me! Characterizing Non-Reproducible Bug Reports
 

More from Jim Bethancourt

JavaOne 2011 Recap
JavaOne 2011 RecapJavaOne 2011 Recap
JavaOne 2011 Recap
Jim Bethancourt
 
Java 8 Feature Preview
Java 8 Feature PreviewJava 8 Feature Preview
Java 8 Feature Preview
Jim Bethancourt
 
Introduction to CDI
Introduction to CDIIntroduction to CDI
Introduction to CDI
Jim Bethancourt
 
Functional Programming in Java
Functional Programming in JavaFunctional Programming in Java
Functional Programming in Java
Jim Bethancourt
 
Young Java Champions
Young Java ChampionsYoung Java Champions
Young Java Champions
Jim Bethancourt
 
Migrating to Maven 2 Demystified
Migrating to Maven 2 DemystifiedMigrating to Maven 2 Demystified
Migrating to Maven 2 Demystified
Jim Bethancourt
 
User Group Leader Lunch
User Group Leader LunchUser Group Leader Lunch
User Group Leader Lunch
Jim Bethancourt
 
Hearthstone To The Limit
Hearthstone To The LimitHearthstone To The Limit
Hearthstone To The Limit
Jim Bethancourt
 
Recognize, assess, reduce, and manage technical debt
Recognize, assess, reduce, and manage technical debtRecognize, assess, reduce, and manage technical debt
Recognize, assess, reduce, and manage technical debt
Jim Bethancourt
 
Atlassian Bamboo Feature Overview
Atlassian Bamboo Feature OverviewAtlassian Bamboo Feature Overview
Atlassian Bamboo Feature Overview
Jim Bethancourt
 

More from Jim Bethancourt (10)

JavaOne 2011 Recap
JavaOne 2011 RecapJavaOne 2011 Recap
JavaOne 2011 Recap
 
Java 8 Feature Preview
Java 8 Feature PreviewJava 8 Feature Preview
Java 8 Feature Preview
 
Introduction to CDI
Introduction to CDIIntroduction to CDI
Introduction to CDI
 
Functional Programming in Java
Functional Programming in JavaFunctional Programming in Java
Functional Programming in Java
 
Young Java Champions
Young Java ChampionsYoung Java Champions
Young Java Champions
 
Migrating to Maven 2 Demystified
Migrating to Maven 2 DemystifiedMigrating to Maven 2 Demystified
Migrating to Maven 2 Demystified
 
User Group Leader Lunch
User Group Leader LunchUser Group Leader Lunch
User Group Leader Lunch
 
Hearthstone To The Limit
Hearthstone To The LimitHearthstone To The Limit
Hearthstone To The Limit
 
Recognize, assess, reduce, and manage technical debt
Recognize, assess, reduce, and manage technical debtRecognize, assess, reduce, and manage technical debt
Recognize, assess, reduce, and manage technical debt
 
Atlassian Bamboo Feature Overview
Atlassian Bamboo Feature OverviewAtlassian Bamboo Feature Overview
Atlassian Bamboo Feature Overview
 

Recently uploaded

Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
ICS
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
Malibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed RoundMalibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed Round
sjcobrien
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
Quickdice ERP
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
VALiNTRY360
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
Hornet Dynamics
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !
Marcin Chrost
 
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
gapen1
 
Liberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptxLiberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptx
Massimo Artizzu
 
fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
AnkitaPandya11
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
Alberto Brandolini
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Julian Hyde
 
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
Bert Jan Schrijver
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
Peter Muessig
 
SQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure MalaysiaSQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure Malaysia
GohKiangHock
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
NishanthaBulumulla1
 

Recently uploaded (20)

Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
Malibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed RoundMalibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed Round
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !
 
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
 
Liberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptxLiberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptx
 
fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.fiscal year variant fiscal year variant.
fiscal year variant fiscal year variant.
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Modelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - AmsterdamModelling Up - DDDEurope 2024 - Amsterdam
Modelling Up - DDDEurope 2024 - Amsterdam
 
Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)Measures in SQL (SIGMOD 2024, Santiago, Chile)
Measures in SQL (SIGMOD 2024, Santiago, Chile)
 
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
 
SQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure MalaysiaSQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure Malaysia
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
 

Refactor to the Limit!

  • 2. 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
  • 3. 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
  • 4. 3 Your Code Stinks! How the Disharmonies are Related From Object Oriented Metrics in Practice, Lanza & Marinescu (2004)
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 31 Stench Blossom Code elements are boxed in the editor when hovered in the Explanation view Using the Exploration View
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 35 TopicViewer Our Goal: A Distribution Map
  • 37. 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
  • 38. 37 TopicViewer Activities -> Configure Workspace Step 1: Configure Workspace
  • 39. 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
  • 40. 39 TopicViewer Step 3: Extract the Project Vocabulary
  • 41. 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
  • 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 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
  • 45. 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
  • 46. 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
  • 47. 46 iPlasma Click Load -> Java Sources Using iPlasma
  • 48. 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
  • 49. 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
  • 50. 49 iPlasma Click on the directory you’re interested in learning more about and the Group menu option will activate: Using iPlasma
  • 51. 50 iPlasma The Group menu allows you to select a group of metrics (most but not all work). iPlasma’s Group Menu
  • 52. 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
  • 53. 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
  • 54. 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
  • 55. 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
  • 56. 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
  • 57. 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?
  • 58. 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
  • 59. 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
  • 60. 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
  • 61. 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.
  • 62. 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
  • 63. 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
  • 64. 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
  • 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

Editor's Notes

  1. 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.
  2. The colored squares are classes. Squares with the same colors will ideally belong in the same package.
  3. 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.