Tech Report CS-95-31
Configuration Management in Terms of Logical Structures
When designing software, programmers usually think in terms of modules that are represented as functions and classes. But with existing configuration management systems, programmers have to deal with versions and configurations that are organized by files and directories. This is inconvenient and error-prone, since there is a gap between handling source code and managing configurations.
In this thesis we present a framework for programming environments that handles configuration management directly in terms of functions and classes in the source code. We define the operations required for this purpose, study their semantics, and find a general strategy to support them. We show that our framework can handle a large module as a single unit, and argue that this ability can simplify configuration management issues in software reuse, cooperative programming, and software maintenance. We also present a formal model developed to serve as the foundation of our framework and a prototype environment used to verify our ideas.
Our framework is centered around a set of objects. Each of those objects represents a function or a class in the source code and contains all the necessary data and operations to build object code and control versions of the function or class it is representing. Dependencies among functions and classes are described by links between objects, and high-level configuration management tasks are carried out by invoking the operations of individual objects. In contrast, most existing configuration management systems describe the relations between software components with separate scripts and carry out their functions with a set of tools that sit on top of a passive database or file system.