Towards A Metrics Suite for Aspect-Oriented Software

2 downloads 150 Views 148KB Size Report
Software metrics aim to measure the inherent complexity of software systems with a .... points in AspectJ are method or constructor call, method or constructor ...
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         

Suggest Documents