recommending software refactoring using search-based software enginnering
TRANSCRIPT
Recommending Software Refactoring Using
Search-based Software Engineering
Graduate School of Information Science and Technology
Department of Computer Science
Osaka University
10 December 2014
University of Montreal
November 18, 2014
WinterSummer
Autumn
Montrรฉal, Quebec, Canada
3
Montrรฉal
Montrรฉal downtownVieux-Port Montrรฉal
HockeyPoutine
Rue Hutchison
Tunisia
Tunisia: touristic destination
Sidi BousaidSousse
Nabeul ceramic
Tozeur desert
El Jem theater
Tunisian monument
Yasmine
Couscous Brik
Recommending Software Refactoring Using
Search-based Software Engineering
Graduate School of Information Science and Technology
Department of Computer Science
Osaka University
10 December 2014
Outline
Context and problem
Contributions
Code-smells detection
Mono-objective software refactoring
Multi-objective software refactoring
Conclusion and perspectives
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014 8
Context
Software systems have become prevalent in our everyday life
Software changes frequently Add new requirements
Adapt to environment changes
Correct bugs
Changing a software can be a challenging task These changes may degrade their design and QoS
The original developers are not around anymore
Systems, like people, get old Increase in complexity and degrade in effectiveness
Maintain a high level of quality during the life cycle of a software system
9ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Refactoring
โ The process of improving a code after it has been written by
changing its internal structure without changing the external behavior โ (Fowler et al., โ99)
Examples: Move method, extract class, move attribute, ...
Eclipse, NetBeans, โฆ
Advantages
Improve software quality, maintainability, readability
Provide better software extensibility
Increase the speed at which programmers can write and maintain their code
Challengesโฆ
Manual refactoring is an error-prone task
What are the situations ? What are the refactorings to apply?
10ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Refactoring
Need for refactoring recommendation systems
11
Identification of
refactoring solutions
Detection of code
fragments to improve
(e.g., code-smells)
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Step 1: Code-smells detection
Code-smells
Introduced during the initial design or during evolution
Anomalies, anti-patterns, bad smells, design flaws, โฆ
โ Metaphor โ to describe problems resulting from bad design and
programming practices
Time pressure, non-experienced programmers, unintentionally, code decay
Lead to software products suffering by poor performance and QoS
Code difficult to understand, modify, maintain, evolve ...
12
Code smellsWhat is that smell? Did you write that code?
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Code-smell examples
BlobโProcedural-style design leads to one object with
numerous responsibilities and most other objects only
holding data or executing simple processesโ
13
Spaghetti codeโIt is a code with a complex and tangled control structure.
This code-smell is characteristic of procedural thinking in
object-oriented programming. Spaghetti Code is revealed
by classes with no structure, declaring long methods with
no parameters, and utilising global variablesโ Librairy_Main_Control
-borrow_date_Book
-current_Book
-current_Catalog
-fine_Amount
-listOfCatalogs
-librairy_opened
-reserved_Book
-return_date_Book
+add_Book()
+archive_Catalog()
+borrow_Book()
+check_Availabi_Book()
+check_Delay_Book()
+check_FineAmount()
+check_ValidityCard()
+close_Librairy()
+create_cheap_Book()
+display_Book()
+display_Catalog()
+do_Inventory()
+issue_LibrairyCard()
+list_Catalogs()
+open_Librairy()
+print_Catalog()
+remove__Book()
+reserve_Book()
+return_Book()
+search_Book()
+search_Catalog()
+sort_Catalog()
Catalog
-โฆ
+โฆ()
Book
-โฆ
+โฆ()
Data Class
Data Class
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Step 2: Refactoring
14
Librairy_Main_Control
-borrow_date_Book
-current_Book
-current_Catalog
-fine_Amount
-listOfCatalogs
-librairy_opened
-reserved_Book
-return_date_Book
+add_Book()
+archive_Catalog()
+borrow_Book()
+check_Availab_Book()
+check_Delay_Book()
+check_FineAmount()
+check_ValidityCard()
+close_Librairy()
+create_cheap_Book()
+display_Book()
+display_Catalog()
+do_Inventory()
+issue_LibrairyCard()
+list_Catalogs()
+open_Librairy()
+print_Catalog()
+remove_Book()
+reserve_Book()
+return_Book()
+search_Book()
+search_Catalog()
+sort_Catalog()
Catalog
-โฆ
+โฆ()
Book
-โฆ
+โฆ()
Data Class
Data Class
Librairy_Main_Control
-current_Catalog
-listOfCatalogs
+sort_Catalog()
+add_Book()
+list_Catalogs()
+remove_Book()
+search_Book()
+search_Catalog()
Catalog
-current_Book
+archive_Catalog()
+create_cheap_Book()
+display_Book()
+display_Catalog()
+do_Inventory()
+print_Catalog()
Book
-borrow_date_Book
-return_date_Book
-reserved_Book
+return_Book()
+borrow_Book()
+check_Delay_Book()
+reserve_Book()
+check_Availabi_Book()
Data Class
NewClass_1
-fine_Amount
+chek_FineAmount()
+check_ValidityCard()
+issue_LibrairyCard()
NewClass_2
-librairy_opened
+close_Librairy()
+open_Librairy()
Data Class
Blob
Refactoring
Move method
Extract class
Move field
Inline class
โฆ
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Goal
โAutomated approach for recommending software
refactoringโ
Generate code-smells detection rules
Find refactoring solutions to fix code-smells while preserving the design
semantics
15ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Proposal
16
recommended
refactorings
Part 2
Mono-objective code-smells correction
Generation of
detection rules
(GP)
Mono-objective search-
based Refactoring
(GA / CRO)detection
rules
Part 1
Code-smells detection
Quality metrics
Part 3
Multi-objective refactoring
Examples
of
code-smells
Multi-objective search-
based Refactoring
(NSGA-II)
Semantic
measures
Modification
score
Code-change
history
Design-pattern
detectors
recommended
refactorings
List of
refactoring
operations
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Context and problem
Research methodology
Code-smells detection
Mono-objective software refactoring
Multi-objective software refactoring
Conclusion and perspectives
17
recommended
refactorings
Part 2
Mono-objective code-smells correction
Generation of
detection rules
(GP)
Mono-objective search-
based Refactoring
(GA / CRO)detection
rules
Part 1
Code-smells detection
Quality metrics
Part 3
Multi-objective refactoring
Examples
of
code-smells
Multi-objective search-
based Refactoring
(NSGA-II)
Semantic
measures
Modification
score
Code-change
history
Design-pattern
detectors
recommended
refactorings
List of
refactoring
operations
Proposal
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Code-smells detection
Existing work
Manual (Brown et al. โ98, Fowler and Beck โ99)
Metrics-based (Palomba et al โ13, Marinescu et al. โ04, Salehie et al. โ06, Maiga
et al.โ12)
Visual (Dhambri et al. โ08, Langelier et al. โ05)
Symptoms-based (Moha et al. โ08, Murno et al. โ08)
18ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Problem statement
Difficult to define/express detection rules
Large list of code-smell types to categorize
Large exhaustive list of quality metrics
Large number of possible threshold values
Huge space to explore: An expert to manually write and validate detection rules
Difficult to derive consensual rules Diverge expertโs opinions
No consensual definition of symptoms
The same symptom could be associated to many code-smell types
Easier to describe examples than translating symptoms into rules
Idea: Infer detection rules from code-smell examples
19ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Approach overview
20
Code-smells detection
Generation of
code-smells
detection rules
(Genetic Programming)
Software quality metrics
(CBO, WMC, NOA,โฆ)
Code-smells detection
rules
Examples of code-smells
System 2System 1
System 3
Code-smell
instance
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Genetic Programming
21
Population of
solutions
Evaluation
Selection
Crossover
Mutation
Optimal or โgoodโ solution
found ?
Detection rules
Yes
No
START
END
Key elements Representing of individual
Generate initial population
Deriving new individuals using
genetic operators
Evaluating an individual
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
GP adaptation
WMCLCOM
NOMCBO
[1..500]
[1..100]
Quality metrics
NOA
Solution representation
22
1 : Blob
2 : Spaghetti code
3 : Functional decomposition
Base of examples
Code-smell
instance3 : If (NOAโฅ4) AND (WMC<3) Then Functional decomposition
2 : If (CBOโฅ151) Then Spaghetti code
1 : If (LOCCLASSโฅ1500) AND (NOMโฅ20) OR (WMC>20) Then Blob
R1: Blob
R2: SC
R3: FD
OR
OR AND
AND
LOCClASS
โฅ 1500NOM โฅ 20
CBO โฅ 151
NOA โฅ 4
CBO<3
WMC โฅ
20
N6
N1
N2
N3
N4
N5 N7
N8N10
N9
Tree representation
Fitness function
๐ ๐๐๐๐๐ =๐ก๐๐ข๐ ๐๐๐ ๐๐ก๐๐ฃ๐๐
๐ก๐๐ก๐๐ ๐๐ข๐๐๐๐ ๐๐ ๐๐๐๐ ๐ ๐๐๐๐๐
๐๐๐๐๐๐ ๐๐๐ =๐ก๐๐ข๐ ๐๐๐ ๐๐ก๐๐ฃ๐๐
๐๐ข๐๐๐๐ ๐๐ ๐๐๐ก๐๐๐ก๐๐ ๐๐๐๐ ๐ ๐๐๐๐๐
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
23
Genetic operators
AND
NPAโฅ 7CBO<3
R2
OR
AND
LOCClASS
โฅ 1500
NOMโฅ 20
WMCโฅ 20
R1
AND
CBO<3WMCโฅ20
Rโ2
OR
AND
LOCClASS
โฅ 1500
NOMโฅ 20
NPAโฅ7
Rโ1
Crossover
Crossover
Mutation
OR
AND
LOCClASS
โฅ 1500
NOMโฅ 20
WMCโฅ
20
OR
AND
LOCClASS
โฅ 1500
NOMโฅ 20
CBOโฅ 30Mutation
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
24
Studied systems
Three types of code-smells Blob, Spaghetti code, Functional decomposition
6-fold cross validation Detect smells in a system using the 5 other systems
Detection precision and recall
Evaluation: detection results
Systems # of classes KLOC # of code-smells
Quick UML v2001 142 19 11
LOG4J v1.2.1 189 21 17
GanttProject v1.10.2 245 31 41
Xerces-J v2.7.0 991 240 66
ArgoUML v0.19.8 1230 1160 89
AZUREUS v2.3.0.6 1449 42 93
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
25
Detection results
System Precision Recall
GanttProject
Blob : 100%
SC : 93%
FD : 91%
100%
97%
94%
Xerces-J
Blob : 97%
SC: 90%
FD: 88%
100%
88%
86%
ArgoUML
Blob : 93%
SC: 88%
FD: 82%
100%
91%
89%
QuickUML
Blob : 94%
SC: 84%
FD: 81%
98%
93%
88%
AZUREUS
Blob : 82%
SC: 71%
FD: 68%
94%
81%
86%
LOG4J
Blob : 87%
SC: 84%
FD: 66%
90%
84%
74%
Average
Blob : 92%
SC: 85%
FD: 79%
97%
89%
86%
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
26
Examples-size variation
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
1 2 3 4 5
Precision
Recall
Precision, recall %
Number of systems
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Proposal
Context and problem
Research methodology
Code-smells detection
Mono-objective software refactoring
Multi-objective software refactoring
Conclusion and perspectives
27
recommended
refactorings
Part 2
Mono-objective code-smells correction
Generation of
detection rules
(GP)
Mono-objective search-
based Refactoring
(GA / CRO)detection
rules
Part 1
Code-smells detection
Quality metrics
Part 3
Multi-objective refactoring
Examples
of
code-smells
Multi-objective search-
based Refactoring
(NSGA-II)
Semantic
measures
Modification
score
Code-change
history
Design-pattern
detectors
recommended
refactorings
List of
refactoring
operations
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
28
Manual approaches
โ Standard refactorings (Fowler et al. โ98)
Metric-based approaches
โ Search-based techniques โข Find the best sequence of refactorings (Seng et al. โ06, Harman et al. โ07,
OโKeeffe et al. โ08,)
โ Analytic approachesโข Study of relations between some quality metrics and refactoring
changes (Sahraoui et al. โ00, Du Bois et al. โ04, Moha et al. โ08)
Clustering-based approaches
โ Fix code-smells (Marios et al, โ11, JDeodorant)
Existing work on refactoring
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
29
Difficult to define "standard" refactorings
Pre-define refactoring solutions for each code-smell type
Difficult to establish the link between refactoring and quality
improvement
Improving some quality metrics do not fix code-smells
Is not practical to correct code-smells separately
Correcting a code-smell may produce other code-smells
Do not consider the impact of refactoring
Do not take into consideration the semantic coherence dimension
Problem statement
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
30
Two scenarios1. Enough time/resources
2. Time/resources limitations
Mono-objective Refactoring
recommended
refactorings
Part 2
Mono-objective code-smells correction
Basic Mono-objective
Refactoring
(GA)
Prioritizing code-smells
correction
(CRO)
List of
refactoring
operations
+
Detection rules
Scenario 1
Scenario 2recommended
refactorings
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
31
Basic mono-objective refactoring
Code to be refactored
Suggested refatorings
Code-smells detection rules
List of possible refactorings
Basic Code-smells
correction
(Genetic Algorithm)
Scenario 1
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
32
Genetic Algorithm
Solution representation
Individual = Sequence of refactoring operations
Controlling parameters
Genetic algorithm adaptation
Refactorings Controlling parametersmove method (sourceClass, targetClass, method)
move field (sourceClass, targetClass, field)
pull up field (sourceClass, targetClass, field)
pull up method (sourceClass, targetClass, method)
push down field (sourceClass, targetClass, field)
push down method (sourceClass, targetClass, method)
inline class (sourceClass, targetClass)
extract class (sourceClass, newClass)
1 moveMethod
2 pullUpAttribute
3 extractClass
4 inlineClass
5 extractSuperClass
6 inlineMethod
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
33
Population creation
Population: set of refactoring solutions
Fitness function
Genetic algorithm adaptation
Correction ratio =# code smells ๐๐๐ก๐๐ ๐๐๐๐๐๐ก๐๐๐๐๐
# detected code smells
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
extractClass
pullUpAttribute
extractClass
moveMethod
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
extractClass
moveMethod
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
extractClass
moveMethod
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
inlineClass
inlineMethod
extractSuperClass
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
extractClass
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
extractClass
moveMethod
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
extractClass
moveMethod
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
extractClass
pullUpAttribute
extractClass
moveMethod
moveMethod
pullUpAttribute
extractClass
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
34
Crossover
Mutation
Genetic algorithm adaptation
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
extractClass
moveMethod
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
extractClass
moveMethod
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
Solution 1
Solution 2
Child 1
Child 2
Crossover (k=3)
moveMethod
pullUpAttribute
extractClass
inlineClass
extractSuperClass
inlineMethod
moveMethod
moveMethod
extractClass
inlineClass
extractSuperClass
inlineMethod
Mutation
(i=2, j=5)
Solution Child
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
35
Evaluation: basic refactoring results
System CCR RP
GanttProject 95% (39|41) 52 %
Xerces-J 89% (59|66) 49 %
ArgoUML 85% (76|89) 59 %
QuickUML 90% (26|29) 59 %
LOG4J 88% (15|17) 51 %
AZUREUS 94% (87|93) 57 %
Average 90% 54%
๐๐๐ =# ๐๐จ๐๐ ๐ฌ๐ฆ๐๐ฅ๐ฅ๐ฌ ๐๐๐ญ๐๐ซ ๐๐ฉ๐ฉ๐ฅ๐ฒ๐ข๐ง๐ ๐ซ๐๐๐๐๐ญ๐จ๐ซ๐ข๐ง๐ ๐ฌ
# ๐๐จ๐๐ ๐ฌ๐ฆ๐๐ฅ๐ฅ๐ฌ ๐๐๐๐จ๐ซ๐ ๐ซ๐๐๐๐๐ญ๐จ๐ซ๐ข๐ง๐
๐๐ =#๐ฆ๐๐๐ง๐ข๐ง๐ ๐๐ฎ๐ฅ ๐ซ๐๐๐๐๐ญ๐จ๐ซ๐ข๐ง๐ ๐ฌ
# ๐ฉ๐ซ๐จ๐ฉ๐จ๐ฌ๐๐ ๐ซ๐๐๐๐๐ญ๐จ๐ซ๐ข๐ง๐ ๐ฌ
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
36
GA Scalability
0
10
20
30
40
50
60
70
0 200 400 600 800 1000 1200 1400 1600
Exec
uti
on
tim
e (m
inu
tes)
Size of systems (number of classes)
QuickUML
LOG4J
GanttProject
Xerces-J
ArgoUMLAZUREUS
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
37
Mono-objective Refactoring
recommended
refactorings
Part 2
Mono-objective code-smells correction
Basic Mono-objective
Refactoring
(GA)
Prioritizing code-smells
correction
(CRO)
List of
refactoring
operations
+
Detection rules
Scenario 1
Scenario 2recommended
refactorings
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
38
Second scenario Time / resources limitations
Donโt need to fix all code-smells -> only the most critical ones
Idea: Prioritize the correction of code smells
Priority-based refactoring
Priority-based code-smells
correction
(Chemical reaction optimisation)Code to be refactored
Suggested refatorings
Code-smells detection rules
List of possible refactorings
Prioritisation schema
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
39
Four heuristics
Priority
rank code-smells according to the maintainers preferences
Severity
rank code-smells according to a set of design-properties (size, complexity, coupling,
cohesion, hierarchy, etc.)
Risk
the risk score corresponds to the deviation from good design practices.
the more code deviates from good practices, the more it is likely to be risky
Importance
the importance of a class corresponds to their change frequency
the more a class undergoes changes, the more it is likely to be problematic
if a code-smell remains unmodified, the system may not experience problems
Prioritizing code-smells correction
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
40
Goal:
maximize the correction of the critical code-smells
Objective function
weighted sum of the prioritization heuristics
Chemical reaction optimisation (CRO) Inspired by the phenomenon of chemical reactions
Molecule <--> solution
Potential energy <--> objective function value
Collision <--> change operator (mechanism to find new solution)
Prioritizing code-smells correction
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
41
Comparison1. Our CRO-based approach
2. CRO without prioritization
3. Basic GA approach
Refactoring comparison results for the five systems from 31 simulation runs
Validation: CRO refactoring results
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
42
Comparison1. Chemical Reaction Optimization (CRO)
2. Genetic Algorithm (GA)
3. Simulated Annealing (SA)
4. Particle Swarm Optimisation (PSO)
Refactoring comparison results for the five systems from 31 simulation runs
SBSE validation
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
43
Stability
45
47
49
51
53
55
57
59
75
80
85
90
95
100
210
216
222
232
232
236
241
255
257
259
265
268
270
271
271
274
275
276
276
277
277
278
279
280
281
281
282
282
282
285
288
Number of refactorings
CCR (%) ICR (%) RCR (%) SCR (%) Time (min)
CCR (%), ICR(%), RCR(%) , SCR(%) Time (min)
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
44
Refactorings distribution
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
45
Advantages Most of code-smells are fixed
Critical code-smells are fixed first (prioritized)
Limitations Not all suggested refactoring operations are semantically feasible
Some refactoring solutions requires a considerable number of changes
Single perspective ?
Mono-objective formulation
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Proposal
Context and problem
Research methodology
Code-smells detection
Mono-objective software refactoring
Multi-objective software refactoring
Conclusion and perspectives
46
recommended
refactorings
Part 2
Mono-objective code-smells correction
Generation of
detection rules
(GP)
Mono-objective search-
based Refactoring
(GA / CRO)detection
rules
Part 1
Code-smells detection
Quality metrics
Part 3
Multi-objective refactoring
Examples
of
code-smells
Multi-objective search-
based Refactoring
(NSGA-II)
Semantic
measures
Modification
score
Code-change
history
Design-pattern
detectors
recommended
refactorings
List of
refactoring
operations
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Intuition: preserve design semantics
Semantic approximation
Number of changes
Conformance with refactoring history
47
Multi-objective formulation
Multi-objective optimization problem
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
48
Multi-objective refactoring
Refactoring
history
Proposed
refactorings
Semantic
measures
D
Multi-objective Refactoring
(NSGA-II)
Source code with
code-smells
Code-smells
detection rules
List of possible
refactorings
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
NSGA-II: Non-dominated Sorting Genetic Algorithm (K. Deb et al., โ02)
49
NSGA-II overview
Parent
Population
Offspring
Population
Non-dominated
sorting
F1
F2
F3
F4Crowding distance
sorting
Population
in next
generation
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Solution representation
First population creation
Change operators (Crossover & Mutation)
Objective functions
50
NSGA-II adaptation
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Four objective functions
1. Quality
Calculate the number of fixed code-smells
2. Code changes
Calculate the number of atomic changes required when applying refactoring
3. Approximate semantic similarity
Calculate cosine similarity between vocabulary used
4. Maintain the conformance with change history
Calculate a similarity score between the a suggested refactoring and a base of refactorings applied in the
past
51
NSGA-II adaptation
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
52
Number of code changes
Refactoring criteria. . .
Librairy_Main_Control
-borrow_date_Book
-current_Book
-current_Catalog
-fine_Amount
-listOfCatalogs
-librairy_opened
-reserved_Book
-return_date_Book
+add_Book()
+archive_Catalog()
+borrow_Book()
+check_Availab_Book()
+check_Delay_Book()
+check_FineAmount()
+check_ValidityCard()
+close_Librairy()
+create_cheap_Book()
+display_Book()
+display_Catalog()
+do_Inventory()
+issue_LibrairyCard()
+list_Catalogs()
+open_Librairy()
+print_Catalog()
+remove_Book()
+reserve_Book()
+return_Book()
+search_Book()
+search_Catalog()
+sort_Catalog()
Catalog
-โฆ
+โฆ()
Book
-โฆ
+โฆ()
Data Class
Data Class
Librairy_Main_Control
-current_Catalog
-listOfCatalogs
+sort_Catalog()
+add_Book()
+list_Catalogs()
+remove_Book()
+search_Book()
+search_Catalog()
Catalog
-current_Book
+archive_Catalog()
+create_cheap_Book()
+display_Book()
+display_Catalog()
+do_Inventory()
+print_Catalog()
Book
-borrow_date_Book
-return_date_Book
-reserved_Book
+return_Book()
+borrow_Book()
+check_Delay_Book()
+reserve_Book()
+check_Availabi_Book()
Data Class
NewClass_1
-fine_Amount
+chek_FineAmount()
+check_ValidityCard()
+issue_LibrairyCard()
NewClass_2
-librairy_opened
+close_Librairy()
+open_Librairy()
Data Class
Code-smell: Blob
Refactoring
Solution 3
1. Move method
2. Extract class
3. Move field
4. Move method
5. Move method
6. Inline class
7. Move field
8. Extract class
9. Move method
10 Move field
Solution 1
1. Move method
2. Extract class
3. Move field
4. Move method
5. Move method
Solution 2
1. Move method.
2. Move method
3. Inline class
4. Move field
5. Extract class
Solution 4
1. Move method.
2. Move method
3. Inline class
4. Move field
5. Extract class
6. Move field
7. Extract class
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
53
Semantic similarity
Refactoring criteria. . .
Catalog
-current_Book
+archive_Catalog()
+create_cheap_Book()
+display_Book()
+display_Catalog()
+do_Inventory()
+print_Catalog()
Book
-borrow_date_Book
-return_date_Book
-reserved_Book
+return_Book()
+borrow_Book()
+check_Delay_Book()
+reserve_Book()
+check_Availabi_Book()
NewClass_1
-fine_Amount
+chek_FineAmount()
+check_ValidityCard()
+issue_LibrairyCard()
NewClass_2
-librairy_opened
+close_Librairy()
+open_Librairy()
Librairy_Main_Control
-borrow_date_Book
-current_Book
-current_Catalog
-fine_Amount
-listOfCatalogs
-librairy_opened
-reserved_Book
-return_date_Book
+add_Book()
+archive_Catalog()
+borrow_Book()
+check_Availabi_Book()
+check_Delay_Book()
+check_FineAmount()
+check_ValidityCard()
+close_Librairy()
+create_cheap_Book()
+display_Book()
+display_Catalog()
+do_Inventory()
+issue_LibrairyCard()
+list_Catalogs()
+open_Librairy()
+print_Catalog()
+remove__Book()
+reserve_Book()
+return_Book()
+search_Book()
+search_Catalog()
+sort_Catalog()
NewClass_1
-fine_Amount
+chek_FineAmount()
+check_ValidityCard()
+issue_LibrairyCard()
Code-smell: Blob
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Set of "good" refactorings
applied in the past
54
Conformance with refactorings applied in the past
Refactoring criteria. . .
Librairy_Main_Control
-borrow_date_Book
-current_Book-current_Catalog
-fine_Amount-listOfCatalogs
-librairy_opened-reserved_Book
-return_date_Book
+add_Book()
+archive_Catalog()+borrow_Book()
+check_Availab_Book()+check_Delay_Book()
+check_FineAmount()+check_ValidityCard()
+close_Librairy()+create_cheap_Book()
+display_Book()+display_Catalog()
+do_Inventory()+issue_LibrairyCard()
+list_Catalogs()+open_Librairy()
+print_Catalog()+remove_Book()
+reserve_Book()+return_Book()
+search_Book()+search_Catalog()
+sort_Catalog()
Catalog
-โฆ
+โฆ()
Book
-โฆ
+โฆ()
Data Class
Data Class
Version 1.0
Move field
Move method
Move method
Move field
Inline class
Extract class Move method
Move method
Move methodExtract class
Extract Interface Extract class
Inline class
Inline class
Librairy_Main_Control
-current_Catalog
-listOfCatalogs
+sort_Catalog()
+add_Book()+list_Catalogs()
+remove_Book()+search_Book()
+search_Catalog()
Catalog
-current_Book
+archive_Catalog()
+create_cheap_Book()+display_Book()
+display_Catalog()+do_Inventory()
+print_Catalog()
Book
-borrow_date_Book
-return_date_Book-reserved_Book
+return_Book()
+borrow_Book()+check_Delay_Book()
+reserve_Book()+check_Availabi_Book()NewClass_1
-fine_Amount
+chek_FineAmount()
+check_ValidityCard()+issue_LibrairyCard()
NewClass_2
-librairy_opened
+close_Librairy()
+open_Librairy()
Version 3.0
Librairy_Main_Control
-borrow_date_Book
-current_Book-current_Catalog
-librairy_opened-reserved_Book
-return_date_Book
+add_Book()
+archive_Catalog()+borrow_Book()
+check_Availab_Book()+check_Delay_Book()
+check_FineAmount()+display_Book()
+display_Catalog()+do_Inventory()
+issue_LibrairyCard()+list_Catalogs()
+open_Librairy()
Catalog
-current_Book
+archive_Catalog()
+create_cheap_Book()+display_Book()
+display_Catalog()+do_Inventory()
+print_Catalog()
Book
-borrow_date_Book
-return_date_Book-reserved_Book
+return_Book()
+borrow_Book()+check_Delay_Book()
+reserve_Book()+check_Availabi_Book()
Data Class
Data Class
Version 2.0 Next version
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Studied systems
Three code-smell types
Blob, Spaghetti code, and Functional decomposition
Data Collect refactorings from previous versions (Ref-Finder)
Manual inspection
55
Evaluation
Systems Release # classes# code-
smellsKLOC
GanttProject v1.10.2 245 49 41
Rhino v1.7R1 305 69 42
JFreeChart v1.0.9 521 72 170
JHotDraw v6.1 585 25 21
Xerces-J v2.7.0 991 91 240
Apache Ant v1.8.2 1191 112 255
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Survey Questionnaire: evaluate the suggested refactorings
Sample of 10 refactoring operations
18 subjectsโข graduate/undergraduate students, assistant professors, junior software developers
โข Subjects are volunteers and familiar with java programming
โข 2 to 13 years experience on Java programming
โข 6 groups
Comparison to state-of-the-art research
Harman et al 2007, Basic GA approach
Comparison to other mono and multi-objective algorithms
MOGA, GA, Random Search
56
Empirical evaluation
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
57
Multi-objective refactoring results
Systems Approach CCR RPChanges
score
Xerces
NSGA-II 83% (55|66) 81 % 3843
Harman et al. '07 N.A 41 % 2669
GA-based approach 89% (59/66) 37 % 4998
JFreeChart
NSGA-II 86% (49|57) 82 % 2016
Harman et al. '07 N.A 36 % 3269
GA-based approach 91% (52\57) 37 % 3389
GanttProject
NSGA-II 85% (35|41) 80 % 2826
Harman et al. '07 N.A 23 % 4790
GA-based approach 95% (39|41) 27 % 4697
AntApache
NSGA-II 78% (64|82) 78 % 4690
Harman et al. '07 N.A 40 % 6987
GA-based approach 80% (66|82) 30 % 6797
JHotDraw
NSGA-II 86% (18|21) 80 % 2231
Harman et al. '07 N.A 37 % 3654
GA-based approach % (|21) 43 % 3875
Rhino
NSGA-II 85% (52|61) 80 % 1914
Harman et al. '07 N.A 37 % 2698
GA-based approach 87% (53|61) 32 % 3365
Average
(all systems)
NSGA-II 84% 80 % 2937
Harman et al. '07 N.A 36 % 4011
GA-based approach 89% 34 % 4520
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
58
SBSE validation
0,50
0,55
0,60
0,65
0,70
0,75
0,80
0,85
0,90
CC
R
Code-smells Correction Ratio
NSGA-II
GA
MOGA
Random search
0,000,100,200,300,400,500,600,700,800,90
RP
Refactoring Precision
NSGA-II
GA
MOGA
Random search
0
1000
2000
3000
4000
5000
6000
Co
de
ch
ange
s sc
ore
Code changes
NSGA-II
GA
MOGA
Random search
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Search-based code-smells detection approach Search-based approach : GP
Infer detection rules from code-smell examples
Mono-objective search-based code-smells correction GA: maximize the number of fixed code-smells
CRO: Prioritize the correction of code-smells
Multi-objective search-based refactoring approach Preserve design semantics and fix code-smells
Validation Empirical evaluation
Very encouraging results
Comparison with existing approaches
59
Conclusion
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Service-oriented Architecture: SOA / Web services SOA application = a set of ready-made, reusable services
Change continuously: add new requirements, environment changes May degrade their design quality โ> Anti-patterns
60
Ongoing work: Possible collaborations
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Client
Travel Service
+ bookTrip() Internet
Flight Service+ checkDates()+ reserveFlight()+ cancelFlight()
Rent Car Service+checkAvailability()+ reserveCar()+ cancelCar()
HotelService+ checkHotel()+ reserveHotel()+ cancelHotel()
XML technologies{SOAP, WSDL, UDDI,...}
Service provider
SOA Anti-patterns detection
Examples of common SOA anti-patterns
61
Ongoing work: Possible collaborations
Multi-service Nano-service
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Refactoring of SOA
Fix anti-patterns
Improve quality attributes
62
Ongoing work: Possible collaborations
Refactoring
Interface Partitionning
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
Software Migration Object oriented system Service oriented system
63
Ongoing work: Possible collaborations
C27
C4C1
C25
C26
C2
C24
C23C22
C3
C5
C6
C14
C10
C7
C8
C20
C19
C17C16
C15 C11
C12C13
C18
C21
C9
Car Rental Service
Flight Booking Service
Payment Service
Hotel Reservation
Service
Travel Agency system
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014
64
Thank you for your attention
ยฉ Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014