Component-based software development is revolutionizing the software industry by promoting a view of software development in which applications are composed out of reusable, relatively large-grained, and mostly pre-existing components. Adoption of component-based software development leads to an important distinction in roles between those that develop and make available individual components and those that compose applications out of available components. As a result, application composition is no longer a matter of writing and combining source code, but instead of composing deployable components-components that are pre-packaged, independently distributed, easily installed and uninstalled, and self-descriptive.
A need arises for specialized environments that explicitly support the composition of an application out of deployable components. Such composition environments are starting to emerge, but an overall understanding of their nature and functionality is currently lacking.
This survey presents a comprehensive analysis of ongoing efforts in developing composition environments. Specifically, we contribute a classification of concrete features that a composition environment must exhibit and discuss the current state of the art in composition environments. Our purpose in doing so is threefold. First, we wish to establish a terminology and understanding of composition environments. Second, we wish to compare and contrast representative composition environments from a multi-disciplinary perspective that extends beyond software engineering into programming languages, visual programming environments, and component frameworks. Third, we wish to identify promising research directions that we believe will lead to the maturation, adoption, and widespread use of composition environments.