Aspect Refactoring Tools
1st February 2007 to 31st October 2010
Software systems are rarely written from scratch: they evolve over long periods of time. When a change is made, this often
affects many different locations in a system, and it is hard to make a change consistently. For that reason, automated tools
to help the process of software change are desirable. "Refactoring" refers to the process of restructuring an existing piece
of software, often prior to introducing new functionality, or to take advantage of a new technology. Refactoring must preserve
the behaviour of existing code;,and tools that help in refactoring both assist in the restructuring process and in checking
that the behaviour has not changed. Unfortunately today's refactoring tools are very hard to construct, they are still quite
limited in functionality, and they often contain bugs. This project aims to construct a framework for better refactoring tools.
In particular, the work is driven by refactorings for a new set of language features, called `aspect-oriented programming'
that have recently been added to Java. Our framework will be based on developments in three separate areas of computer science:
* `strategies' to control the process of rewriting program code, from the `term rewriting' community * `reference attribute
grammars' to specify the conditions that guarantee behaviour is preserved, from the `compilers' community * `incremental evaluation'
of declarative rules, from the `functional and logic programming' community The quality of our framework will be assessed
by coding selected case studies using alternative methods. In particular, we shall implement several refactorings directly
in Eclipse, the leading development environment for writing aspect-oriented programs in industry.