aspect mining for large systems
DESCRIPTION
Demonstrated at OOPSLA 2006.TRANSCRIPT
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/