a mono- and multi-objective approach for recommending software refactoring

68
Department of Computer Science and Operations Research A mono - and Multi - objective Approach for Recommending Software Refactoring Ali Ouni Ph.D. Defense Advisors: Houari Sahraoui (Université de Montréal, Canada) Marouane Kessentini (University of Michigan, USA) 12 November 2014

Upload: ali-ouni

Post on 08-Aug-2015

68 views

Category:

Software


2 download

TRANSCRIPT

Page 1: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Department of Computer Science and Operations Research

A mono- and Multi-objective Approach for

Recommending Software Refactoring

Ali Ouni

Ph.D. Defense

Advisors: Houari Sahraoui (Université de Montréal, Canada)

Marouane Kessentini (University of Michigan, USA)

12 November 2014

Page 2: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Outline

Context and problem

Research methodology

Code-smells detection

Mono-objective software refactoring

Multi-objective software refactoring

Conclusion and perspectives

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 2

Page 3: A Mono- and Multi-objective Approach for Recommending Software Refactoring

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

Easiness to accommodate changes depends on software quality

Maintain a high level of quality during the life cycle of a software system

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring Univ. de Montréal, Nov. 12th, 2014 3

Page 4: A Mono- and Multi-objective Approach for Recommending Software Refactoring

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?

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 4

Page 5: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Refactoring

Need for recommendation systems

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 5

Identification of

refactoring solutions

Guarantee behavior

preservation

Apply refactoring

Assess the effect of the

refactoring on quality

Maintain the consistency

with other artifacts

(e.g., documentation, ..)

Detection of code

fragments to improve

(e.g., code-smells)

Page 6: A Mono- and Multi-objective Approach for Recommending Software Refactoring

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 ...

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 6

Code smellsWhat is that smell? Did you write that code?

Page 7: A Mono- and Multi-objective Approach for Recommending Software Refactoring

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”

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 7

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

Page 8: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Step 2: Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 8

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

Page 9: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Thesis

Goal

“Automated approach for recommending software

refactoring”

Generate code-smells detection rules

Find refactoring solutions to fix code-smells while preserving the design

semantics

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 9

Page 10: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Research methodology

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 10

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

Page 11: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Context and problem

Research methodology

Code-smells detection

Mono-objective software refactoring

Multi-objective software refactoring

Conclusion and perspectives

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 11

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

Research methodology

Page 12: A Mono- and Multi-objective Approach for Recommending Software Refactoring

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)

Definition symptoms detection algorithm

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 12

Page 13: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Problem statement

Difficult to define/express detection rules

Large list of code-smells to categorize

Large exhaustive list of quality metrics

Huge 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

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 13

Page 14: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Approach overview

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 14

Part 1

Code-smells detection

Generation of

code-smells

detection rules

(Genetic Algorithm)

Software quality metrics

(CBO, WMC, NOA,…)

Code-smells detection

rules

Examples of code-smells

System 2System 1

System 3

Code-smell

instance

Page 15: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Genetic Programming

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 15

Population of

solutions

Evaluation

Selection

Crossover

Mutation

Optimal or “good” solution

found ?

Detection rules

Yes

No

START

END

Key elements Representing of individual

Evaluating an individual

Deriving new individuals using genetic

operators

Page 16: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014

GP adaptation

WMCLCOM

NOMCBO

[1..500]

[1..100]

Quality metrics

NOA

Solution representation

16

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

MWC ≥

20

N6

N1

N2

N3

N4

N5 N7

N8N10

N9

Tree representation

Fitness function

𝑅𝑒𝑐𝑎𝑙𝑙 =𝑡𝑟𝑢𝑒 𝑝𝑜𝑠𝑖𝑡𝑖𝑣𝑒𝑠

𝑡𝑜𝑡𝑎𝑙 𝑛𝑢𝑚𝑏𝑒𝑟 𝑜𝑓 𝑐𝑜𝑑𝑒 𝑠𝑚𝑒𝑙𝑙𝑠

𝑃𝑟𝑒𝑐𝑖𝑠𝑖𝑜𝑛 =𝑡𝑟𝑢𝑒 𝑝𝑜𝑠𝑖𝑡𝑖𝑣𝑒𝑠

𝑛𝑢𝑚𝑏𝑒𝑟 𝑜𝑓 𝑑𝑒𝑡𝑒𝑐𝑡𝑒𝑑 𝑐𝑜𝑑𝑒 𝑠𝑚𝑒𝑙𝑙𝑠

Page 17: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 17

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

Page 18: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 18

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%

AverageBlob : 92%SC: 85%FD: 79%

97%89%86%

Page 19: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 19

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

Page 20: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Outline

Context and problem

Research methodology

Code-smells detection

Mono-objective software refactoring

Multi-objective software refactoring

Conclusion and perspectives

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 20

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

Page 21: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 21

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

Page 22: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 22

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

Page 23: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 23

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

Page 24: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 24

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

Page 25: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 25

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

Page 26: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 26

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

Page 27: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 27

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%

𝐂𝐂𝐑 =# 𝐜𝐨𝐝𝐞 𝐬𝐦𝐞𝐥𝐥𝐬 𝐚𝐟𝐭𝐞𝐫 𝐚𝐩𝐩𝐥𝐲𝐢𝐧𝐠 𝐫𝐞𝐟𝐚𝐜𝐭𝐨𝐫𝐢𝐧𝐠𝐬

# 𝐜𝐨𝐝𝐞 𝐬𝐦𝐞𝐥𝐥𝐬 𝐛𝐞𝐟𝐨𝐫𝐞 𝐫𝐞𝐟𝐚𝐜𝐭𝐨𝐫𝐢𝐧𝐠

𝐑𝐏 =#𝐦𝐞𝐚𝐧𝐢𝐧𝐠𝐟𝐮𝐥 𝐫𝐞𝐟𝐚𝐜𝐭𝐨𝐫𝐢𝐧𝐠𝐬

# 𝐩𝐫𝐨𝐩𝐨𝐬𝐞𝐝 𝐫𝐞𝐟𝐚𝐜𝐭𝐨𝐫𝐢𝐧𝐠𝐬

Page 28: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 28

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

Page 29: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 29

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

Page 30: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 30

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

Page 31: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 31

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

Page 32: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 32

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

Page 33: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 33

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

Page 34: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 34

Stability

Results

45

47

49

51

53

55

57

59

75

80

85

90

95

100

21

0

21

6

22

2

23

2

23

2

23

6

24

1

25

5

25

7

25

9

26

5

26

8

27

0

27

1

27

1

27

4

27

5

27

6

27

6

27

7

27

7

27

8

27

9

28

0

28

1

28

1

28

2

28

2

28

2

28

5

28

8

Number of refactorings

CCR (%) ICR (%) RCR (%) SCR (%) Time (min)

CCR (%), ICR(%), RCR(%) , SCR(%) Time (min)

Page 35: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 35

Refactorings distribution

Page 36: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 36

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

Page 37: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Outline

Context and problem

Research methodology

Code-smells detection

Mono-objective software refactoring

Multi-objective software refactoring

Conclusion and perspectives

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 37

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

Page 38: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Two intuitions

Design preservation objectives

Semantic approximation

Number of changes

Conformance with refactoring history

Quality objectives

Fix code-smells

Improve quality indicators

Introduce design patterns

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 38

Multi-objective formulation

Multi-objective optimization problem

Application 1

Application 2

Page 39: A Mono- and Multi-objective Approach for Recommending Software Refactoring

NSGA-II: Non-dominated Sorting Genetic Algorithm (K. Deb et al., ’02)

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 39

NSGA-II overview

Parent

Population

Offspring

Population

Non-dominated

sorting

F1

F2

F3

F4Crowding distance

sorting

Population

in next

generation

Page 40: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Two intuitions

Design preservation objectives

Semantic approximation

Number of changes

Conformance with refactoring history

Quality objectives

Fix code-smells

Improve quality indicators

Introduce design patterns

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 40

Multi-objective formulation

Multi-objective optimization problem

Application 1

Application 2

Page 41: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 41

Application 1: Design preservation FIRST !

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

Page 42: A Mono- and Multi-objective Approach for Recommending Software Refactoring

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

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 42

NSGA-II adaptation

Page 43: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 43

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

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

Page 44: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 44

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

Page 45: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Set of "good" refactorings

applied in the past

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 45

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

Page 46: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Studied systems

Three code-smell types

Blob, Spaghetti code, and Functional decomposition

Data Collect refactorings from previous versions (Ref-Finder)

Manual inspection

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 46

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

Page 47: A Mono- and Multi-objective Approach for Recommending Software Refactoring

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

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 47

Empirical evaluation

Page 48: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 48

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

Page 49: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 49

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

Page 50: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Two intuitions Design preservation objectives

Semantic approximation

Number of changes

Conformance with refactoring history

Quality objectives

Fix code-smells

Improve quality indicators

Introduce design patterns

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 50

Multi-objective formulation

Multi-objective optimization problem

Application 1

Application 2

Page 51: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Quality FIRST

Objectives functions

1. Fix code-smells

2. Improve quality indicators

3. Introduce design patterns

Design preservation

Constraints to satisfy when applying refactorings

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 51

Application 2: Quality Improvement

Page 52: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Studied systems

Code-smells

God class, Feature Envy, Data Class, and Spaghetti Code

Design patterns

Visitor, Factory method, singleton

Comparison with existing approahes

Seng et al. ’06, Jensen et al. ’11, Basic GA approach

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 52

Evaluation: Application 2

Systems Release # classes KLOC# code-

smells

# design

patterns

Xerces-J v2.7.0 991 240 81 36

GanttProject v1.10.2 245 41 49 15

AntApache v1.8.2 1191 255 92 38

JHotDraw v 6.1 585 21 24 18

Page 53: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 53

Refactoring results

Systems Approaches CCR NP QG

Xerces-J

Application 2 89% 12 0.47

Seng et al. 23% 0 0.54

Jensen et al. 14% 31 0.41

Basic GA approach 88% 0 0.32

GanttProject

Application 2 88% 7 0.34

Seng et al. 24% 1 0.33

Jensen et al. 33% 14 0.35

Basic GA approach 84% 0 0.21

AntApache

Application 2 86% 4 0.5

Seng et al. 7% 0 0.52

Jensen et al. 12% 28 0.51

Basic GA approach 87% 0 0.39

JHotDraw

Application 2 83% 4 0.17

Seng et al. 38% 0 0.19

Jensen et al. 25% 9 0.14

Basic GA approach 88% 0 0.1

Average (all systems)

Application 2 86% 7 0.37

Seng et al. 23% 0.25 0.39

Jensen et al. 21% 20.5 0.35

Basic GA approach 86% 0 0.25

Page 54: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Quality improvement

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 54

Results

0

0,02

0,04

0,06

0,08

0,1

0,12

0,14

0,16

Reusability Flexibility Understandability Effectiveness Functionality Extendability

QG

QMOOD quality attributes

Xerces-J

GanttProject

AntApache

JHotDraw

Page 55: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Refactoring meaningfulness

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 55

Results

0%

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

Xerces-J GanttProject AntApache JHotDraw

RP

Application 2

Seng et al.

Jenson et al.

GA-based approach

Page 56: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Outline

Context and problem

Research methodology

Code-smells detection

Mono-objective software refactoring

Multi-objective software refactoring

Conclusion and perspectives

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 56

Page 57: A Mono- and Multi-objective Approach for Recommending Software Refactoring

First search-based code-smells detection approach Search-based approach : GP

Infer detection rules from code-smell examples

First mono-objective search-based code-smells correction GA: maximize the number of fixed code-smells

CRO: Prioritize the correction of code-smells

First multi-objective search-based refactoring approach Application 1: preserve design

Application 2: improve quality

Validation Empirical evaluation

Very encouraging results

Comparison with existing approaches

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 57

Conclusion

Page 58: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Short term

Code-smells detection

• Consider the change history to improve the detection of code-smells

• Consider other types of code-smells

• Test our approach with other industrial systems

Refactoring

• Provide a generic GUI-based tool to combine all the proposed approaches

• Additional semantic constraints

• Additional refactoring operations

An interactive component

• Put the developer in the loop when recommending refactorings

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 58

Future research directions

Page 59: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Long term

Detection of code-smells in SOA

Refactoring of Service-based systems

• Define refactorings in the service level

• Automatically recommend refactorings

Software migration

Empirical investigations

• The correlation between code-smells and refactoring proneness

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 59

Future research directions

Page 60: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Journal Papers and Book Chapters

1. Ali Ouni, Marouane Kessentini, Slim Bechick and Houari Sahraoui, Prioritizing Code-smells Correction Tasks Using Chemical Reaction Optimization, Journal of Software Quality, 2014.

2. Ali Ouni, Marouane Kessentini, Mel Ó Cinnéide, Houari Sahraoui, Multi-criteria Software Refactoring: Quality, Code Changes, and Semantics Preservation, IEEE Transactions on Software Engineering, 2014. (under review).

3. Marouane Kessentini, Ali Ouni, Philip Langer, Manuel Wimmer and Slim Bechikh, Search-based Metamodel Matching with Structural and Syntactic Measures, Journal of Systems and Software (JSS), 2014.

4. Wael Kessentini, Marouane Kessentini, Houari Sahraoui, Slim Bechikh, and Ali Ouni, A Cooperative Parallel Search-Based Software Engineering Approach for Code-Smells Detection, IEEE Transactions on Software Engineering, 2014.

5. Ali Ouni, Marouane Kessentini , Houari Sahraoui and Mohamed Salah Hamdi, Improving Multi-Objective Code-Smells Correction Using Development History. Journal of Systems and Software (JSS), 2014. (under revision).

6. Ali Ouni, Marouane Kessentini, Houari Sahraoui, Mel Ó Cinnéide, Kalyanmoy Deb, Automated Multi-Objective Refactoring to Introduce Design Patterns and Fix Anti-Patterns. Journal of Automated Software Engineering, 2014. (under submission).

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 60

Publications

Page 61: A Mono- and Multi-objective Approach for Recommending Software Refactoring

7. Ali Ouni, Marouane Kessentini, Houari Sahraoui, Multi-Objective Optimization for Software Refactoring and Evolution, Elsevier, Advances in Computers, volume 94, pp. 103-167, 2014.

8. Ali Ouni, Marouane Kessentini, Houari Sahraoui and Mounir Boukadoum, Maintainability Defects Detection and Correction: A Multi-Objective Approach, in Journal of Automated Software Engineering (JASE), 20(1), pp. 47-79, Springer, 2012.

Refereed Conferences1. Ali Ouni, Marouane Kessentini, Houari Sahraoui and M. S. Hamdi, The Use of Development

History in Software Refactoring Using a Multi-Objective Evolutionary Algorithm, in the Genetic and Evolutionay Computation Conference (GECCO), pp. 1461-1468, July 2013, Amesterdam, The Netherlands,

2. Ali Ouni, Marouane Kessentini and Houari Sahraoui, Search-based Refactoring Using Recorded Code Changes, in the 17th European Conference on Software Maintenance and Reengineering (CSMR), pp. 221-230, March 2013, Genova, Italy.

3. Ali Ouni, Marouane Kessentini, Houari Sahraoui and M. S. Hamdi, Search-based Refactoring: Towards Semantics Preservation. 28th IEEE International Conference on Software Maintenance (ICSM), pp. 347-356, September 2012, Riva del Garda- Italy.

4. Marouane Kessentini, Wael Kessentini, Houari Sahraoui, Mounir Boukadoum, and Ali Ouni, Design Defects Detection and Correction by Example. 19th IEEE International Conference on Program Comprehension (ICPC), pp. 81-90, 22-24 June 2011, Kingston- Canada.

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 61

Publications

Page 62: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 62

Thank you for your attention

Page 63: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Search-based software engineering

By Harman and Jones, in 2001

Formulate software engineering problems as search problems

Application of optimization techniques

Genetic algorithm

Simulated Annealing

NSGA-II

SBSE has become a growing research and practice domain

Software testing

Requirements engineering

Model-driven engineering

Project management

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 63

Page 64: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 64

Big picture

Chemical Reaction Optimisation (CRO)

Page 65: A Mono- and Multi-objective Approach for Recommending Software Refactoring

Semantics

Minimize semantic errors

The correctness of proposed refactorings increase when applied to semantically

connected elements

Semantic constraints

Vocabulary-based similarity (VS)

Dependency similarity (DS)

Implementation similarity (IS)

Feature inheritance usefulness (FIU)

Cohesion-based dependency (CD)

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 65

Design semantics

Page 66: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 66

CRO mimics the interactions of molecules in a chemical reaction to

search for the global optimum

Manipulated agents: Molecule

Energy move

Analogy

A container of molecules

Chemical Reaction Optimisation (CRO)

Chemical meaning Metaheuristic meaning

Molecule Solution

Potential energy Objective function value

Collision Change operator

Kinetic energy Measure of tolerance of having worse solutions

Number of Hits Current total number of moves

Minimum structure Current optimal solution

Page 67: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 67

A series of events take place

Chemical Reaction Optimisation (CRO)

Inter-molecular ineffective collision

x1+x2 x1’+x2’

Synthesis

x1+x2

x’

x x’

On-wall ineffective collision

Decomposition

Page 68: A Mono- and Multi-objective Approach for Recommending Software Refactoring

© Ali Ouni A Mono- and Multi-objective Approach for Recommending Software Refactoring 12 November 2014 68

Chemical Reaction Optimisation (CRO)