[Slides, powerpoint]
Download
Report
Transcript [Slides, powerpoint]
Slicing AspectJ Woven Code
Davide Balzarotti ([email protected]) Politecnico di Milano
Luca Cavallaro
Mattia Monga
Antonio Castaldo D'Ursi
Motivation
AOP is becoming more and more popular since
–
It allows to better organize the code modularizing cross-cutting concerns
–
It is easier to develop small and isolated code unit than big and complex programs
Some points are still unclear…
How difficult is to maintain/improve aspect oriented code?
–
It is not clear how a change in an aspect can affect the whole system
–
Adding a new aspect can violate some system properties
Are aspects real unit of comprehension or just syntactic sugar ?
–
In order to truly understand the behavior of base code one must read the code of
every aspects
2
Aspect Interaction
An interaction occurs every time an aspect can affect the behavior
of another aspect.
–
It is very common when multiple aspects apply to the same program.
–
It is not always a bad thing (it could be a required behavior).
Developers must be aware of possible aspects interactions
–
Sometimes it is very hard to find out interferences reading the code.
(An aspect can modify the value of a field, that change the execution path, causing
the change of another field value…. eventually affecting the behavior of another
aspect)
–
It would be nice to have a tool to check aspects interaction at compile time
3
Program Slicing (in a nutshell)
Informally, a slice consists in all the program statements that may
influence a given set of statements (called slicing criterion).
–
Introduced by Weiser in the ’80 for procedural programming
–
Extended to Object Oriented code by Larsen & Harrold in ’96
Interprocedural slices can be computed solving a reachability
problem on the program System Dependence Graph (SDG)
Problems:
–
Tons of good papers, very few running code
–
Existing solutions cannot be applied as they are to aspect oriented code
4
Program Slicing for
Aspect Interaction Analysis
The slice associated to an aspect is a reduced model of the whole
system as far as concern aspect code influence
Let A1 and A2 be two aspects and S1 and S2 the corresponding
backward slices (computed using A1 and A2 as slicing criteria)
A1 does not interfere with A2 if: A1∩ S2=∅
A1
A2
S2
S1
5
A different approach
Rinard, Salcianu, Bugrara. (FSE end of 2004)
–
Advice classification: augmentation, narrowing, replacement, combination
–
They use scope to classify the interactions between aspect and method:
–
●
Orthogonal (disjoint fields)
●
Independent (no read/write)
●
Observation (advice read, method write)
●
Actuation (advice write, method read)
●
Interference (both write the same fields)
Implementation
●
Pointer and escape analysis
●
Only method execution and method call join point
6
Slicing AOP
Zhao (2002)
–
Target language: AspectJ
–
Aspect oriented SDG (ASDG). Special constructs for advice, introduction…
–
No dynamic pointcuts and wildcards
Blair & Monga (2003)
–
Target language: AspectJ
–
Translate each aspect in a conjugated class, then it applies object oriented
algorithms without any modifications
–
No introductions, no whole program analysis
Problems:
–
Quite limited support of many AspectJ features
–
Hard to implement in a working tool
7
Bytecode Slicing
Let all the dirty work to the AspectJ compiler
Build the System Dependence Graph analyzing the Java byte-code
Apply program slicing techniques using each aspect as the slicing
criterion
Map back the slices nodes to the original classes/aspects
Advantages
AspectJ takes care of translating aspects in classes (we implicitly support all its
features)
No changes are needed if AspectJ introduces a new functionality
Disadvantages
Some details is lost in the weaving process (for instance a hierarchy change)
If AspectJ change its aspects translation approach, we may need to modify our tool
8
Process
Compile the code using AspectJ (or take a precompiled bytecode)
Build the callgraph (soot)
Analyze each procedure
(control dependence, data flow, aliases)
Connect everything together in the SDG
For each aspect:
Select all the aspect’s nodes as slicing criterion
Calculate a backward static slice
Map back the resulting nodes to the original
classes/aspects
9
Example
public class T{
int temperature;
public void set_temp(int t){
//....
this.temperature = t;
//...
}
public void shutdown(){
...
}
}
public aspect TInvariant {
before(T t, int newval):
set(int T.temperature) && args(newval) && target(t) {
if (newval > 100) t.shutdown();
}
}
10
public class T{
int temperature;
public void set_temp(int t){
//....
this.temperature = t;
//...
}
public aspect LockAspect {
public void T.get_lock(){
System.out.println("Lock aquired");
}
public void T.release_lock(){
System.out.println("Lock released");
}
public void shutdown(){
...
}
before(T t): target(t) && (call(void set_temp(int))){
t.get_lock();
}
after(T t): target(t) && (call(void set_temp(int))){
t.release_lock();
}
}
before(T t): target(t) && (call(void shutdown())){
t.get_lock();
}
after(T t): target(t) && (call(void shutdown())) {
t.release_lock();
}
}
Results
The slice computed using TInvariant as slicing criterion does not
contain any line from LockAspect code
Non-interference is guaranteed
The slice computed using LockAspect as slicing criterion contains
a line from the TInvariant advice code
TInvariant may affect the behavior of LockAspect
Note: Since the minimum slice is incomputable, the tool can
find spurious interaction due to some unnecessary nodes
Also a real interference is not a proof that there is a problem !!!
12
Results (graphs)
System Dependence Graph:
Tulip format
236 Nodes
650 Edges
vcg format
13
Limitation
The current prototype has the following limitations:
–
No arrays
–
No exception handling
–
No inner classes
–
No static members
–
No recursive calls
–
No multithread
–
No inter-procedural aliases.
14
Scalability
Cost of SDG construction
Number of Nodes
Time (in seconds)
236
0.64
511
1.05
1067
2.25
Slicing Cost
–
A slice is performed by two traversals of the SDG.
The cost of each traversal is linear on the size of the graph
–
In our example, the slicer algorithm took only 6 ms
15
Final Considerations
Static analysis seems a promising technique to help developers
reasoning about aspects composition
A proper use of metadata annotations (Java 1.5+) by AspectJ
compiler might make the mapping phase more precise and less
implementation dependent
We are currently working to remove most of the limitations in
order to survey quantitatively the modularity and evolvability of
real world AspectJ program
16