Contents
Introduction
Pointcut fragility is a well-documented problem in Aspect-Oriented Programming; changes to the base-code can lead to join points incorrectly falling in or out of the scope of pointcuts. In this project, we use an automated approach that limits fragility problems by providing mechanical assistance in pointcut maintenance. The approach is based on harnessing arbitrarily deep structural commonalities between program elements corresponding to join points selected by a pointcut. The extracted patterns are then applied to later versions to offer suggestions of new join points that may require inclusion. To illustrate that the motivation behind our proposal is well-founded, we first empirically establish that join points captured by a single pointcut typically portray a significant amount of unique structural commonality by analyzing patterns extracted from 23 AspectJ programs. Then, we demonstrate the usefulness of our technique by rejuvenating pointcuts in multiple versions of 3 of these programs. The results show that our parameterized heuristic algorithm was able to automatically infer new join points in subsequent versions with an average recall of 0.93. Moreover, these join points appeared, on average, in the top 4th percentile of the suggestions, indicating that the results were precise.
Researchers
Name | Affiliation |
---|---|
Raffi Khatchadourian | City University of New York (CUNY) Hunter College |
Phil Greenwood | Relative Insight |
Awais Rashid | Universit of Bristol |
Guoqing Xu | UCLA |
Publications
My and my research students‘ names are boldfaced, undergraduate students are italicized, and female students are underlined:
Raffi Khatchadourian, Phil Greenwood, Awais Rashid, and Guoqing Xu. Pointcut rejuvenation: Recovering pointcut expressions in evolving aspect-oriented software. IEEE Transactions on Software Engineering, 38(3):642–657, May 2012. [ bib | DOI | http ]
Raffi Khatchadourian, Phil Greenwood, Awais Rashid, and Guoqing Xu. Pointcut rejuvenation: Recovering pointcut expressions in evolving aspect-oriented software. In International Conference on Automated Software Engineering, ASE ’09, pages 575–579, Washington, DC, USA, November 2009. IEEE/ACM. (71/222; 32% acceptance rate). [ bib | DOI | slides | http ]
Raffi Khatchadourian and Awais Rashid. Rejuvenate pointcut: A tool for pointcut expression recovery in evolving aspect-oriented software. In International Working Conference on Source Code Analysis and Manipulation, SCAM ’08, pages 261–262. IEEE, September 2008. [ bib | DOI | tool | slides | http ]
Raffi Khatchadourian, Phil Greenwood, Awais Rashid, and Guoqing Xu. Pointcut rejuvenation: Recovering pointcut expressions in evolving aspect-oriented software. Technical Report COMP-001-2008, Lancaster University, Lancaster, UK, August 2008. Revised March 2009, May 2009. [ bib | http ]
Research Prototype
Our research prototype may be found on GitHub.
Study Data
Subject Descriptions
Subject | Versions | Description |
---|---|---|
Jakarta Cactus | 6 | A simple test framework for unit testing server-side java code. |
Contract4J | 5 | A tool that supports Design by Contract (DbC) programming in Java 5. |
AJHotDraw | 1 | An aspect-oriented refactoring of JHotDraw, a relatively large and well-designed open source Java framework for technical and structured 2D graphics. |
Ants | 1 | An AspectJ implementation of a simulator for the problem given in the 2004 ICFP Programming Contest. |
Bean | 1 | An example from the AspectJ documentation which shows how to turn a class into a JavaBean. |
DCM | 1 | A computation of the dynamic coupling metric of Hassoun et al. |
Figure | 1 | The classic figure editor example. |
Glassbox | 1 | A troubleshooting agent for Java applications that automatically diagnoses common problems. |
LawOfDemeter | 1 | A Law of Demeter (LoD) checker written in AspectJ. |
MySQL Connector/J | 1 | A native Java driver that converts JDBC calls into the network protocol used by the MySQL database. |
NullCheck | 1 | Checks for the anti-pattern of methods that return null. |
N-Version | 1 | An AspectJ library for fault tolerance (1/2). |
Quicksort | 1 | An AspectJ implementation of the classic algorithm. |
RacerAJ | 1 | An algorithm for dynamic race detection in Java and AspectJ programs. |
RecoveryCache | 1 | An AspectJ library for fault tolerance (2/2). |
Spacewar | 1 | An example AspectJ project that ships with the Eclipse AJDT. |
StarJ-Pool | 1 | A widely used AspectJ benchmark from the literature. |
Telecom | 1 | A simple telecommunications example in AspectJ. |
Tetris | 1 | An AspectJ implementation of the classic game. |
TollSystem | 1 | An AspectJ implementation of a subset of real-world toll system requirements. |
Tracing | 1 | A simple tracing example that ships with the Eclipse AJDT. |
MobileMedia (formally MobilePhoto) | 7 | A software product line for applications that manipulate photo, music, and video on mobile devices. |
HealthWatcher | 10 | A web-based application that provides various medical-related support, used in a wide variety of empirical studies. |