Issue No.03 - May/June (2011 vol.28)
Published by the IEEE Computer Society
Ivica Crnkovic , Mälardalen University
Judith Stafford , Tufts University
Clemens Szyperski , Microsoft
DOI Bookmark: http://doi.ieeecomputersociety.org/10.1109/MS.2011.62
In the last decade, software components have been of an increased interest in software engineering community. The appealing concepts of building systems from existing components and reusing components, as well as the appearance of new technologies that enabled the separation of component development from system development, attracted researchers and industry to develop and apply principles of component-based software engineering. Today, these concepts are understood as very important in software development, and are a standard part of software engineering approaches.
At the first software engineering (SE) conference in 1968, Doug McIlroy introduced the concept of software components during his keynote speech, "Mass-Produced Software Components." 1 That components hold such an esteemed place in SE history should come as no surprise: componentization is a fundamental engineering principle. Top-down approaches decompose large systems into smaller parts—components—and bottom-up approaches compose smaller parts—components—into larger systems. Since 1968, components have played a role in both SE research and practice. For example, components have been an immanent part of software architecture from its early days. 2 In 1998, the International Conference on Software Engineering introduced component-based software engineering (CBSE) as a specific area within SE at the first workshop on CBSE, an event that eventually evolved into a series of symposia ( http://cbse-conferences.org). In parallel, other events have addressed various CBSE-specific topics such as composability, predictability of functional and extrafunctional properties, modeling of component-based systems, reusability, deployment, software architecture and components, dynamic architecture, and middleware (see the sidebar "CBSE Terminology and Basic Concepts"). These topics have also become standard parts of many SE conferences (see the sidebar "CBSE Events"). Researchers and developers have taken notice: by March 2011, the Web of Science reported 1,546 publications containing both software and component in their titles; IEEE Xplore had 907 publications, and the ACM Digital Library had 1,254 titles. Clearly, this is a field experiencing a lot of growth.
A Shifting Paradigm
CBSE aims to build software from preexisting components, build components as reusable entities, and evolve applications by replacing components. This requires significant changes in the development paradigm, from both technical and business viewpoints. They require us to think from a top-down approach to a combination of top-down and bottom-up approaches, from analysis to predictability, from open source reuse to black-box reuse, and from selling final products to building up a market for components.
SE has witnessed significant advances in component-based development over the past two decades. Developers and researchers have created and deployed new technologies—for example, MS COM/DCOM, J2EE, the Corba Component Model, OSGi, and .NET MEF—that are widely used in many application domains, including distributed systems, office, and desktop applications. Many large software companies have built their own component-based technologies—for example, Koala and BlueAx, developed at Philips and Robert Bosch, respectively.
But in spite of its many successes, CBSE has also experienced certain drawbacks. Several promising concepts, such as component markets and automatic component search and deployment, remain realized only in small scale, and many concepts developed in the research community, such as formal component composition proofs, have only partially been established in practice.
The latest trend is component-based applications in embedded and real-time systems—for example, the Automotive Open System Architecture (Autosar). In recent years, CBSE's focus has seemingly shifted from components to services specified similarly to components through their interfaces—particularly, as just-in-time components used in dynamic application configuration to form the essential elements of service-oriented architecture, Web services, distributed systems, and cloud computing.
In This Issue
This special issue of IEEE Software highlights the wide variety of domains that utilize CBSE. It opens with a Point/Counterpoint that discusses the role of components in bridging the gap between software architecture and implementation. In the point piece, "Predictability by Construction: Meeting Programmers' and Architects' Concerns," Kurt Wallnau emphasizes a misconception in separating design from implementation. A component-based approach, with components as well-defined executable units and a predictable behavior of component assemblies, can help bridge the gap between architects and programmers. In his counterpoint, "Walking across the Seam," Philippe Kruchten states that this approach is useful, but it isn't enough and isn't essential to achieve productive communication between architects and programmers. Architect and programmer are roles and don't necessarily imply distinct individuals.
In their article "Facilitating Performance Predictions Using Software Components," Jens Happe, Heiko Koziolek, and Ralf Reussner show how CBSE concepts can help model and predict evolving systems' performance. A component-based architecture and suitable component technology first enable annotations of a component's extrafunctional properties and then enable the analysis of system performance on the basis of component properties in different system architectures.
In "Components in the Pipeline: The MeDICi Approach," Ian Gorton, Adam Wynne, Yan Liu, and Jian Yin describe a component-based framework that efficiently manages a very large amount of scientific data with respect to scalability, modifiability, and complexity. The framework, which uses the pipeline paradigm, enables a direct mapping between architectural concepts and the resulting implementation.
In "Rigorous Component-Based System Design Using the BIP Framework," Ananda Basu, Saddek Bensalem, Marius Bozga, Jacques Combaz, Mohamad Jaber, Thanh-Hung Nguyen, and Joseph Sifakis present a component-based framework for the development of embedded and real-time systems. This domain is especially challenging because it has difficult requirements for timing properties, dependability, and resource utilization. The component-based framework the authors present allows a system specification at different levels of abstraction, including software and hardware components, transformations, and model composition, while preserving correct timing properties in the implementation.
Finally, in "Managing Evolving Services," Michael P. Papazoglou, Vasilios Andrikopoulos, and Salima Benbernou discuss an important issue: service evolution. Services and components have many things in common, such as interfaces and interaction. But they also have differences, such as deployment and composition. In addition to describing types of service changes, this article gives a brief overview of component and service evolution management mechanisms.
During several decades of SE development, software components have changed their form and their purpose. Starting as elements of source code, such as routines, procedures, modules, or objects, they transformed to architectural units and ready-to-execute blocks that are dynamically plugged into the running systems. CBSE contributed to advances in software development by giving components formal specifications and identifying a clear role for them as reusable units. In parallel to CBSE, components are essential elements of other SE approaches—for example, software reuse, software product lines and model-driven development. Such widespread adoption throughout various disciplines shows that software components will remain a key aspect of SE for a long time to come.
IVICA CRNKOVIC is a professor of industrial software engineering at Mälardalen University. His research interests include component-based software engineering, software architecture, software evolution, embedded systems software, and software development environments and tools. Crnkovic has a PhD in computer science from the University of Zagreb. He coauthored the book Building Reliable Component-Based Software Systems. Contact him at firstname.lastname@example.org.
JUDITH STAFFORD is a member of the faculty of the Department of Computer Science at Tufts University. She is also visiting scientist at the Software Engineering Institute at Carnegie Mellon University. Her research interests center around component-based software engineering and software architecture, more specifically the development of compositional analysis techniques for reasoning about quality attributes of assemblies of software components. Stafford has a PhD in computer science from the University of Colorado at Boulder. She coauthored the book Documenting Software Architectures. Contact her at email@example.com.
CLEMENS SZYPERSKI is a principal software engineer at Microsoft. His recent work includes the Managed Extensibility Framework, a system enabling self-directed composition that's part of the .NET Framework 4.0. Szyperski has a PhD in computer science from ETH Zurich. He's the author of the books Component Software and Software Ecosystem. Contact him at Clemens.Szyperski@microsoft.com.