A software industry producing high-quality components that can be
reused in many ways is an--unfulfilled--dream as old as the field of
``software engineering'' itself. In this paper we present an
evolutionary approach to software development based on the following
premises:
- software systems are unavoidably heterogeneous
and distributed;
- development and implementation techniques
may be different for various parts of a system;
- the parts
may be in different phases of their life-cycle;
- the
parts--implemented as components in different languages--should
be coordinated and exchange information in a standardized fashion;
- reengineering and system renovation form an integral part
of software development.
We illustrate this approach in various case studies
and indicate some lines for further research.
Evolutionary development, software components, coordination architectures,
heterogeneous systems, integrating forward engineering and system renovation,
case studies.