|
|
Software needs to undergo changes all the time, for many reasons. Typical causes for change include requests for added, changed, and removed functionality, and the deployment of previously developed software in new and unanticipated contexts. There are many reasons why making changes is difficult. To name just a few of them:
Modifications may not ``fit'' with an application's design
because they were not anticipated by the developers.
The extension mechanisms offered by object-oriented languages
often require up-front knowledge of the extensions that will be
made in the future, and allowing multiple extensions in
different ``dimensions'' poses well-known problems.
Changing unfamiliar software is hard, because code is hard to
understand, and tends to get harder to understand as more changes
are made.
Multi-Dimensional Separation of Concerns.
Many different kinds of concerns occur in software systems, and it is
important to be able to keep them separate. Traditional languages and
modularization mechanisms suffer from a limitation we call the
tyranny of the dominant decomposition: the program can be
modularized in only one way at a time, and the many kinds of concerns
that do not align with that modularization end up scattered across
many modules and tangled with one another. Multi-dimensional
separation of concerns is aimed at breaking the tyranny, allowing
separation of all kinds of concerns of importance simultaneously,
including overlapping, interacting and crosscutting concerns. Our
approach to achieving this is called Hyperspaces, and we have
an implementation for Java(tm) called Hyper/J(tm).
XML Transformation: Matching
and Reconciliation.
Interacting applications must exchange or share data, often XML (eXtensible Markup Language)
files, call one another's interfaces, or exchange messages.
Especially when these requirements are not anticipated,
such applications are developed with different views of the data, interfaces, and messages involved.
Our research on matching and reconciliation is aimed at providing support for matching up
corresponding elements of different data definitions or interfaces and reconciling differences
between them, allowing them to be shared, exchanged, or integrated.
The XML Transformation project provides semi-automatic support for matching
and
reconciliation of XML Schemas. This enables integration and translation
between
instances of multiple Schemas with shared content.
Extraction of Library-Based Object-Oriented Applications.
The goal of the recently concluded Jax project was to reduce
the size of Java applications using whole-program analysis and size-reducing
program transformations. We experimented with various algorithms for detecting
unreached methods, and with transformations such as name compression and
class merging. We successfully applied Jax to real-life Java
applications of up to 2300 classes, and measured size reductions of up to
90% (on average about 50%), where the larger size reductions generally
occur for large, library-based applications. Recent work has focused on
the design issues that arise when extracting software components other than
traditional applications (e.g., extensible class libraries), and on scalable
call graph construction algorithms. Plans for future work include the
application of whole-program analysis and whole-program transformations
to the areas of software maintenance and refactoring.