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.