Programming Research Group - University of Amsterdam - TR P9801 Evolutionary Software Engineering: A Component-based Approach Paul Klint Chris Verhoef 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: o software systems are unavoidably heterogeneous and distributed; o development and implementation techniques may be different for various parts of a system; o the parts may be in different phases of their life-cycle; o the parts -- implemented as components in different languages -- should be coordinated and exchange information in a standardized fashion; o 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. Keywords and phrases: Evolutionary development, software components, coordination architectures, heterogeneous systems, integrating forward engineering and system renovation, case studies.