Tools and Techniques for Decomposing and Composing Software

Tools and Techniques for Decomposing and Composing Software is a project funded by the Swiss National Science Foundation (SNSF project # 2000-067855.02).

Funding: 259'212.— SFr.
Period: Oct 1, 2002 — Sept. 30, 2004


Despite advances in programming languages, software development environments, documentation standards, and software processes, software continues to be hard to develop, hard to understand, and hard to maintain. In particular, no matter how much effort is put into developing clean, modern, software systems, it seems that successful software inevitably drifts towards increasingly complex and hard-to-maintain legacy systems.

This project proposes to develop new tools and techniques for decomposing software systems, that is, for breaking down and understanding complex software, and for composing software systems, that is, structuring software so that it becomes easier to maintain, reconfigure, and extend.

The proposed work builds on our previous work on the Moose analysis platform and the Piccola composition language.

For more information, please consult the Research Plan of the project [pdf].

Intermediate Report

The intermediate report covers the period from Oct. 1, 2002 through Sept. 30, 2003.

The key results in the first year include (1) techniques for extracting behavioural dependencies in legacy software using Concept Analysis, and for visualizing and understanding run-time structures, and (2) the development of innovative programming language features for building object-oriented software from fine-grained units of reuse (traits), for specifying extensions to existing software bases in a local context (classboxes), and specifying applications as compositions of components (Piccola).

Final Report

The final report covers the period from Oct. 1, 2003 through Sept. 30, 2004.

The key results of the second year of this project include (1) empirical studies in applying Concept Analysis to the detection of implicit contracts in complex software systems, (2) first results in the development of a compositional approach to testing that explicitly links methods to their tests, (3) a semantic approach to reasoning about software composition, (4) development of a methodological approach to refactoring object-oriented class hierarchies in terms of traits, and (5) investigations into new applications of classboxes for managing the scope of change.