Towards A Metrics Suite for Aspect-Oriented Software Jianjun Zhao Department of Computer Science and Engineering Fukuoka Institute of Technology 3-30-1 Wajiro-Higashi, Higashi-ku, Fukuoka 811-0295, Japan
[email protected]
ABSTRACT
! 1.
INTRODUCTION
" " # $ %&' $ %( )*' # + + + Æ #
! $ ",)&-*. / " 0 1/"02 3 *44*
# Æ 1 2 !
! 5 %& 6 . - 7 )) )-' %8 )& )6' 9
! ! ! + " * # " & " 6 # " .
ce0 public class Point { s1 protected int x, y; me2 public Point(int _x, int _y) { s3 x = _x; s4 y = _y; } me5 public int getX() { s6 return x; } me7 public int getY() { s8 return y; } me9 public void setX(int _x) { s10 x = _x; } me11 public void setY(int _y) { s12 y = _y; } me13 public void printPosition() { s14 System.out.println("Point at("+x+","+y+")"); } me15 public static void main(String[] args) { s16 Point p = new Point(1,1); s17 p.setX(2); s18 p.setY(2); } } ce19 class Shadow { s20 public static final int offset = 10; s21 public int x, y; me22 s23 s24 me25 s26
Shadow(int x, int y) { this.x = x; this.y = y; public void printPosition() { System.outprintln("Shadow at ("+x+","+y+")"); } }
ase27 aspect PointShadowProtocol { s28 private int shadowCount = 0; me29 public static int getShadowCount() { s30 return PointShadowProtocol. aspectOf().shadowCount; } s31 private Shadow Point.shadow; me32 public static void associate(Point p, Shadow s){ s33 p.shadow = s; } me34 public static Shadow getShadow(Point p) { s35 return p.shadow; } pe36
pointcut setting(int x, int y, Point p): args(x,y) && call(Point.new(int,int)); pointcut settingX(Point p): target(p) && call(void Point.setX(int)); pointcut settingY(Point p): target(p) && call(void Point.setY(int));
pe37 pe38
ae39
after(int x, int y, Point p) returning : setting(x, y, p) { Shadow s = new Shadow(x,y); associate(p,s); shadowCount++; } after(Point p): settingX(p) { Shadow s = new getShadow(p); s.x = p.getX() + Shadow.offset; p.printPosition(); s.printPosition(); } after(Point p): settingY(p) { Shadow s = getShadow(p); s.y = p.getY() + Shadow.offset; p.printPosition(); s.printPosition();
s40 s41 s42 ae43 s44 s45 s46 s47 ae48 s49 s50 s51 s52 } }
2.
ASPECT-ORIENTED PROGRAMMING WITH ASPECTJ
0 %)' ! 0 : # %)' 0 ! 9 ) 0 0 0 0 !
! ! 0 ! 0
%)'
0
/ 0
9
9
9 0
0 1 2 9 ! ; 9 9 )
0 < 0 9 9 ) 3 0 " # 9 0 %)'
3.
A DEPENDENCE MODEL FOR ASPECTORIENTED SOFTWARE
" !
! , 3.1 Module-Level Dependence Graphs
13=>2 ! 3=> ? = , 3=> 1 =>2 ! => 3=> , 1=>2 ! => 3=> ! => 3.2 Aspect-Level Dependence Graphs
1 =>2 ! =>
=> => 3=> # , => ! => => 3=> 9 ,
ase27 control dependence arc data dependence arc aspect membership arc
me29
s28 pe36
parameter-in, parameter-out, or call arc
f5_in
pe37
pe38
s31
s30 me32
f3_in f4_in
f3_out s33 me34
ae39 ae43
ae48
f3_in s35
f1_in f3_in
f2_in
f3_in f3_in
s40
s41
s42 s44
s45
s46
s47
a1_in a1_in
a2_in
f1_in: x=x_in a1_in: p_in=p
a1_in
s49
s50
s51
s52
a1_in
a2_in
f2_in: y=y_in a2_in: s_in=s
f3_in: p=p_in
f3_out: p_out=p
f4_in: s=s_in
f5_in: shadowCount=shadowCount_in
9 9
"=>
9 * => 9 *7 &( &- &) &* 1 *7 &(2 1 *7 &-2 1 *7 &)2 1 *7 &*2 3 => => 3=>
3.3 System-Level Dependence Graph
1 "=>2 "=>
3.3.1 Representing Interactive Aspects and Classes
< 1)2 1*2 1&2 162
0 0 ; ! ; 3=>
; 3=>
½ ½ ¾ ½ ¾
control dependence arc me15 data dependence arc parameter-in, parameter-out, or call arc
coordination arc
s16
s18
s17
me5
a3_in
a1_in
a3_in
a2_in
f1_in
s6
me2
me11
me9
me7
f4_in f3_in
f3_in
f1_out
f2_out
f2_in
f2_in
f1_in f4_in
s8 s12
f2_out f2_in
s10
f1_in
f1_out s3
s4 s28
ae48
ae39
ae43
f5_in f5_in f1_in
s49 f2_in
s41
s40
f5_in
s44
s42
s45
s46
s50
s51
s52
s47
a5_in
a5_in a5_in a6_in
a5_in a6_in
me22 me13
me32
f1_in
me34 f2_in
f7_out
f6_in
f5_in
f1_in: x=x_in, f5_in: p=p_in, f8_in: s=s_in,
s24
f6_out
f5_out s33
me25 f1_in
f2_in f8_in
f7_in
f1_in
f5_in
f2_in s14
s26
s35
s23
f1_out: x_out=x, f2_in: y=y_in, f2_out: y_out=y, f3_in: _x=_x_in, f3_out: _x_out=_x, f4_in: _y=_y_in, f4_out: _y_out=_y, f5_out: p_out=p, f6_in: this.x=this.x_in, f6_out: this.x_out=this.x, f7_in: this.y=this.y_in, f7_out: this.y_out=this.y, f8_out: = s_out=s, a1_in: _x_in=1, a2_in: _y_in=1, a3_in: x_in=2, a4_in: y_in=2, a5_in: p_in=p, a6_in: s_in=s
!
" #
0 ! ; ; => " $
0 / :
"=> "=> => 9 9 # 5 # : ; # 0 %)'< @
! !
!
A # "
"#$%!
3.3.2 Aspect-Oriented System Dependence Graph
> 0 ! ! "=> 0 "=> %)4 ).' "=>
=> => => 3=>
9 & "=> 0 9 )
4.
METRICS FOR ASPECT-ORIENTED SOFTWARE
" ! # B 4.1 Module-Level Metrics
=> => 3=> ! C ¯
¯
¯
<
<
<
# ! # Æ @ A ! < ¯
< @ A 12
" < ¯
!
!
4.2 Aspect-Level Metrics
=> ! C => ¯
¯
¯
¯
¯
¯
¯
< <
< < < < < @ A 12
D E F E F F F 3
G*4 D- 67-6(8 )((6 < %.' 0 ? @? 3 = ¯ < /A * + )&*)6) = I" D )((& %-' D,9 " C / @" 3 < ¯ < $ / A " , ! ? / )((7 %7' 3 5 @, " " A , D 5 )(77 ¯ < %8' " 5 = H @" "
3 : 9A & G7 D. .)4.)8 )(8) ¯ < %(' > H+ 0 C 3 # ? 3 ? @ A 12 C 0 3 C 0 @ B /A ## , - - **4*6* CD?" D G)*6) " G 0 )((7 E F 3 %)4' C = C 3 0 5 @" B B " A #. < , > 3 )((- ¯ ! ! %))' ! 0 3? @ " ? 3 A & G* D6 &48&*4 )(7- 5. CONCLUDING REMARKS %)*' / ! 5 B 5 " " @D = " < 3= "
! ? A $# , )47))( )((( %)&' : 5 J 0 @! , I 3 , K ! " = A / 0 1 6..* )(78 %)6' 0 L @B ? " A 2 0 0 1 )-&)-- ?3 ">"B9! D )((8 5 %).' 0 L @" ? 0 /A 0 1 , )*-)&& 3 )(((
# %)-' 5L @ 3 1 ' A
0 > )((7 0 0