From that early work we have explored Software Reuse as a means to improve programmers productivity. This has covered a number of areas, from improving requirements gathering and domain analysis, to examining various forms of tool support for reuse, from improving code repositories to making the simple cut-and-paste operation more directly useful.
I have also worked on tools to aid the programmer. My interest here has taken several forms, but all have been to support my primary research goal. As mentioned above, Robert Biddle and I have looked at tools for supporting various aspects of reuse. Related to this, I have built several tools for analysing code to try help the programmer understand code, either with the view to reusing it, or to evaluate how reusable it is.
Generally, I believe we should be able to do better than the current set of tools a programmer typically has available. This belief is based on the observation that even the current ``integrate development environments'' (IDE) provide little more than what was available 20 years ago: an editor, a compiler, and something to put it together (e.g., `make'). Editors are better, for example providing colour-coding to make it easier to read code (a significant advance in my opinion), and the integration of these tools allows certain operations to be done more efficiently (e.g., a 1-click compile and build). But these are just small variations on existing tools. There are no other commonly used tools. Further, the other main category of tools for programmers, CASE tools, have never lived up to their promise, and even today usually seem to require more effort than its worth to use.
The technique currently in vogue for requirements gathering is ``use cases''. My interest is in how to go from a use case model to an object-oriented design. Current wisdom provides little advice on this step. References are made to ``domain models'', ``object-oriented analysis'', and similar things, but observing people using such techniques or just trying to make the leap to the beginnings of an object-oriented design I am convinced that more specific techniques can be developed. The approach I am investigating (with Robert Biddle and James Noble) is to regularise the definition of ``use case'', and then use this to drive the object-oriented design process.
I do have other research interests that I pursue on occasion.