Skip to main content

Software evolution and 'light' semantics

22 May 1999

New Image

The motivation for Inscape came from my experience as a programmer, designer and architect. There were two major (and inter-related) problems that I encountered while building software systems where I had to use components built by other people: the pieces often did not fit when I put them together and changing code often produced surprising and unexpected results. The first problem was due primarily to the informality and often incompleteness of component interfaces. The second problem was due ultimately to the complexity of the software and an inability to foresee or determine the consequences of changes. These problems result from three essential and intertwined properties of building software systems: composition, evolution and complexity. In coming to grips with the problem of composition, using formal interface specifications is the obvious choice. Enhancing the syntactic interfaces with semantic information is one way of expressing the intent of the interface provider and enabling the user to have all the information necessary to its correct and effective use. How to attack the problem of evolution is not as obvious. The approach I took in the Inscape experiment was to use the specifications constructively in order to determine and maintain semantic dependencies. Keeping track semantically as to how the interfaces are used is the analog of expressing the interface creator's intent: it is capturing the users intent. Given that both interfaces and implementations evolve, keeping track of the dependencies enables the environment to help in understanding the effects of changes and where those effects take place.