Configuration families are the means of keeping track of structural and historical relationships between the components of a system as they evolve over time. Thus they form a kernel of a configuration management system. In this paper, we study configuration families within a formal semantic framework for modules and their interconnection operations. Our goal is to formulate and prove formally fundamental ideas in this area to serve as a guide to the design of methodologies and tools for software engineering.
The module concept we use is based on abstract data types and algebraic specifications and includes a set of fundamental operations on interface and module specifications for horizontal structuring, vertical development steps, which refine abstract specifications into more concrete ones, and realization of interface specifications by module specifications. In the paper we study the construction and evolution of module families, i.e., collections of conceptually related modules, usually revisions and variants, which have developed over time. We show how horizontal structuring operations can be applied to entire module families to produce configuration families, and explain how vertical refinement steps of underlying modules induce refinements of configurations. The construction of modules, module families, and configuration families is illustrated by a simple desk calculator.