Using Software Components

The main advantage of component-based system development is the reuse of components when building applications. Instead of developing a new system ab initio, components already existing are assembled to give the required result. Systems are being increasingly constructed using off-the-shelf software components but this is not a straightforward procedure. To incorporate a component in a system successfully, a procedure of selection, composition and integration, and finally, test and verification must be followed. One of the basic difficulties is to obtain predictability: Can we predict the behavior of a component in a system environment by simply knowing the behavior of the component itself and the rules of composition? This part discusses the procedures involved in the use of software components: component evaluation, component assembly and integration and testing of component-based systems.

In chapter 8 Dispelling the Myth of Component Evaluation, Kurt Wallnau and Judith Stafford argue against strongly entrenched misconceptions about component evaluation. Where commercial off-the-shelf (COTS) components are to be used, there will probably be several competing components from which to choose, and so, naturally, a component selection decision is required. This has led to a pernicious myth in software engineering literature and in practice: that component selection implies the necessity of a formal process for component evaluation. A consequence of this myth is the emergence of numerous component evaluation techniques that have little connection with, or relevance to current component-based design process. The authors demonstrate that while components must be selected, it is assemblies of components which must be evaluated. Component selection is thus only one part of a design procedure, the objective of which is to select sets of components that work together as required in an assembly.

In chapter 9 Component Composition and Integration, Judith Stafford and Kurt Wallanu describe the process of component composition and integration. While software system composition and component integration may be viewed as synonyms, they distinguish the two terms in order to elevate the process of composition, which not only involves integration, or "wiring" components together to create an assembly, but also the unification of the assembly into a composed system. Failures associated with integration led to the development of component standards and frameworks (e.g. EJB and CORBA) to support integration through the imposition of constraints on component form and interaction mechanisms. However many difficulties can encounter when building assemblies that result from mismatch assumptions that lie deeper than the information available in syntactic component interfaces. The chapter describes the use of analysis to identify and rectify potential problems. Similar analysis techniques can also be used to assess the properties of assemblies so that the assemblies can, themselves, be used as components. The chapter concludes with a presentation of possible solution in which systems are composed from well-understood pre-existing components in such a way that the composed system does what it is supposed to, correctly, and as specified by the system commissioners.

In the last chapter 10 Predicting System Trustworthiness from Software Component Trustworthiness, Jeff Voas discusses the problem of system reliability and other non-functional characteristics when using components. Even if trustworthy components are integrated, the resulting system itself need not be trustworthy. As shown in chapter 8 it is not sufficient to evaluate just the component but instead the assembly or system must be evaluated. This chapter stresses the same point by describing how components must be tested in the system environment to ensure system reliability. The author proposes the use of "Interface Propagation Analysis" (IPA), which propagates the corrupted states through the interfaces which connect COTS software components with other types of components. Inverted operational profile testing, in conjunction with IPA, is an effective means of increasing the a priori knowledge of the reliability of a system.