Component Based Software Engineering

Component-Based Software Engineering (CBSE) focuses on the development of components in order to enable their reuse in more systems rather than only to the original one for which they have been implemented in the first place (i.e. development for reuse) and the development of new systems with reusable components (i.e. development with reuse). Some reserchers suggest that reuse can occur in many levels on granularity, which could be a few lines of code, methods, classes or whole systems. Outside systems built on a certain component-based technology, component is understood as a general term and in the literature components have been related to packages, patterns and objects.

Benefits of using components...

  • (Application Customisation) Component architecture lends itself to customisation as each component can be replaced with a different component that better meets the needs of the user.
  • (Application Customisation) Helps evolution of application as new components replace the older ones.
  • (Rapid Application Development) Component architecture facilitates rapid application development, by choosing components from a component library and snap them together to build application.

Benefits of using pattern instances as components...

  • (Practitioners) the re-users will be given a smaller search domain, than forges, that will provide application specific components.
  • (Practitioners) the components that are recorded in the database of the repository are design pattern participants and therefore, the rationale of their design is documented.
  • (Practitioners) similarly, some internal quality attributes of the extracted components, such as coupling, cohesion and complexity, are expected to be enhanced than in any other non-pattern component.
  • (Academics) the software engineering researchers can easily obtain datasets on design patterns, without having to mine vast source code forges.

Improving software quality...

  • Functionality Use of pre-existing components allows faster delivery of greater functionality.
  • Maintainability The modular structure of a component-based solution allows individual components to be replaced easily.
  • Usability Use of standard components supports commonality of GUI. CBD also supports desk-top integration, which gives the user a single view of heterogeneous data.
  • Efficiency Performance bottlenecks can be identified, and the need for performance tuning can then usually be localized in a small number of performance-critical components. Components can be internally optimized to improve performance, without affecting their specification; components can be moved between platforms to improve performance, without affecting the functionality or usability of the application.
  • Reliability Given a formal and complete specification of a component, the reliability of a component comes down to the simple question: does the component provide a correct and complete implementation of its specification. The reliability of the application as a whole is a separate issue, but is clearly enhanced when the application is constructed from reliable components.
  • Portability The specification of a component is platform-independent. So a component can be quickly rebuilt for a new platform, without affecting any other component. (With some tools, this will often require no alteration to the internal design, merely a regeneration of the executable portion.)