Software typically consists of many, interconnected parts.  These connections, when chosen well, are key to the software working well but they are also a source of trouble when the software has to be changed, as a change can force further changes to propagate across the connections.  Understanding the connections (the dependencies) within a software system is an important step in modifying software—and it can be surprisingly difficult to accomplish.

The work in LSMR has contributed both to deepening our understanding of the difficulties encountered in practice, as well as support the analysis in a number of situations: pragmatic reuse tasks; migrating applications to new API versions; polylingual software systems; and estimating change impact (technical risk estimation).


Understanding dependency analysis

Pragmatic software reuse (via the Gilligan and Skipper tools)

Migrating applications to new API versions

Polylingual software systems (via the DSketch tool)

Dependency analysis in the presence of dangling references (via the Trident tool)

Awareness of changes to depended upon APIs.

Estimating change impact (via the TRE tool)