Component-based Software Engineering (CBSE) Notes
Component-based Software Engineering (CBSE)
Overview
CBSE focuses on the reuse of software components to develop applications.
Came about due to limitations in object-oriented development that did not effectively support reuse.
Key Characteristics of CBSE
Independent components that communicate through clearly defined interfaces.
Standards must be established for seamless integration of components.
Middleware is used to facilitate interoperability between components.
CBSE Essentials
Core Concepts
Components are self-contained entities that provide services without regard to execution environment or programming language.
Important principles:
Components should be independent and not interfere with each other.
Component implementation details are hidden; users interact through interfaces.
A component can be replaced by another as long as the interface is maintained.
Component infrastructures provide standard services.
Component Standards
Importance of Standards
Necessary for components to communicate and interoperate.
Major competing standards include:
Sun’s Enterprise Java Beans (EJB)
Microsoft’s Component Object Model (COM) and .NET
CORBA Component Model (CCM)
Fragmentation in standards can hinder component reusability.
Components and Their Definitions
Definition of Components
According to Councill and Heinmann: A component is a software element conforming to a component model, independently deployable and composed according to standards.
Szyperski states a component has specified interfaces and context dependencies and can be independently deployed.
Characteristics of Components
Composable: External interactions must occur through public interfaces.
Deployable: Must be self-contained and operate as stand-alone entities.
Documented: Should provide detailed documentation of interfaces for better understandability.
Independent: Can be used without reliance on specific other components.
Standardized: Must conform to specific component models and associated metadata.
Component Interfaces
Types of Interfaces
Provides Interface: Defines services offered by the component (essentially the component’s API).
Requires Interface: Specifies services needed for the component to operate (does not define how those services should be provided).
CBSE Processes
Development Processes
For Reuse: Developing components intended for reuse, often generalizing existing implementations.
With Reuse: Creating new applications using already available components/services.
Supporting Processes
Component Acquisition: Finding and integrating existing components.
Component Management: Cataloging and ensuring availability of reusable components.
Component Certification: Verifying the quality and compliance of components with specifications.
Component Validation & Composition
Validation
Involves developing test cases for components, ensuring specifications are detailed enough to test thoroughly.
Must check for unwanted functionality or malicious code.
Composition
Involves assembling components into systems:
Sequential Composition: Components execute in a specific sequence.
Hierarchical Composition: One component calls services from another.
Additive Composition: Combined interfaces create a new component.
May require writing glue code to handle integration issues and mismatch in interfaces.
Interface Incompatibility
Parameter Incompatibility: Same operation names but different types.
Operation Incompatibility: Different operation names between components.
Operation Incompleteness: Provided interfaces being subsets of required interfaces.
Trade-offs in Component Composition
Conflicts may arise between functional and non-functional requirements, rapid delivery needs, and ensuring system evolution. Key decisions involve:
Evaluating effective component compositions for delivering functionalities.
Ensuring selected compositions accommodate future enhancements.
Understanding emergent properties of the final system configuration.
Key Points
CBSE is an effective means of producing reusable components that simplify the development process.
Establishing component standards ensures consistent usage and integration across different environments.
Successful component management requires strict validation and certification processes to mitigate risks and enhance functionality and security.