Aspect Mining for Large Systems

Preview:

DESCRIPTION

Demonstrated at OOPSLA 2006.

Citation preview

Silvia BreuUniversity of Cambridge

Thomas ZimmermannSaarland University

Christian LindigSaarland University

HAM:Aspect Mining

Aspectscreate()

fork()

connect()

close()

serve()

Aspectscreate()

fork()

connect()

close()

serve()

Aspectscreate()

fork()

connect()

close()

serve()

Typical Aspectsenter()/leave()log()lock()/unlock()

lock()

Aspectscreate()

fork()

connect()

close()

serve()

AOP

Typical Aspectsenter()/leave()log()lock()/unlock()

lock()

Aspectscreate()

fork()

connect()

close()

serve()

AOP

Aspect Mining:Identifying Aspectsin Legacy Code

Typical Aspectsenter()/leave()log()lock()/unlock()

lock()

Research Hypothesis

Cross-cutting concerns emerge over time.

Cross-cutting concerns emerge over time.

Demo #1

Modelling History142Transactions

MODIFICATIONS

Modelling History142Transactions

MODIFICATIONS

Modelling History142Transactions

DELETIONS

MODIFICATIONS

Modelling History142Transactions

DELETIONSADDITIONS

MODIFICATIONS

Modelling History142Transactions

DELETIONSADDITIONS

143

Code Additions

public void _aload_0(int pc) { dumpPcNumber(pc); buffer.append(OpcodeStringValues .BYTECODE_NAMES [IOpcodeMnemonics.ALOAD_0]); writeNewLine();}

Location: _aload_0

public void _aload_0(int pc) { dumpPcNumber(pc); buffer.append(OpcodeStringValues .BYTECODE_NAMES [IOpcodeMnemonics.ALOAD_0]); writeNewLine();}

Location: _aload_1

Code Additions

Location: println

public void _aload_0(int pc) { dumpPcNumber(pc); buffer.append(OpcodeStringValues .BYTECODE_NAMES [IOpcodeMnemonics.ALOAD_0]); writeNewLine();}

Location: _aload_0

142 143141

Co-Addition of Calls

config()connect()

serve()close()

init()

142 143141

Co-Addition of Calls

config()connect()

serve()close()

init()

lock()

142 143141

Co-Addition of Calls

config()connect()

serve()close()

init()

lock()

unlock()

142 143141

Co-Addition of Calls

config()connect()

serve()close()

init()

lock()

unlock()

“fixed bug#1234 by adding proper locks”

lock()unlock()

Cross-Cutting Change

Transaction as a Table

calls

loca

tions

Transaction as a Table

calls

loca

tions

charA

t

runDFAThis Tx added among others a call to charAt in location runDFA

Blocks = Aspect Candidates

calls

loca

tions

lockun

lock

fgh

sync

method sync is called from locations d, e, f, g, h, i, k

{sync} is an aspect candidate

ed

ik

Computing all Blocks

Computing all Blocks

Concept Analysis

calls

loca

tions

Concept Analysis computes all blocks.

Concept Analysis

calls

loca

tions

Concept Analysis computes all blocks.

Concept Analysis

calls

loca

tions

Concept Analysis computes all blocks.

Concept Analysis

calls

loca

tions

Concept Analysis computes all blocks.

Example from Eclipse2004-03-01

Example from Eclipse2004-03-01

nodes reflect size of cross-cutting concern

# locations

# methods

Example from Eclipse2004-03-01

14 locations callunsupportedIn2()

nodes reflect size of cross-cutting concern

# locations

# methods

Example from Eclipse2004-03-01

History contains cross-cutting changes.

14 locations callunsupportedIn2()

nodes reflect size of cross-cutting concern

# locations

# methods

Demo #2

Reinforcement

connect()close()

METHOD: lock()

Aspect Candidate

LOCATIONS: init()serve()

METHOD: lock()

Aspect Candidate

LOCATIONS:

Reinforcement

connect()close()

METHOD: lock()

Aspect Candidate

LOCATIONS: init()serve()

METHOD: lock()

Aspect Candidate

LOCATIONS:

connect()close()

METHOD: lock()

Aspect Candidate

LOCATIONS:

init()serve()

+

Locality

Locality

41 4239 40 43 44 45

christom silvichrischris chrissilvi

Locality

41 4239 40 43 44 45

christom silvichrischris chrissilvi42

Locality

41 4239 40 43 44 45

christom silvichrischris chrissilvi42

Temporal locality

christom silvichrischris chrissilvi

Locality

41 4239 40 43 44 4542

Temporal locality

Locality

41 4239 40 43 44 4542

Temporal locality

christom silvichrischris chrissilvi

Locality

41 4239 40 43 44 4542

Temporal locality

Possessionallocality

christom silvichrischris chrissilvi

Locality

41 4239 40 43 44 4542

Temporal locality

Possessionallocality

christom silvichrischris chrissilvi

➡ merging transactions and running concept analysis.

Results for Eclipse

max

Transactions (43270)

avg

blocks

locations

methods

1235 3.7

1287 3.8

1236 5.4

The average transactionis small. It adds 5 calls in 4 locations.

Results for Eclipse

max

Transactions (43270)

avg

blocks

locations

methods

1235 3.7

1287 3.8

1236 5.4

The average transactionis small. It adds 5 calls in 4 locations.

112 candidates add3 calls or more.

1

Aspect Candidates*

methods

362 88 24candidates 1878

2 3 ≥4

* selected from 159448 blocks

public static final native void _XFree(int address);public static final void XFree(int /*long*/ address) { lock.lock(); try { _XFree(address); } finally { lock.unlock(); }}

Locking Mechanism

public static final native void _XFree(int address);public static final void XFree(int /*long*/ address) { lock.lock(); try { _XFree(address); } finally { lock.unlock(); }}

Locking Mechanism

crosscuts 1284

locations

Future work

• Evolution of cross-cutting concerns.Refactor only those that actually change.

• Relation between cross-cutting concerns

• Refactoring of concerns.

• Package and ship HAM.

Conclusions

• Cross-cutting concerns emerge over time.

• Cross-cutting changes point to aspect candidates.

• HAM scales to industrial-sized systems.

• http://www.st.cs.uni-sb.de/softevo/

Recommended