recommending software refactoring using search-based software enginnering

64
Recommending Software Refactoring Using Search - based Software Engineering Ali Ouni [email protected] Graduate School of Information Science and Technology Department of Computer Science Osaka University 10 December 2014

Upload: ali-ouni

Post on 21-Jul-2015

240 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Recommending Software Refactoring Using Search-based Software Enginnering

Recommending Software Refactoring Using

Search-based Software Engineering

Ali [email protected]

Graduate School of Information Science and Technology

Department of Computer Science

Osaka University

10 December 2014

Page 2: Recommending Software Refactoring Using Search-based Software Enginnering

University of Montreal

November 18, 2014

WinterSummer

Autumn

Page 3: Recommending Software Refactoring Using Search-based Software Enginnering

Montréal, Quebec, Canada

3

Page 4: Recommending Software Refactoring Using Search-based Software Enginnering

Montréal

Montréal downtownVieux-Port Montréal

HockeyPoutine

Rue Hutchison

Page 5: Recommending Software Refactoring Using Search-based Software Enginnering

Tunisia

Page 6: Recommending Software Refactoring Using Search-based Software Enginnering

Tunisia: touristic destination

Sidi BousaidSousse

Nabeul ceramic

Tozeur desert

El Jem theater

Tunisian monument

Yasmine

Couscous Brik

Page 7: Recommending Software Refactoring Using Search-based Software Enginnering

Recommending Software Refactoring Using

Search-based Software Engineering

Ali [email protected]

Graduate School of Information Science and Technology

Department of Computer Science

Osaka University

10 December 2014

Page 8: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 9: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 10: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 11: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 12: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 13: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 14: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 15: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 16: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 17: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 18: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 19: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 20: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 21: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 22: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 23: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 24: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 25: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 26: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 27: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 28: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 29: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 30: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 31: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 32: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 33: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 34: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 35: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 36: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 37: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 38: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 39: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 40: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 41: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 42: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 43: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 44: Recommending Software Refactoring Using Search-based Software Enginnering

44

Refactorings distribution

© Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014

Page 45: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 46: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 47: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 48: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 49: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 50: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 51: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 52: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 53: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 54: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 55: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 56: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 57: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 58: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 59: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 60: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 61: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 62: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 63: Recommending Software Refactoring Using Search-based Software Enginnering

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

Page 64: Recommending Software Refactoring Using Search-based Software Enginnering

64

Thank you for your attention

© Ali Ouni Recommending Software Refactoring Using Search-based Software Engineering 10 December 2014