Synergy between component-based and generative approaches

  • Authors:
  • Stan Jarzabek;Peter Knauber

  • Affiliations:
  • National Univ. of Singapore, Singapore, Germany;Fraunhofer Institute for Experimental Software Engineering, Kaiserslautern, Germany

  • Venue:
  • ESEC/FSE-7 Proceedings of the 7th European software engineering conference held jointly with the 7th ACM SIGSOFT international symposium on Foundations of software engineering
  • Year:
  • 1999

Quantified Score

Hi-index 0.00

Visualization

Abstract

Building software systems out of pre-fabricated components is a very attractive vision. Distributed Component Platforms (DCP) and their visual development environments bring this vision closer to reality than ever. At the same time, some experiences with component libraries warn us about potential problems that arise in case of software system families or systems that evolve over many years of changes. Indeed, implementation level components, when affected by many independent changes, tend to grow in both size and number, impeding reuse. In this paper, we analyze in detail this effect and propose a program construction environment, based on generative techniques, to help in customization and evolution of component-based systems. This solution allows us to reap benefits of DCPs during runtime and, at the same time, keep components under control during system construction and evolution. In the paper, we describe such a construction environment for component-based systems that we built with a commercial generator and illustrate its features with examples from our domain engineering project. The main lesson learnt from our project is that generative techniques can extend the strengths of the component-based approach in two important ways: Firstly, generative techniques automate routine component customization and composition tasks and allow developers work more productively, at a higher abstraction level. Secondly, as custom components with required properties are generated on demand, we do not need to store and manage multiple versions of components, components do not overly grow in size, helping developers keep the complexity of an evolving system under control.