18
Refactoring Support Tool: Cancer Yoshiki Higo Osaka University

Refactoring Support Tool: Cancer

  • Upload
    shada

  • View
    34

  • Download
    0

Embed Size (px)

DESCRIPTION

Refactoring Support Tool: Cancer. Yoshiki Higo Osaka University. 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 - PowerPoint PPT Presentation

Citation preview

Page 1: Refactoring Support Tool: Cancer

Refactoring Support Tool:Cancer

Yoshiki HigoOsaka University

Page 2: Refactoring Support Tool: Cancer

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

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

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

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

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

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

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

9

The value of metrics for “Pull up Method”

Target Unit : Method Unit DCH >= 1

Page 10: Refactoring Support Tool: Cancer

10

ShapShot of CancerClone class list

Metric Graph

clone category selection Panel

Page 11: Refactoring Support Tool: Cancer

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

12

Specifying based on metrics values

LEN POP DFL RVK RVN

DCH

Page 13: Refactoring Support Tool: Cancer

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

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

15

Page 16: Refactoring Support Tool: Cancer

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

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

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