Top Banner
Refactoring Support Tool: Cancer Yoshiki Higo Osaka University
18

Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

Dec 22, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

Refactoring Support Tool:Cancer

Yoshiki HigoOsaka University

Page 2: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

2

Gemini & Cancer Gemini

shows all code clones detected by CCFinder. gives user panoramic views of code clones in source

code. has several quantitative information of code clones of

each file and clone class.

Cancer extracts refactoring-oriented-code clones from ones

detected by CCFinder. appends several metric values to extracted code clones. enables user to know how to remove code clones if

certain degree of its metric conditions is satisfied.

Page 3: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

3

Code clones in Cancer All code clones ( which are extracted from

ones detected by CCFinder) correspond to structural blocks of programming language.

Currently, Cancer can apply only Java language.

Declaration unit code clone class declaration 、 interface declaration

Method unit code clone method body 、 constructor 、 static initializer

Statement unit code clone do 、 for 、 if 、 switch 、 synchronized 、 try 、

while

Page 4: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

4

Metrics in Cancer(1/3)

Cancer characterizes extracted code clones using 6 metrics.

Using these metrics, we can get how to remove them.

6 metrics are RVK,RVN,DCH,LEN,POP,DFL

Page 5: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

5

Metrics in Cancer(2/3)

Variables which are used in code clone, but defined outside.

1. RVK : the number of such variables.2. RVN : the sum of used count of such

variables.

Relation of code clone on class hierarchy3. DCH : the degree of dispersion on class

hierarchy

DCH takes into account only class hierarchy of target software (don’t include class hierarchy of library).

Class A{

・・・

}

Class B extends A{

・・・

void foo( ・・・ ){

・・・

}

・・・

}

Class C extends A{

・・・

void bar( ・・・ ){

・・・

}

・・・

}

code clone

The value of DCH : 1

Class A{

・・・

void foo( ・・・ ){

・・・

}

・・・

void bar( ・・・ ){

・・・

}

・・・

}

code clone

The value of DCH : 0

int a;

MyClass myClass = new MyClass();

・・・

for( int i = a ; i < 10 ; i++ ){

int c = a + 1;

myClass.set(c);

}

・・・

code clone

RVK variable

The value of RVK : 2

The value of RVN : 2 + 1 = 3

Page 6: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

6

Metrics in Cancer(3/3)

4. LEN: the average of length of code clones in a clone class

5. POP: the number of code clones in a clone class

6. DFL: Estimation of how many tokens would be removed from source files when all code clones of a clone class are replaced with caller statements of a new identical routine

new sub routinecaller

statements

Page 7: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

7

Removal of Code clone using Refactoring Pattern We use Refactoring Pattern[1] for

removal of code clones with 6 metrics Following patterns are applicable.

Extract Method Pull Up Method

[1] M. Fowler: Refactoring: Improving the Design of Existing Code, Addison-Wesley, 1999.

Page 8: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

8

The value of metrics for “Extract Method”

Target Unit : Method Unit, Statement Unit DCH == 0 RVK <= 1

int i;

・・・

・・・

for( int j = 0 ; j < i ; j++ ){

・・・

}

・・・

int i;

・・・

・・・

i = newMethod(i);

・・・

int newMethod(int a){

for( int j = 0 ; j < a ; j++ ){

・・・

}

return a;

}

・・・

Page 9: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

9

The value of metrics for “Pull up Method”

Target Unit : Method Unit DCH >= 1

Page 10: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

10

ShapShot of CancerClone class list

Metric Graph

clone category selection Panel

Page 11: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

11

Specifying code clones

User can specify code clones using Metric Graph and Clone Category Selection Panel Metrics Graph : Specifying based on metric

values Clone Category Selection Panel : Specifying

based on unit of code clone Clone class list shows only specified

clone classes

Page 12: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

12

Specifying based on metrics values

LEN POP DFL RVK RVN

DCH

Page 13: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

13

Specifying based on unit of code clone

LEN POP DFL RVK RVN

DCH

Method

While

・・・・・・・・・・・・・

・・・・・・・・・・・・・・

Method Unit

While Unit

Page 14: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

14

Case study

Target software : Ant 1.5.4, which is an open source java software.

LOC : about 15k

The result Using “Pull up Method”, 2 clone classes are

removed. Using “Extract Method”, 1 clone class is

removed

Page 15: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

15

Page 16: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

16

Code Clone Code clone is a code fragment in source files

that is identical or similar to another

Code clone is one of factors that make software maintenance more difficult.

If some faults are found in a code clone, it is necessary to consider pros and cons of modification in its all code clones.

Clone Pair

Clone Class

Page 17: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

17

Example Value of RVK, RVN Variables, “a” and “b” which are used in code

clone, but defined outside, are used 2 and 3 times.

RVK : 1 + 1 = 2 RVN : 2 + 3 = 5

Page 18: Refactoring Support Tool: Cancer Yoshiki Higo Osaka University.

18

Example values of DCH If all code fragments in a clone class are in

same class, DCH : 0

If all code fragments in a clone class are in a certain class and its child classes,

DCH : 1

If classes which include code fragments of a certain clone class don’t have common parent class,

DCH : -1