Tools for Software System Construction

The environment in which programs and systems are developed provides some isolated tools for constructing single programs, but support for composing systems out of components is usually lacking. Each tool uses its own vocabulary (e.g., characters and lines for text editors, language syntax for compilers, machine code for debuggers). However, uniformity can be achieved if the analytic approach to program development is replaced by a constructive approach. Taking this approach, all program construction tools use a single set of programming language constructs as their expression mechanism. This is exactly the set of constructs that programs are written in. Building large software systems is not merely a matter of programming, but also one of organization and management. A substantial amount of work goes into fitting pieces together, trying different versions and checking interfaces. The ability to separate module specification from implementation can be utilized for defining precise logical interfaces and for version maintenance. System construction tools can be built that automate most of the task of generating system versions.