# Component-based software engineering

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/Component-based_software_engineering
> Markdown URL: https://mediated.wiki/source/Component-based_software_engineering.md
> Source: https://en.wikipedia.org/wiki/Component-based_software_engineering
> Source revision: 1341653062
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

Engineering focused on building software from reusable components

**Component-based software engineering** (**CBSE**), also called **component-based development** (**CBD**), is a style of [software engineering](/source/Software_engineering) that aims to construct a [software system](/source/Software_system) from [components](/source/Software_component) that are [loosely coupled](/source/Coupling_(computer_programming)) and [reusable](/source/Reusability). This emphasizes the [separation of concerns](/source/Separation_of_concerns) among components.[1][2]

To find the right level of component granularity, [software architects](/source/Software_architect) have to continuously iterate their component designs with [developers](/source/Software_developer). Architects need to take into account [user requirements](/source/Software_requirements), responsibilities, and [architectural characteristics](/source/Non-functional_requirement).[3]

## Overview

CBSE grew out of earlier paradigms such as [structured programming](/source/Structured_programming) and [object-oriented programming](/source/Object-oriented_programming), but it places greater emphasis on building software by assembling and integrating pre-existing components. Unlike [objects](/source/Object_(computer_science)), which typically encapsulate both data and behavior, components are higher-level constructs that provide well-defined interfaces and can be deployed independently.[4]

Component orientation underlies many modern [software frameworks](/source/Software_framework) and [architectural styles](/source/Software_architecture), including [service-oriented architecture](/source/Service-oriented_architecture) (SOA), [microservices](/source/Microservices), and widely used [frontend](/source/Front-end_(computing)) frameworks such as [React](/source/React_(software)), [Angular](/source/Angular_(web_framework)), and [Vue](/source/Vue.js).

## Considerations

An example of two components in [UML](/source/Unified_Modeling_Language): Checkout processes a customer's order, which requires the other one to bill the credit card.

For large-scale systems developed by large teams, a disciplined [culture and process](/source/Software_development_process) is required to achieve the benefits of CBSE.[5] [Third-party components](/source/Third-party_software_component) are often utilized in large systems, raising issues of [integration](/source/Integrated_software), [licensing](/source/Licensing), and [software quality](/source/Software_quality).

The system can be designed visually with the [Unified Modeling Language](/source/Unified_Modeling_Language) (UML). Each [component](/source/Software_component) is shown as a rectangle, and an [interface](/source/Interface_(computing)) is shown as a lollipop to indicate a provided interface and as a socket to indicate consumption of an interface. This graphical representation helps clarify the relationships and dependencies between components.

[Component-based usability testing](/source/Component-based_usability_testing) is applied when components interact directly with the [end user](/source/End_user), ensuring both functionality and user experience are preserved when components are reused or replaced.

## Applications

CBSE principles are used across multiple domains:

- In [enterprise software](/source/Enterprise_software), component-based approaches enable large-scale modular applications such as [ERP](/source/Enterprise_resource_planning) and [CRM](/source/Customer_relationship_management) systems.

- In [embedded systems](/source/Embedded_system), components are reused to reduce development costs and time-to-market.

- In [frontend](/source/Front-end_(computing)) development, component-oriented architectures dominate modern [web application](/source/Web_application) design, with [design systems](/source/Design_system) often mapped directly to reusable code components.

- In [cloud computing](/source/Cloud_computing), [microservices architecture](/source/Microservices_architecture) can be viewed as a natural evolution of component orientation, where components are independently deployed services.

## Challenges

While component-based development improves [maintainability](/source/Maintainability) and reusability, it introduces challenges such as:

- Ensuring [interoperability](/source/Interoperability) among components developed by different vendors.

- Managing [dependencies](/source/Dependency_(computer_science)) and versioning.

- Guaranteeing [performance](/source/Performance) and [security](/source/Security) when integrating external components.

## See also

- [Object-oriented programming](/source/Object-oriented_programming)

- [Service-oriented architecture](/source/Service-oriented_architecture)

- [Microservices](/source/Microservices)

- [Design system](/source/Design_system)

- [Software framework](/source/Software_framework)

## References

1. **[^](#cite_ref-1)** George T. Heineman, William T. Councill (2001). *Component-Based Software Engineering: Putting the Pieces Together*. Addison-Wesley Professional, Reading 2001 [ISBN](/source/ISBN_(identifier)) [0-201-70485-4](https://en.wikipedia.org/wiki/Special:BookSources/0-201-70485-4)

1. **[^](#cite_ref-2)** Clemens Szyperski, Dominik Gruntz, Stephan Murer (2002). *Component Software: Beyond Object-Oriented Programming*. 2nd ed. ACM Press - Pearson Educational, London 2002 [ISBN](/source/ISBN_(identifier)) [0-201-74572-0](https://en.wikipedia.org/wiki/Special:BookSources/0-201-74572-0)

1. **[^](#cite_ref-3)** *Fundamentals of Software Architecture: An Engineering Approach*. O'Reilly Media. 2020. [ISBN](/source/ISBN_(identifier)) [978-1492043454](https://en.wikipedia.org/wiki/Special:BookSources/978-1492043454).

1. **[^](#cite_ref-4)** Crnkovic, Ivica (2001). "Component-based Software Engineering – New Paradigm of Software Development". *Software Focus*. **2** (3): 127–133. [doi](/source/Doi_(identifier)):[10.1002/swf.45](https://doi.org/10.1002%2Fswf.45).

1. **[^](#cite_ref-5)** [Douglas C. Schmidt](/source/Douglas_C._Schmidt). ["Why Software Reuse has Failed and How to Make It Work for You"](http://www.dre.vanderbilt.edu/~schmidt/reuse-lessons.html). Retrieved 14 May 2024.

v t e Software engineering Fields Computer programming DevOps Empirical software engineering Experimental software engineering Formal methods Requirements engineering Search-based software engineering Site reliability engineering Social software engineering Software deployment Software design Software maintenance Software testing Systems analysis Concepts Abstraction CI/CD Compatibility Backward compatibility Compatibility layer Compatibility mode Forward compatibility Software incompatibility Component-based software engineering Data modeling Enterprise architecture Functional specification Modeling language Programming paradigm Software Software archaeology Software architecture Software configuration management Software development process/methodology Software quality Software quality assurance Software system Software verification and validation Structured analysis Essential analysis Orientations Agile Aspect-oriented Object orientation Ontology SDLC Service orientation Models Developmental Agile EUP Executable UML Incremental model Iterative model Prototype model RAD Scrum Spiral model UP V-model Waterfall model XP Model-driven engineering Round-trip engineering Other CMMI Data model ER model Function model Information model Metamodeling Object model SPICE Systems model View model Languages IDEF SysML UML USL Related fields Computer engineering Computer science Information science Project management Risk management Systems engineering Category Commons

v t e Programming paradigms Imperative Structured Jackson structures Block-structured Modular Non-structured Procedural Programming in the large and in the small Design by contract Invariant-based Nested function Object-oriented Class-based, Prototype-based, Object-based Agent Immutable object Persistent Uniform function call syntax Declarative Functional Recursive Anonymous function (Partial application) Higher-order Purely functional Total Strict GADTs Dependent types Functional logic Point-free style Expression-oriented Applicative, Concatenative Function-level, Value-level Monad Dataflow Flow-based Reactive (Functional reactive) Signals Streams Synchronous Logic Abductive logic Answer set Constraint (Constraint logic) Inductive logic Nondeterministic Ontology Probabilistic logic Query Domain- specific language (DSL) Algebraic modeling Array Automata-based (Action) Command (Spacecraft) Differentiable End-user Grammar-oriented Interface description Language-oriented List comprehension Low-code Modeling Natural language Non-English-based Page description Pipes and filters Probabilistic Quantum Scientific Scripting Set-theoretic Simulation Stack-based System Tactile Templating Transformation (Graph rewriting, Production, Pattern) Visual Concurrent, parallel Actor-based Automatic mutual exclusion Choreographic programming Concurrent logic (Concurrent constraint logic) Concurrent OO Macroprogramming Multitier programming Organic computing Parallel programming models Partitioned global address space Process-oriented Relativistic programming Service-oriented Structured concurrency Metaprogramming Attribute-oriented Automatic (Inductive) Dynamic Extensible Generic Homoiconicity Interactive Macro (Hygienic) Metalinguistic abstraction Multi-stage Program synthesis (Bayesian, by demonstration, by example, vibe coding) Reflective Self-modifying code Symbolic Template Separation of concerns Aspects Components Data-driven Data-oriented Event-driven Features Literate Roles Subjects Comparisons/Lists Comparison (multi-paradigm, object-oriented, functional), List (OO, by type)

Authority control databases National United States Israel Other Yale LUX

---
Adapted from the Wikipedia article [Component-based software engineering](https://en.wikipedia.org/wiki/Component-based_software_engineering) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/Component-based_software_engineering?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
