Research Projects: Implicit Context

My primary research concerns the use of dynamic context in easing problems of software evolution and reuse through a combination of dynamic execution information and system structural information.

Implicit context is a model for the transformation of localized world views. IConJ is a language and preprocessor for the application of implicit context transformations to Java source code. Essential structure is a principle guiding the application of implicit context transformations. Essential structure is to implicit context as policy is to mechanism.

This research is currently taking three different paths:

In addition, there are some more general references about implicit context available.

General

The ideas involved in implicit context were developed as my PhD thesis. My supervisor, Gail Murphy, helped me to focus and direct these ideas. We maintain our collaboration on this topic. My other thesis committee members were Kelly Booth, Mike Feeley and Alan Mackworth.

Essential Structure

Essential structure is the idea that one can "boil down" a module to its essence, that most modules contain a lot of details that are there strictly for the sake of the global system view and not for the sake of local needs. These extra details are termed extraneous embedded knowledge or EEK (an acronym that was purely serendipitous but that amused me). My PhD thesis is the most thorough accounting of essential structure at the moment.

Communication History

Communication history is, conceptually, a record of every communication (method call, procedure call, field access, etc.) that has occurred within an execution "so far". This record can be queried from within the execution to determine properties about the system and to retrieve information that has previously been communicated.

One can use communication history queries to reduce the overall knowledge of the system that must be embedded within individual modules. In the absence of communication history, one must sometimes implement a given module to store data or provide an interface that is of no importance from a purely local perspective. An example would be the Observer design pattern: modules acting as Subjects must provide the appropriate interface. However, there is no locally recognizable purpose in such a module providing this interface: the need for it arises only at a more global level. By making the appropriate communication history queries, we can effect the same behaviour as defined in an object-oriented Observer design pattern without embedding the knowledge of its use in every module. Modules acting as Subjects are then not so tightly coupled to the continued use of the Observer pattern.

The idea of using communication history is similar to the principle of "structure-shy" programming found in Lieberherr and colleague's Demeter project. There, behaviour is defined relative to static structural patterns; here, we define behaviour relative to dynamic patterns sought in the execution.

My PhD thesis describes these ideas in more detail.

The current project involves the development of an efficient means to support communication history queries. My MSc student Kevin Viggers is currently implementing such a means.

External Dependence Analysis

I am not willing to say too much about this project at the moment. Basically, it deals with determining what external modules and interfaces a given module is dependent upon. However, this analysis proceeds in an unusual and important way.