SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
Evolutionary Problems
                     in Aspect-Oriented
                    Software Development

                                                   Pr. Kim Mens




Inspired by and based on:

                                                   Dr. Tom Tourwé
K. MENS & T. TOURWE.
Evolution Issues in Aspect-Oriented Programming.
Chapter in book on quot;Software Evolutionquot;,
edited by T. Mens & S. Demeyer, pp. 197–224.
In press. Springer, 2008.

                                                                    1
Goal

    Identify some “evolution issues” in AOSD


    – challenges that adopters of AO technology may face
    – research problems remaining to be explored
    Three main categories:


    – aspect exploration : discovering potential aspects
    – aspect extraction : migrating to AO solution
    – aspect evolution : maintaining and evolution of AO system
                                                                                     Aspect
                                                                                    Evolution
                                                                     BASE system
                        Aspect                       Aspect
      LEGACY system                 LEGACY system
                      Exploration                   Extraction
                                                                                   Aspect
                                                                 Aspect   Aspect




                                                                                                2

                                                                                                2
The AOP Idea
                                       aspect 3
 aspect 1         aspect 2




                                                             Aspect
                                                             Weaver

      core application functionality




                                                  woven output code
                                                                      3

                                                                          3
class Point extends Shape {

  public void setX(int x) throws IllegalArgumentException {
    if ( x < MIN_X || x > MAX_X )
        throw new IllegalArgumentException(quot;x is out of bounds.quot;);
    ...
                                                                                    Tangled
  }
                                                                                   with base
  public void setY(int y) throws IllegalArgumentException {
    if ( y < MIN_Y || y > MAX_Y )
                                                                                        code
        throw new IllegalArgumentException(quot;y is out of bounds.quot;);
    ...
  }
}                              class FigureElement extends Shape {

                                  public void setXY(int, int) throws IllegalArgumentException {
                                    if ( x < MIN_X || x > MAX_X )
Scattered                               throw new IllegalArgumentException(quot;x is out of bounds.quot;);
                                    if ( y < MIN_Y || y > MAX_Y )
concern                                 throw new IllegalArgumentException(quot;y is out of bounds.quot;);
                                    ...
                                  }
                              }

                                                                                                     4

                                                                                                     4
aspect PointBoundsChecking {
                                                                                        Aspect
    pointcut setX(int x):
     (execution(void FigureElement.setXY(int, int)) && args(x, *))
     || (execution(void Point.setX(int)) && args(x));

    before(int x): setX(x) {
      if ( x < MIN_X || x > MAX_X )
                                                          class Point extends Shape {
         throw new IllegalArgumentException(quot;x is out of bounds.quot;);
    }
                                                            public void setX(int x) {
                                                              ...
    pointcut setY(int y):
                                                            }
      (execution(void FigureElement.setXY(int, int)) && args(*, y))
                                                            public void setY(int y) {
      || (execution(void Point.setY(int)) && args(y));
                                                              ...
                                                            }
    before(int y): setY(y) {
                                                          }
      if ( y < MIN_Y || y > MAX_Y )
         throw new IllegalArgumentException(quot;y is out of bounds.quot;);
                                                          class FigureElement extends Shape {
    }
}
                                                             public void setXY(int, int) {
                                                               ...
                 Base code                                   }
                                                         }                                   5


                                                                                                 5
Intensional pointcut definition
aspect PointBoundsChecking {

    pointcut setX(int x):
     (execution(void FigureElement.setXY(int, int)) && args(x, *))
     || (execution(void Point.setX(int)) && args(x));

                                    pointcut setX(int x):
...                                   (execution(* Shape+.setXY(int, int)) && args(x, *))
                                       || (execution(* Shape+.setX(int)) && args(x));
    pointcut setY(int y):
     (execution(void FigureElement.setXY(int, int)) && args(*, y))
     || (execution(void Point.setY(int)) && args(y));

                                    pointcut setY(int y):
...                                   (execution(* Shape+.setXY(int, int)) && args(*, y))
                                       || (execution(* Shape+.setY(int)) && args(y));

}                                                                                           6


                                                                                                6
Aspect Exploration

    Problem: how to discover potential aspect


    candidates in a (legacy) system
    Issues:


    – how are crosscutting concerns implemented?
       • taxonomy of sorts needed
    – what crosscutting concerns can be discovered?
       • can only trivial concerns be detected
    – how do crosscutting concerns affect software quality?
       • assess the need for extracting them into aspects
    – how to find the crosscutting concerns in the code?
       • precision / recall / coverage
                                                              7

                                                              7
Aspect Mining Techniques




                                     method
                                  fragments
                                                AST-based
                                              Clone Detection

                                                PDG-based                               Clone
                                              Clone Detection                          Detection

                                               Token-based
                                              Clone Detection


 Structural /   Token-                           Method
 Behavioral     Based                           Clustering

                                                 Identifier
                                                 Analysis

                                                Language                               Clustering




                                                              method-level
                                                  Clues

                                                 Unique
                                                 Methods

                                                  Fan-in                               Concept
                                                 Analysis                              Analysis

                                                   Call
                                                Clustering

                                                Execution
                                                 Patterns
                         Static
                                                 Dynamic
                                                 Analysis
                                                                                                    8
                                                                             Dynamic
                                                                                                    8
Mining for Crosscutting Concerns

    Problem: how to discover crosscutting concerns


    automatically?
    Observed problems:


    – Poor precision            – Refactorability
    – Poor recall               – Empiricial validation
                                – Composability
    – Incomplete coverage
    – Subjectivity              – Variability
    – Scaleability              – Impact on quality
    – User-involvement          – Relevance
    – Difficulty to compare results

                                                          9

                                                          9
Aspect Extraction

    Problem: how to extract discovered aspect


    candidates into real aspects?
    Issues:


    – how to separate crosscutting concerns from base code?
       • depends on how tangled the code is
    – how to determine appropriate joinpoints for the aspects?
       • aspect languages impose limitations on kinds of joinpoints
    – how to determine appropriate pointcuts for the aspects?
       • prefer intensional pointcuts over extensional ones
    – how to determine appropriate advice code?
       • modifications required due to changing context, and due to
         small variations in the scattered code                       10

                                                                      10
enclosing method, an after-advice is used instead
                                          and describe 7 extraction transformations with the particular pointcuts they
                                                            before-advice.
                                          ample, they define an Extract Before Call transformation, depicted in Figure
                                                               The second refactoring deals with the following c
                 Refactoringcode that callThehoccursoccurstowithin the execution call.method asp
                                      Crosscuttingmoved method of before/aft
                                                                           Concerns f.
                        a block of           always          before a particular           In the
                        cut p intercepts the      to that
                                                       call/block be             is always
                 into Aspects
                        reintroduces the call to g at the proper execution point.
                                                 another call.
    Kim Mens and Tom Tourw´
                          e


                                                                     class A {
                                   f



                                                                       int x = 0;
                                                                       void f(C c) {
                                                                                                   class A {
                                                                          x++;
                                                                                                     int x = 0;
                                                                   α (CB) this.g(); ω()
                                                                          this .g();
                                                                                                     void f(C c) {
                                                                          c.h();
                                                                                                       x++;
                                                                          if (x > 0)
                            f

                                                                                                       c.h();
                                         g
                                                                            x = 0;
                                                                       }                               if (x > 0)
                                                                     }                                   x = 0;
                                                                                                     }
                                                                                                   }
                                                                       aspect B {
                                                                      aspect B {
                                                                          pointcut p(A a):
                                                                         pointcut p(A a):
                      f
                                                                            execution(void A.f(C)) &&
                                                                           execution(void A.f(C)) &&
                                   g           aspect


                                                                            this(a) && call(void C.h());
                                                                           this(a) && call(void C.h());
                                                                       before(A a): p(a) { { a.g();} }
                                                                          before(A a): p(a) a.g();
                                                                       }
                                                                       }


                                                                                 Figure 6. Callan
                                                                                   Applying Before.
                     Fig. 9.6: Making code aspect friendly
                           Making code                          Fig. 9.7: The Extract Before Call transformation
                                                                                        “extract before call”
                          aspect-friendly                                 Figure 6 shows the code transformation produced
                                                                                            refactoring
Another alternative is to restructure the code before extracting the crosscutting concern
 e, to make it fit the joinpoint model offered by the AOP language. This is the approach aspect B, the pointcut p intercepts 11
                                                                     Before. In the                                         the
en by both Binkley et al [458] and Monteiro and Fernandes [455], who suggest to apply
                                                                     h that occurs within the execution of method f. 11     A
 itional refactorings first in order to make the codeAlthough not explained explicitly in the paper, it is clear that applying
                                                    more “aspect friendly”. For example,
Aspect Evolution

    Problem: how to manage the evolution of an


    aspect-oriented problem?
    Issues:


    – how to assess the impact on the aspects when the base
      system evolves?
       • base system is oblivious of the aspects
    – how to manage evolution of the aspects themselves?
       • to make the more abstract, more reusable, less brittle, ...
    – how to deal with interacting and conflicting aspects?
       • two aspects can work well independently but cause problems
         when combined

    Aspect evolution paradox

                                                                       12

                                                                       12
Fragile Pointcut Problem
                                                                                                                                                                                                                                 */
                                                    */
                                                                                                                                                                                                                                public class FileDownload {
                                                   public class FileDownload {
                                                                                                                                                                                                                                                public static
                                                                                                                                                                               import java.io.*;
                                                                   public static
import java.io.*;                                                                                                                                                              import java.util.zip.*;
                                                                                                                                                                                                                                void download(String address,
                                                   void download(String address,
import java.util.zip.*;
                                                                                                                                                                                                                                String localFileName) {
                                                                                                                                                                               /**
                                                   String localFileName) {
/**                                                                                                                                                                              * Command line program to copy a file to
  * Command line program to copy a file to                                                                                                                                     another directory.
                                                                                                                                                                                                                                                 OutputStream
another directory.                                                                                                                                                               * @author Marco Schmidt
                                                                     OutputStream out
  * @author Marco Schmidt                                                                                                                                                        */
                                                                                                                                                                                                                                out = null;
                                                   = null;
  */                                                                                                                                                                           public class CopyFile {
public class CopyFile {                                                                                                                                                        
                       // constant values for

                       // constant values for                                                                                                                                 the override option
                                                                                                                                                                                                                                                 URLConnection
                                                                     URLConnection
the override option                                                                                                                                                            
                       public static final
                                                                                                                                                                                                                                conn = null;

                       public static final int                                                                                                                                int OVERWRITE_ALWAYS = 1;
                                                   conn = null;
OVERWRITE_ALWAYS = 1;                                                                                                                                                          
                       public static final

                       public static final int                                                                                                                                int OVERWRITE_NEVER = 2;
                                                                                                                                                                                                                                                 InputStream
OVERWRITE_NEVER = 2;                                                                                                                                                           
                       public static final
                                                                     InputStream       in                
                      public static Long createChecksum(File file)

                       public static final int                                                                                                                                int OVERWRITE_ASK = 3;                                                                       
                      public static Long createChecksum(File
                                                                                                         throws IOException {
                                                   = null;
OVERWRITE_ASK = 3;
                                                                                                                                                                                                                                                                            file) throws IOException {
                                                                                                         
                      
                      long millis =           
                      // program options                                                    
                      
                      long millis =
                                                                                                         System.currentTimeMillis();

                      // program options                                                                                                                                      initialized to default values                                                                System.currentTimeMillis();
                                                                                                         
                      
                      InputStream in = new
initialized to default values                                                                                                                                                  
                      private static int                                                    
                      
                      InputStream in =
                                                                                                         FileInputStream(file);
                                                                                                                                                                                                                                               */

                      private static int                                                                                                                                      bufferSize = 4 * 1024;                                                                       new FileInputStream(file);
bufferSize = 4 * 1024;
                                                                  */                                                                                                           
                      private static boolean
                                                                                                                                                                                                                                 public class HappyNewYear
                                                                                                         
                        
                    byte[] buffer = new

                      private static boolean                                                                                                                                  clock = true;                                                                                
                       
                     byte[] buffer =
                                                    public class HappyNewYear                            byte[bufferSize];
                                                                                                                                                                                                                                 implements Runnable
clock = true;                                                                                                                                                                  
                      private static boolean                                                new byte[bufferSize];

                      private static boolean
                                                    implements Runnable                                                                                                        copyOriginalTimestamp = true;
                                                                                                                                                                                                                                               {
copyOriginalTimestamp = true;                                                                                                                                                  
                      private static boolean
                                                                  {

                      private static boolean                                                                                                                                  verify = true;
verify = true;                                                                                                                                                                 
                      private static int
                                                                                                                                                                                                                                 private static NumberFormat

                      private static int                                                                                                                                      override = OVERWRITE_ASK;
                                                    private static NumberFormat                                                                                                                                                  formatter =
override = OVERWRITE_ASK;
                                                    formatter =                                                                                                                
                      public static Long

                      public static Long                                                                                                                                      copyFile(File srcFile, File destFile)
                                                    NumberFormat.getInstance();
copyFile(File srcFile, File destFile)                                                                                                                                          

                                                                                                                                                                              
                      throws IOException {

                      throws IOException {                                                                                                                                    
                                                    private JFrame frame;

                                                                                                                                                                              
                      InputStream in = new

                      InputStream in = new                                                                                                                                    FileInputStream(srcFile);
FileInputStream(srcFile);                                                                                                                                                      
                                                    private JLabel label;

                                                                                                                                                                              
                      OutputStream out = new

                      OutputStream out = new                                                                                                                                  FileOutputStream(destFile);
                                                                                                                                                                                                                                 */
FileOutputStream(destFile);                                                                                                                                                    
                                                    private long newYearMillis;

                                                                                                                                                                              
                      long millis =
                                                                                                                                                                                                                                public class FileDownload {

                      long millis =                                                                                                                                           System.currentTimeMillis();
                                                                                                                                                                                                                                                public static
System.currentTimeMillis();                                                                                                                                                    
                                                    private String message;

                                                                                                                                                                              
                      CRC32 checksum = null;
                                                                                                                                                                                                                                void download(String address,

                      CRC32 checksum = null;                                                                                                                                  
                                                                                                                                                                                                                                String localFileName) {

                                                                                                                                                                              
                      if (verify) {

                      if (verify) {                                                                                                                                           

                      
                                                    public HappyNewYear(JFrame                                                                                                 
                                                                                                                                                                                                                                                 OutputStream

                      checksum = new CRC32();                                                                                                                                 
                      checksum = new
                                                    frame, JLabel label)

                      
                                                                                                                                                       CRC32();
                                                                                                                                                                                                                                out = null;

                      checksum.reset();                                                                                                                                       

                      
                       }                                                                                                                               
                                                    {

                                                                                                                                                                              
                      checksum.reset();
                                                                                                                                                                                                                                                 URLConnection

                      byte[] buffer = new                                                                                                                                     
                                                                                                                                                                                                                                conn = null;
byte[bufferSize];                                                                                                                                                              
                      }
                                                                                                                                                                               
                                                    // store argument GUI                                                                                                      
                      byte[] buffer = new
                                                                                                                                                                                                                                                 InputStream
                                                                                                                                                                               byte[bufferSize];
                                                    elements                                                                                                                   
                                                                                                                                                                               
                      int bytesRead;
                                                                                                                                                                               
                                                                                                                                                                               
                      while ((bytesRead =
                                                    this.frame = frame;                                                                                                        in.read(buffer)) >= 0) {
                                                                                                                                                                               
                                                                                                                                                                               
                                                                                                                                                                               
                      if (verify) {
                                                                                                                                                                               




                                                                                                                                      evolution
                                                   Pointcuts in program                                                                                                                                     Pointcuts in evolved program
                                                                                                                                                                                                                                                                                                                                                        tal
                                                                                                                                                                                                                                                                                                                                                     den miss
                                                                                                                                                                                                                                                                                                                                                   i
                                                                                                                                                                                                                                                                                                                                               acc int
                                                                                                                                                                                                                                                                                                                                                  po
                                                                                                                                                                                                                                                                                                                                              join

                                                                                                                                                                                                      ded e
                                                                                                                                                                                                   ten aptur
                                                                                                                                                                                                 n
                                                                                                                                                                                              uni int c
                                                                                                                                                                                                po
                                                                                                                                                                                            join
                                                                                                Class                                                                                                           Class
                                                                                                Name                                      Class                                                                 Name                                               Class
                                      Class                                                 Attributes                                    Name                                                              Attributes                                             Name
                                      Name                                                  Attributes                                Attributes                                                            Attributes                                         Attributes
                                  Attributes                                                                                                                                                                                    1
                                                                                            Operations                                Attributes                                                            Operations                                         Attributes
                                                                                                                                                                                                                                                       1
                                                                                                                                                                                                                                *
                                  Attributes                                                                                                                                                                                            Class                                                                Class
                                                                                   1        Operations                                Operations                                                            Operations                                         Operations
                                                                                                                                                                                                                                                  *
                                                        1                                                                     1
                                  Operations                                                                                                                                                                                            Name                                                                 Name
                                                                                                                                      Operations                                                                                                               Operations
                                                                              *
                                  Operations                                                                                 *                                                                                                      Attributes                                                           Attributes
                                                             *       Class                                   Class                                                                                                                  Attributes                                                           Attributes
                                                                     Name                                    Name                                                                                                                   Operations                                                           Operations
                                                                                                                                                                                                                                                                            Class
                                                                 Attributes                              Attributes                                                                                                                 Operations                                                           Operations
                                                                                                                                                                                                                                                                            Name
                                                                 Attributes                              Attributes
                                                                                                                                                                                                                                                                        Attributes
                                                                 Operations                              Operations                                                                       Class
                                  Class                                                                                                                                                                                                                                 Attributes
                                                                 Operations                              Operations                                                                       Name
                                  Name                                                                                                                                                                                                                                  Operations
                                                                                                                                                                                      Attributes
                              Attributes                                                                                                                                                                                                                                Operations
                                                                                                                                                                                      Attributes
                              Attributes
                                                                                                                                                                                      Operations
                                                        Source program                                                                                                                                           Evolved Source program
                              Operations
                                                                                                                                                                                      Operations
                              Operations



                                                                                                                                                                                                                                                                                                                                             13

                                                                                                                                                                                                                                                                                                                                                          13
Conclusion

    AO is a very interesting area for software


    evolution researchers to explore
    – not only AOP but AOSD in general (e.g. “early aspects”)
    – many open evolution problems and issues to explore
    – in order to achieve widespread adoption of AOSD
    – some problems can reuse existing evolution research
    – other problems require dedicated solutions


    – it’s not too late to jump on the train...



                                                            14


                                                                 14

Mais conteúdo relacionado

Mais procurados

Difrentiation
DifrentiationDifrentiation
Difrentiationlecturer
 
Tall-and-skinny Matrix Computations in MapReduce (ICME MR 2013)
Tall-and-skinny Matrix Computations in MapReduce (ICME MR 2013)Tall-and-skinny Matrix Computations in MapReduce (ICME MR 2013)
Tall-and-skinny Matrix Computations in MapReduce (ICME MR 2013)Austin Benson
 
ES6 and AngularAMD
ES6 and AngularAMDES6 and AngularAMD
ES6 and AngularAMDdhaval10690
 
Oops lab manual2
Oops lab manual2Oops lab manual2
Oops lab manual2Mouna Guru
 
Java Graphics
Java GraphicsJava Graphics
Java GraphicsShraddha
 
Lec 11 12_sept [compatibility mode]
Lec 11 12_sept [compatibility mode]Lec 11 12_sept [compatibility mode]
Lec 11 12_sept [compatibility mode]Palak Sanghani
 
03 and 04 .Operators, Expressions, working with the console and conditional s...
03 and 04 .Operators, Expressions, working with the console and conditional s...03 and 04 .Operators, Expressions, working with the console and conditional s...
03 and 04 .Operators, Expressions, working with the console and conditional s...Intro C# Book
 
Day 3 graphing linear equations
Day 3 graphing linear equationsDay 3 graphing linear equations
Day 3 graphing linear equationsErik Tjersland
 

Mais procurados (16)

Lesson 22: Graphing
Lesson 22: GraphingLesson 22: Graphing
Lesson 22: Graphing
 
Lesson 22: Graphing
Lesson 22: GraphingLesson 22: Graphing
Lesson 22: Graphing
 
C programs
C programsC programs
C programs
 
Difrentiation
DifrentiationDifrentiation
Difrentiation
 
Op ps
Op psOp ps
Op ps
 
C++ programming pattern
C++ programming patternC++ programming pattern
C++ programming pattern
 
3433 Ch09 Ppt
3433 Ch09 Ppt3433 Ch09 Ppt
3433 Ch09 Ppt
 
Tall-and-skinny Matrix Computations in MapReduce (ICME MR 2013)
Tall-and-skinny Matrix Computations in MapReduce (ICME MR 2013)Tall-and-skinny Matrix Computations in MapReduce (ICME MR 2013)
Tall-and-skinny Matrix Computations in MapReduce (ICME MR 2013)
 
OpenGL ES 3 Reference Card
OpenGL ES 3 Reference CardOpenGL ES 3 Reference Card
OpenGL ES 3 Reference Card
 
ES6 and AngularAMD
ES6 and AngularAMDES6 and AngularAMD
ES6 and AngularAMD
 
Oops lab manual2
Oops lab manual2Oops lab manual2
Oops lab manual2
 
Java Graphics
Java GraphicsJava Graphics
Java Graphics
 
Lec 11 12_sept [compatibility mode]
Lec 11 12_sept [compatibility mode]Lec 11 12_sept [compatibility mode]
Lec 11 12_sept [compatibility mode]
 
03 and 04 .Operators, Expressions, working with the console and conditional s...
03 and 04 .Operators, Expressions, working with the console and conditional s...03 and 04 .Operators, Expressions, working with the console and conditional s...
03 and 04 .Operators, Expressions, working with the console and conditional s...
 
Learn Java 3D
Learn Java 3D Learn Java 3D
Learn Java 3D
 
Day 3 graphing linear equations
Day 3 graphing linear equationsDay 3 graphing linear equations
Day 3 graphing linear equations
 

Destaque

Aspect Oriented Software Development
Aspect Oriented Software DevelopmentAspect Oriented Software Development
Aspect Oriented Software DevelopmentOtavio Ferreira
 
Aspect Oriented Software Development
Aspect Oriented Software DevelopmentAspect Oriented Software Development
Aspect Oriented Software DevelopmentJignesh Patel
 
Aspect oriented software development
Aspect oriented software developmentAspect oriented software development
Aspect oriented software developmentMaryam Malekzad
 
Ch21-Software Engineering 9
Ch21-Software Engineering 9Ch21-Software Engineering 9
Ch21-Software Engineering 9Ian Sommerville
 
Aspect oriented architecture
Aspect oriented architecture Aspect oriented architecture
Aspect oriented architecture tigneb
 
Aspect-Oriented Software Development with Use Cases
Aspect-Oriented Software Development with Use CasesAspect-Oriented Software Development with Use Cases
Aspect-Oriented Software Development with Use Caseswww.myassignmenthelp.net
 
Aspect-Oriented Technologies
Aspect-Oriented TechnologiesAspect-Oriented Technologies
Aspect-Oriented TechnologiesEsteban Abait
 
AOSD توسعه نرم افزار جنبه گرا
AOSD توسعه نرم افزار جنبه گراAOSD توسعه نرم افزار جنبه گرا
AOSD توسعه نرم افزار جنبه گراOmid Rajabi
 
UML for Aspect Oriented Design
UML for Aspect Oriented DesignUML for Aspect Oriented Design
UML for Aspect Oriented DesignEdison Lascano
 
QSOUL/Aop
QSOUL/AopQSOUL/Aop
QSOUL/AopESUG
 
Introduction to Aspect Oriented Software Development
Introduction to Aspect Oriented Software DevelopmentIntroduction to Aspect Oriented Software Development
Introduction to Aspect Oriented Software Developmentmukhtarhudaya
 
Aspect Mining Techniques
Aspect Mining TechniquesAspect Mining Techniques
Aspect Mining TechniquesEsteban Abait
 
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)amirbabol
 
Agile Software Development Overview
Agile Software Development OverviewAgile Software Development Overview
Agile Software Development OverviewStewart Rogers
 

Destaque (15)

Aspect Oriented Software Development
Aspect Oriented Software DevelopmentAspect Oriented Software Development
Aspect Oriented Software Development
 
Aspect Oriented Software Development
Aspect Oriented Software DevelopmentAspect Oriented Software Development
Aspect Oriented Software Development
 
Aspect oriented software development
Aspect oriented software developmentAspect oriented software development
Aspect oriented software development
 
Ch21-Software Engineering 9
Ch21-Software Engineering 9Ch21-Software Engineering 9
Ch21-Software Engineering 9
 
Aspect oriented architecture
Aspect oriented architecture Aspect oriented architecture
Aspect oriented architecture
 
Scrum doc
Scrum docScrum doc
Scrum doc
 
Aspect-Oriented Software Development with Use Cases
Aspect-Oriented Software Development with Use CasesAspect-Oriented Software Development with Use Cases
Aspect-Oriented Software Development with Use Cases
 
Aspect-Oriented Technologies
Aspect-Oriented TechnologiesAspect-Oriented Technologies
Aspect-Oriented Technologies
 
AOSD توسعه نرم افزار جنبه گرا
AOSD توسعه نرم افزار جنبه گراAOSD توسعه نرم افزار جنبه گرا
AOSD توسعه نرم افزار جنبه گرا
 
UML for Aspect Oriented Design
UML for Aspect Oriented DesignUML for Aspect Oriented Design
UML for Aspect Oriented Design
 
QSOUL/Aop
QSOUL/AopQSOUL/Aop
QSOUL/Aop
 
Introduction to Aspect Oriented Software Development
Introduction to Aspect Oriented Software DevelopmentIntroduction to Aspect Oriented Software Development
Introduction to Aspect Oriented Software Development
 
Aspect Mining Techniques
Aspect Mining TechniquesAspect Mining Techniques
Aspect Mining Techniques
 
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)
Software reliability model(روش های اندازه گیری قابلیت اطمینان نرم افزار)
 
Agile Software Development Overview
Agile Software Development OverviewAgile Software Development Overview
Agile Software Development Overview
 

Semelhante a Evolutionary Problems In Aspect Oriented Software Development

public class TrequeT extends AbstractListT { .pdf
  public class TrequeT extends AbstractListT {  .pdf  public class TrequeT extends AbstractListT {  .pdf
public class TrequeT extends AbstractListT { .pdfinfo30292
 
Introduction to AspectJ
Introduction to AspectJIntroduction to AspectJ
Introduction to AspectJmukhtarhudaya
 
Chapter 7 functions (c)
Chapter 7 functions (c)Chapter 7 functions (c)
Chapter 7 functions (c)hhliu
 
45 aop-programming
45 aop-programming45 aop-programming
45 aop-programmingdaotuan85
 
Java Simple Programs
Java Simple ProgramsJava Simple Programs
Java Simple ProgramsUpender Upr
 
Les nouveautés de C# 6
Les nouveautés de C# 6Les nouveautés de C# 6
Les nouveautés de C# 6Microsoft
 
Machine-level Composition of Modularized Crosscutting Concerns
Machine-level Composition of Modularized Crosscutting ConcernsMachine-level Composition of Modularized Crosscutting Concerns
Machine-level Composition of Modularized Crosscutting Concernssaintiss
 
C# 6.0 - April 2014 preview
C# 6.0 - April 2014 previewC# 6.0 - April 2014 preview
C# 6.0 - April 2014 previewPaulo Morgado
 
openFrameworks 007 - 3D
openFrameworks 007 - 3DopenFrameworks 007 - 3D
openFrameworks 007 - 3Droxlu
 
JAVA - Design a data structure IntSet that can hold a set of integers-.docx
JAVA - Design a data structure IntSet that can hold a set of integers-.docxJAVA - Design a data structure IntSet that can hold a set of integers-.docx
JAVA - Design a data structure IntSet that can hold a set of integers-.docxolsenlinnea427
 
OrderTest.javapublic class OrderTest {       Get an arra.pdf
OrderTest.javapublic class OrderTest {         Get an arra.pdfOrderTest.javapublic class OrderTest {         Get an arra.pdf
OrderTest.javapublic class OrderTest {       Get an arra.pdfakkhan101
 
Bindings: the zen of montage
Bindings: the zen of montageBindings: the zen of montage
Bindings: the zen of montageKris Kowal
 

Semelhante a Evolutionary Problems In Aspect Oriented Software Development (20)

public class TrequeT extends AbstractListT { .pdf
  public class TrequeT extends AbstractListT {  .pdf  public class TrequeT extends AbstractListT {  .pdf
public class TrequeT extends AbstractListT { .pdf
 
662305 10
662305 10662305 10
662305 10
 
Introduction to AspectJ
Introduction to AspectJIntroduction to AspectJ
Introduction to AspectJ
 
Chapter 7 functions (c)
Chapter 7 functions (c)Chapter 7 functions (c)
Chapter 7 functions (c)
 
Ocr code
Ocr codeOcr code
Ocr code
 
45 aop-programming
45 aop-programming45 aop-programming
45 aop-programming
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scala
 
Java practical
Java practicalJava practical
Java practical
 
Java Simple Programs
Java Simple ProgramsJava Simple Programs
Java Simple Programs
 
Pnno
PnnoPnno
Pnno
 
Les nouveautés de C# 6
Les nouveautés de C# 6Les nouveautés de C# 6
Les nouveautés de C# 6
 
Lecture 12 os
Lecture 12 osLecture 12 os
Lecture 12 os
 
Machine-level Composition of Modularized Crosscutting Concerns
Machine-level Composition of Modularized Crosscutting ConcernsMachine-level Composition of Modularized Crosscutting Concerns
Machine-level Composition of Modularized Crosscutting Concerns
 
C# 6.0 - April 2014 preview
C# 6.0 - April 2014 previewC# 6.0 - April 2014 preview
C# 6.0 - April 2014 preview
 
openFrameworks 007 - 3D
openFrameworks 007 - 3DopenFrameworks 007 - 3D
openFrameworks 007 - 3D
 
JAVA - Design a data structure IntSet that can hold a set of integers-.docx
JAVA - Design a data structure IntSet that can hold a set of integers-.docxJAVA - Design a data structure IntSet that can hold a set of integers-.docx
JAVA - Design a data structure IntSet that can hold a set of integers-.docx
 
OrderTest.javapublic class OrderTest {       Get an arra.pdf
OrderTest.javapublic class OrderTest {         Get an arra.pdfOrderTest.javapublic class OrderTest {         Get an arra.pdf
OrderTest.javapublic class OrderTest {       Get an arra.pdf
 
Applets
AppletsApplets
Applets
 
Java Unit 1 Project
Java Unit 1 ProjectJava Unit 1 Project
Java Unit 1 Project
 
Bindings: the zen of montage
Bindings: the zen of montageBindings: the zen of montage
Bindings: the zen of montage
 

Mais de kim.mens

Software Maintenance and Evolution
Software Maintenance and EvolutionSoftware Maintenance and Evolution
Software Maintenance and Evolutionkim.mens
 
Context-Oriented Programming
Context-Oriented ProgrammingContext-Oriented Programming
Context-Oriented Programmingkim.mens
 
Software Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented ProgrammingSoftware Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented Programmingkim.mens
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smellskim.mens
 
Object-Oriented Design Heuristics
Object-Oriented Design HeuristicsObject-Oriented Design Heuristics
Object-Oriented Design Heuristicskim.mens
 
Software Patterns
Software PatternsSoftware Patterns
Software Patternskim.mens
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoringkim.mens
 
Domain Modelling
Domain ModellingDomain Modelling
Domain Modellingkim.mens
 
Object-Oriented Application Frameworks
Object-Oriented Application FrameworksObject-Oriented Application Frameworks
Object-Oriented Application Frameworkskim.mens
 
Towards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation FrameworkTowards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation Frameworkkim.mens
 
Towards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty ApproachesTowards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty Approacheskim.mens
 
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software EngineeringBreaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineeringkim.mens
 
Context-oriented programming
Context-oriented programmingContext-oriented programming
Context-oriented programmingkim.mens
 
Basics of reflection
Basics of reflectionBasics of reflection
Basics of reflectionkim.mens
 
Advanced Reflection in Java
Advanced Reflection in JavaAdvanced Reflection in Java
Advanced Reflection in Javakim.mens
 
Basics of reflection in java
Basics of reflection in javaBasics of reflection in java
Basics of reflection in javakim.mens
 
Reflection in Ruby
Reflection in RubyReflection in Ruby
Reflection in Rubykim.mens
 
Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Rubykim.mens
 
Introduction to Smalltalk
Introduction to SmalltalkIntroduction to Smalltalk
Introduction to Smalltalkkim.mens
 
A gentle introduction to reflection
A gentle introduction to reflectionA gentle introduction to reflection
A gentle introduction to reflectionkim.mens
 

Mais de kim.mens (20)

Software Maintenance and Evolution
Software Maintenance and EvolutionSoftware Maintenance and Evolution
Software Maintenance and Evolution
 
Context-Oriented Programming
Context-Oriented ProgrammingContext-Oriented Programming
Context-Oriented Programming
 
Software Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented ProgrammingSoftware Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented Programming
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smells
 
Object-Oriented Design Heuristics
Object-Oriented Design HeuristicsObject-Oriented Design Heuristics
Object-Oriented Design Heuristics
 
Software Patterns
Software PatternsSoftware Patterns
Software Patterns
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Domain Modelling
Domain ModellingDomain Modelling
Domain Modelling
 
Object-Oriented Application Frameworks
Object-Oriented Application FrameworksObject-Oriented Application Frameworks
Object-Oriented Application Frameworks
 
Towards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation FrameworkTowards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation Framework
 
Towards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty ApproachesTowards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty Approaches
 
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software EngineeringBreaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineering
 
Context-oriented programming
Context-oriented programmingContext-oriented programming
Context-oriented programming
 
Basics of reflection
Basics of reflectionBasics of reflection
Basics of reflection
 
Advanced Reflection in Java
Advanced Reflection in JavaAdvanced Reflection in Java
Advanced Reflection in Java
 
Basics of reflection in java
Basics of reflection in javaBasics of reflection in java
Basics of reflection in java
 
Reflection in Ruby
Reflection in RubyReflection in Ruby
Reflection in Ruby
 
Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Ruby
 
Introduction to Smalltalk
Introduction to SmalltalkIntroduction to Smalltalk
Introduction to Smalltalk
 
A gentle introduction to reflection
A gentle introduction to reflectionA gentle introduction to reflection
A gentle introduction to reflection
 

Último

Asymmetry in the atmosphere of the ultra-hot Jupiter WASP-76 b
Asymmetry in the atmosphere of the ultra-hot Jupiter WASP-76 bAsymmetry in the atmosphere of the ultra-hot Jupiter WASP-76 b
Asymmetry in the atmosphere of the ultra-hot Jupiter WASP-76 bSérgio Sacani
 
Formation of low mass protostars and their circumstellar disks
Formation of low mass protostars and their circumstellar disksFormation of low mass protostars and their circumstellar disks
Formation of low mass protostars and their circumstellar disksSérgio Sacani
 
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdfPests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdfPirithiRaju
 
Proteomics: types, protein profiling steps etc.
Proteomics: types, protein profiling steps etc.Proteomics: types, protein profiling steps etc.
Proteomics: types, protein profiling steps etc.Silpa
 
American Type Culture Collection (ATCC).pptx
American Type Culture Collection (ATCC).pptxAmerican Type Culture Collection (ATCC).pptx
American Type Culture Collection (ATCC).pptxabhishekdhamu51
 
Kochi ❤CALL GIRL 84099*07087 ❤CALL GIRLS IN Kochi ESCORT SERVICE❤CALL GIRL
Kochi ❤CALL GIRL 84099*07087 ❤CALL GIRLS IN Kochi ESCORT SERVICE❤CALL GIRLKochi ❤CALL GIRL 84099*07087 ❤CALL GIRLS IN Kochi ESCORT SERVICE❤CALL GIRL
Kochi ❤CALL GIRL 84099*07087 ❤CALL GIRLS IN Kochi ESCORT SERVICE❤CALL GIRLkantirani197
 
Vip profile Call Girls In Lonavala 9748763073 For Genuine Sex Service At Just...
Vip profile Call Girls In Lonavala 9748763073 For Genuine Sex Service At Just...Vip profile Call Girls In Lonavala 9748763073 For Genuine Sex Service At Just...
Vip profile Call Girls In Lonavala 9748763073 For Genuine Sex Service At Just...Monika Rani
 
High Profile 🔝 8250077686 📞 Call Girls Service in GTB Nagar🍑
High Profile 🔝 8250077686 📞 Call Girls Service in GTB Nagar🍑High Profile 🔝 8250077686 📞 Call Girls Service in GTB Nagar🍑
High Profile 🔝 8250077686 📞 Call Girls Service in GTB Nagar🍑Damini Dixit
 
Zoology 4th semester series (krishna).pdf
Zoology 4th semester series (krishna).pdfZoology 4th semester series (krishna).pdf
Zoology 4th semester series (krishna).pdfSumit Kumar yadav
 
9654467111 Call Girls In Raj Nagar Delhi Short 1500 Night 6000
9654467111 Call Girls In Raj Nagar Delhi Short 1500 Night 60009654467111 Call Girls In Raj Nagar Delhi Short 1500 Night 6000
9654467111 Call Girls In Raj Nagar Delhi Short 1500 Night 6000Sapana Sha
 
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune WaterworldsBiogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune WaterworldsSérgio Sacani
 
GBSN - Biochemistry (Unit 1)
GBSN - Biochemistry (Unit 1)GBSN - Biochemistry (Unit 1)
GBSN - Biochemistry (Unit 1)Areesha Ahmad
 
Justdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts Service
Justdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts ServiceJustdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts Service
Justdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts Servicemonikaservice1
 
GUIDELINES ON SIMILAR BIOLOGICS Regulatory Requirements for Marketing Authori...
GUIDELINES ON SIMILAR BIOLOGICS Regulatory Requirements for Marketing Authori...GUIDELINES ON SIMILAR BIOLOGICS Regulatory Requirements for Marketing Authori...
GUIDELINES ON SIMILAR BIOLOGICS Regulatory Requirements for Marketing Authori...Lokesh Kothari
 
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43b
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43bNightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43b
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43bSérgio Sacani
 
Call Girls Alandi Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Alandi Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Alandi Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Alandi Call Me 7737669865 Budget Friendly No Advance Bookingroncy bisnoi
 
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...ssifa0344
 
Botany 4th semester file By Sumit Kumar yadav.pdf
Botany 4th semester file By Sumit Kumar yadav.pdfBotany 4th semester file By Sumit Kumar yadav.pdf
Botany 4th semester file By Sumit Kumar yadav.pdfSumit Kumar yadav
 
Pests of cotton_Sucking_Pests_Dr.UPR.pdf
Pests of cotton_Sucking_Pests_Dr.UPR.pdfPests of cotton_Sucking_Pests_Dr.UPR.pdf
Pests of cotton_Sucking_Pests_Dr.UPR.pdfPirithiRaju
 

Último (20)

CELL -Structural and Functional unit of life.pdf
CELL -Structural and Functional unit of life.pdfCELL -Structural and Functional unit of life.pdf
CELL -Structural and Functional unit of life.pdf
 
Asymmetry in the atmosphere of the ultra-hot Jupiter WASP-76 b
Asymmetry in the atmosphere of the ultra-hot Jupiter WASP-76 bAsymmetry in the atmosphere of the ultra-hot Jupiter WASP-76 b
Asymmetry in the atmosphere of the ultra-hot Jupiter WASP-76 b
 
Formation of low mass protostars and their circumstellar disks
Formation of low mass protostars and their circumstellar disksFormation of low mass protostars and their circumstellar disks
Formation of low mass protostars and their circumstellar disks
 
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdfPests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
Pests of cotton_Borer_Pests_Binomics_Dr.UPR.pdf
 
Proteomics: types, protein profiling steps etc.
Proteomics: types, protein profiling steps etc.Proteomics: types, protein profiling steps etc.
Proteomics: types, protein profiling steps etc.
 
American Type Culture Collection (ATCC).pptx
American Type Culture Collection (ATCC).pptxAmerican Type Culture Collection (ATCC).pptx
American Type Culture Collection (ATCC).pptx
 
Kochi ❤CALL GIRL 84099*07087 ❤CALL GIRLS IN Kochi ESCORT SERVICE❤CALL GIRL
Kochi ❤CALL GIRL 84099*07087 ❤CALL GIRLS IN Kochi ESCORT SERVICE❤CALL GIRLKochi ❤CALL GIRL 84099*07087 ❤CALL GIRLS IN Kochi ESCORT SERVICE❤CALL GIRL
Kochi ❤CALL GIRL 84099*07087 ❤CALL GIRLS IN Kochi ESCORT SERVICE❤CALL GIRL
 
Vip profile Call Girls In Lonavala 9748763073 For Genuine Sex Service At Just...
Vip profile Call Girls In Lonavala 9748763073 For Genuine Sex Service At Just...Vip profile Call Girls In Lonavala 9748763073 For Genuine Sex Service At Just...
Vip profile Call Girls In Lonavala 9748763073 For Genuine Sex Service At Just...
 
High Profile 🔝 8250077686 📞 Call Girls Service in GTB Nagar🍑
High Profile 🔝 8250077686 📞 Call Girls Service in GTB Nagar🍑High Profile 🔝 8250077686 📞 Call Girls Service in GTB Nagar🍑
High Profile 🔝 8250077686 📞 Call Girls Service in GTB Nagar🍑
 
Zoology 4th semester series (krishna).pdf
Zoology 4th semester series (krishna).pdfZoology 4th semester series (krishna).pdf
Zoology 4th semester series (krishna).pdf
 
9654467111 Call Girls In Raj Nagar Delhi Short 1500 Night 6000
9654467111 Call Girls In Raj Nagar Delhi Short 1500 Night 60009654467111 Call Girls In Raj Nagar Delhi Short 1500 Night 6000
9654467111 Call Girls In Raj Nagar Delhi Short 1500 Night 6000
 
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune WaterworldsBiogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
Biogenic Sulfur Gases as Biosignatures on Temperate Sub-Neptune Waterworlds
 
GBSN - Biochemistry (Unit 1)
GBSN - Biochemistry (Unit 1)GBSN - Biochemistry (Unit 1)
GBSN - Biochemistry (Unit 1)
 
Justdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts Service
Justdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts ServiceJustdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts Service
Justdial Call Girls In Indirapuram, Ghaziabad, 8800357707 Escorts Service
 
GUIDELINES ON SIMILAR BIOLOGICS Regulatory Requirements for Marketing Authori...
GUIDELINES ON SIMILAR BIOLOGICS Regulatory Requirements for Marketing Authori...GUIDELINES ON SIMILAR BIOLOGICS Regulatory Requirements for Marketing Authori...
GUIDELINES ON SIMILAR BIOLOGICS Regulatory Requirements for Marketing Authori...
 
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43b
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43bNightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43b
Nightside clouds and disequilibrium chemistry on the hot Jupiter WASP-43b
 
Call Girls Alandi Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Alandi Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Alandi Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Alandi Call Me 7737669865 Budget Friendly No Advance Booking
 
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...
TEST BANK For Radiologic Science for Technologists, 12th Edition by Stewart C...
 
Botany 4th semester file By Sumit Kumar yadav.pdf
Botany 4th semester file By Sumit Kumar yadav.pdfBotany 4th semester file By Sumit Kumar yadav.pdf
Botany 4th semester file By Sumit Kumar yadav.pdf
 
Pests of cotton_Sucking_Pests_Dr.UPR.pdf
Pests of cotton_Sucking_Pests_Dr.UPR.pdfPests of cotton_Sucking_Pests_Dr.UPR.pdf
Pests of cotton_Sucking_Pests_Dr.UPR.pdf
 

Evolutionary Problems In Aspect Oriented Software Development

  • 1. Evolutionary Problems in Aspect-Oriented Software Development Pr. Kim Mens Inspired by and based on: Dr. Tom Tourwé K. MENS & T. TOURWE. Evolution Issues in Aspect-Oriented Programming. Chapter in book on quot;Software Evolutionquot;, edited by T. Mens & S. Demeyer, pp. 197–224. In press. Springer, 2008. 1
  • 2. Goal Identify some “evolution issues” in AOSD  – challenges that adopters of AO technology may face – research problems remaining to be explored Three main categories:  – aspect exploration : discovering potential aspects – aspect extraction : migrating to AO solution – aspect evolution : maintaining and evolution of AO system Aspect Evolution BASE system Aspect Aspect LEGACY system LEGACY system Exploration Extraction Aspect Aspect Aspect 2 2
  • 3. The AOP Idea aspect 3 aspect 1 aspect 2 Aspect Weaver core application functionality woven output code 3 3
  • 4. class Point extends Shape { public void setX(int x) throws IllegalArgumentException { if ( x < MIN_X || x > MAX_X ) throw new IllegalArgumentException(quot;x is out of bounds.quot;); ... Tangled } with base public void setY(int y) throws IllegalArgumentException { if ( y < MIN_Y || y > MAX_Y ) code throw new IllegalArgumentException(quot;y is out of bounds.quot;); ... } } class FigureElement extends Shape { public void setXY(int, int) throws IllegalArgumentException { if ( x < MIN_X || x > MAX_X ) Scattered throw new IllegalArgumentException(quot;x is out of bounds.quot;); if ( y < MIN_Y || y > MAX_Y ) concern throw new IllegalArgumentException(quot;y is out of bounds.quot;); ... } } 4 4
  • 5. aspect PointBoundsChecking { Aspect pointcut setX(int x): (execution(void FigureElement.setXY(int, int)) && args(x, *)) || (execution(void Point.setX(int)) && args(x)); before(int x): setX(x) { if ( x < MIN_X || x > MAX_X ) class Point extends Shape { throw new IllegalArgumentException(quot;x is out of bounds.quot;); } public void setX(int x) { ... pointcut setY(int y): } (execution(void FigureElement.setXY(int, int)) && args(*, y)) public void setY(int y) { || (execution(void Point.setY(int)) && args(y)); ... } before(int y): setY(y) { } if ( y < MIN_Y || y > MAX_Y ) throw new IllegalArgumentException(quot;y is out of bounds.quot;); class FigureElement extends Shape { } } public void setXY(int, int) { ... Base code } } 5 5
  • 6. Intensional pointcut definition aspect PointBoundsChecking { pointcut setX(int x): (execution(void FigureElement.setXY(int, int)) && args(x, *)) || (execution(void Point.setX(int)) && args(x)); pointcut setX(int x): ... (execution(* Shape+.setXY(int, int)) && args(x, *)) || (execution(* Shape+.setX(int)) && args(x)); pointcut setY(int y): (execution(void FigureElement.setXY(int, int)) && args(*, y)) || (execution(void Point.setY(int)) && args(y)); pointcut setY(int y): ... (execution(* Shape+.setXY(int, int)) && args(*, y)) || (execution(* Shape+.setY(int)) && args(y)); } 6 6
  • 7. Aspect Exploration Problem: how to discover potential aspect  candidates in a (legacy) system Issues:  – how are crosscutting concerns implemented? • taxonomy of sorts needed – what crosscutting concerns can be discovered? • can only trivial concerns be detected – how do crosscutting concerns affect software quality? • assess the need for extracting them into aspects – how to find the crosscutting concerns in the code? • precision / recall / coverage 7 7
  • 8. Aspect Mining Techniques method fragments AST-based Clone Detection PDG-based Clone Clone Detection Detection Token-based Clone Detection Structural / Token- Method Behavioral Based Clustering Identifier Analysis Language Clustering method-level Clues Unique Methods Fan-in Concept Analysis Analysis Call Clustering Execution Patterns Static Dynamic Analysis 8 Dynamic 8
  • 9. Mining for Crosscutting Concerns Problem: how to discover crosscutting concerns  automatically? Observed problems:  – Poor precision – Refactorability – Poor recall – Empiricial validation – Composability – Incomplete coverage – Subjectivity – Variability – Scaleability – Impact on quality – User-involvement – Relevance – Difficulty to compare results 9 9
  • 10. Aspect Extraction Problem: how to extract discovered aspect  candidates into real aspects? Issues:  – how to separate crosscutting concerns from base code? • depends on how tangled the code is – how to determine appropriate joinpoints for the aspects? • aspect languages impose limitations on kinds of joinpoints – how to determine appropriate pointcuts for the aspects? • prefer intensional pointcuts over extensional ones – how to determine appropriate advice code? • modifications required due to changing context, and due to small variations in the scattered code 10 10
  • 11. enclosing method, an after-advice is used instead and describe 7 extraction transformations with the particular pointcuts they before-advice. ample, they define an Extract Before Call transformation, depicted in Figure The second refactoring deals with the following c Refactoringcode that callThehoccursoccurstowithin the execution call.method asp Crosscuttingmoved method of before/aft Concerns f. a block of always before a particular In the cut p intercepts the to that call/block be is always into Aspects reintroduces the call to g at the proper execution point. another call. Kim Mens and Tom Tourw´ e class A { f int x = 0; void f(C c) { class A { x++; int x = 0; α (CB) this.g(); ω() this .g(); void f(C c) { c.h(); x++; if (x > 0) f c.h(); g x = 0; } if (x > 0) } x = 0; } } aspect B { aspect B { pointcut p(A a): pointcut p(A a): f execution(void A.f(C)) && execution(void A.f(C)) && g aspect this(a) && call(void C.h()); this(a) && call(void C.h()); before(A a): p(a) { { a.g();} } before(A a): p(a) a.g(); } } Figure 6. Callan Applying Before. Fig. 9.6: Making code aspect friendly Making code Fig. 9.7: The Extract Before Call transformation “extract before call” aspect-friendly Figure 6 shows the code transformation produced refactoring Another alternative is to restructure the code before extracting the crosscutting concern e, to make it fit the joinpoint model offered by the AOP language. This is the approach aspect B, the pointcut p intercepts 11 Before. In the the en by both Binkley et al [458] and Monteiro and Fernandes [455], who suggest to apply h that occurs within the execution of method f. 11 A itional refactorings first in order to make the codeAlthough not explained explicitly in the paper, it is clear that applying more “aspect friendly”. For example,
  • 12. Aspect Evolution Problem: how to manage the evolution of an  aspect-oriented problem? Issues:  – how to assess the impact on the aspects when the base system evolves? • base system is oblivious of the aspects – how to manage evolution of the aspects themselves? • to make the more abstract, more reusable, less brittle, ... – how to deal with interacting and conflicting aspects? • two aspects can work well independently but cause problems when combined Aspect evolution paradox  12 12
  • 13. Fragile Pointcut Problem */ */ public class FileDownload { public class FileDownload { public static import java.io.*; public static import java.io.*; import java.util.zip.*; void download(String address, void download(String address, import java.util.zip.*; String localFileName) { /** String localFileName) { /** * Command line program to copy a file to * Command line program to copy a file to another directory. OutputStream another directory. * @author Marco Schmidt OutputStream out * @author Marco Schmidt */ out = null; = null; */ public class CopyFile { public class CopyFile { // constant values for // constant values for the override option URLConnection URLConnection the override option public static final conn = null; public static final int int OVERWRITE_ALWAYS = 1; conn = null; OVERWRITE_ALWAYS = 1; public static final public static final int int OVERWRITE_NEVER = 2; InputStream OVERWRITE_NEVER = 2; public static final InputStream in public static Long createChecksum(File file) public static final int int OVERWRITE_ASK = 3; public static Long createChecksum(File throws IOException { = null; OVERWRITE_ASK = 3; file) throws IOException { long millis = // program options long millis = System.currentTimeMillis(); // program options initialized to default values System.currentTimeMillis(); InputStream in = new initialized to default values private static int InputStream in = FileInputStream(file); */ private static int bufferSize = 4 * 1024; new FileInputStream(file); bufferSize = 4 * 1024; */ private static boolean public class HappyNewYear byte[] buffer = new private static boolean clock = true; byte[] buffer = public class HappyNewYear byte[bufferSize]; implements Runnable clock = true; private static boolean new byte[bufferSize]; private static boolean implements Runnable copyOriginalTimestamp = true; { copyOriginalTimestamp = true; private static boolean { private static boolean verify = true; verify = true; private static int private static NumberFormat private static int override = OVERWRITE_ASK; private static NumberFormat formatter = override = OVERWRITE_ASK; formatter = public static Long public static Long copyFile(File srcFile, File destFile) NumberFormat.getInstance(); copyFile(File srcFile, File destFile) throws IOException { throws IOException { private JFrame frame; InputStream in = new InputStream in = new FileInputStream(srcFile); FileInputStream(srcFile); private JLabel label; OutputStream out = new OutputStream out = new FileOutputStream(destFile); */ FileOutputStream(destFile); private long newYearMillis; long millis = public class FileDownload { long millis = System.currentTimeMillis(); public static System.currentTimeMillis(); private String message; CRC32 checksum = null; void download(String address, CRC32 checksum = null; String localFileName) { if (verify) { if (verify) { public HappyNewYear(JFrame OutputStream checksum = new CRC32(); checksum = new frame, JLabel label) CRC32(); out = null; checksum.reset(); } { checksum.reset(); URLConnection byte[] buffer = new conn = null; byte[bufferSize]; } // store argument GUI byte[] buffer = new InputStream byte[bufferSize]; elements int bytesRead; while ((bytesRead = this.frame = frame; in.read(buffer)) >= 0) { if (verify) { evolution Pointcuts in program Pointcuts in evolved program tal den miss i acc int po join ded e ten aptur n uni int c po join Class Class Name Class Name Class Class Attributes Name Attributes Name Name Attributes Attributes Attributes Attributes Attributes 1 Operations Attributes Operations Attributes 1 * Attributes Class Class 1 Operations Operations Operations Operations * 1 1 Operations Name Name Operations Operations * Operations * Attributes Attributes * Class Class Attributes Attributes Name Name Operations Operations Class Attributes Attributes Operations Operations Name Attributes Attributes Attributes Operations Operations Class Class Attributes Operations Operations Name Name Operations Attributes Attributes Operations Attributes Attributes Operations Source program Evolved Source program Operations Operations Operations 13 13
  • 14. Conclusion AO is a very interesting area for software  evolution researchers to explore – not only AOP but AOSD in general (e.g. “early aspects”) – many open evolution problems and issues to explore – in order to achieve widespread adoption of AOSD – some problems can reuse existing evolution research – other problems require dedicated solutions – it’s not too late to jump on the train... 14 14