Component-based software engineering
{{Short description|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 that aims to construct a software system from components that are loosely-coupled and reusable. This emphasizes the separation of concerns among components.George T. Heineman, William T. Councill (2001). Component-Based Software Engineering: Putting the Pieces Together. Addison-Wesley Professional, Reading 2001 {{ISBN|0-201-70485-4}}Clemens Szyperski, Dominik Gruntz, Stephan Murer (2002). Component Software: Beyond Object-Oriented Programming. 2nd ed. ACM Press - Pearson Educational, London 2002 {{ISBN|0-201-74572-0}}
To find the right level of component granularity, software architects have to continuously iterate their component designs with developers. Architects need to take into account user requirements, responsibilities and architectural characteristics.{{Cite book |title=Fundamentals of Software Architecture: An Engineering Approach |publisher=O'Reilly Media |year=2020 |isbn=978-1492043454}}
Considerations
File:Component-based Software Engineering (CBSE) - example 1.svg: 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 is required to achieve the benefits of CBSE.{{cite web |author=Douglas C. Schmidt |title=Why Software Reuse has Failed and How to Make It Work for You |url=http://www.dre.vanderbilt.edu/~schmidt/reuse-lessons.html |access-date=14 May 2024}} Third-party components are often utilized in large systems.
The system can be designed visually with the Unified Modeling Language (UML). Each component is shown as a rectangle, and an interface is shown as a lollipop to indicate a provided interface and as a socket to indicate consumption of an interface.
Component-based usability testing is for components that interact with the end user.
References
{{Reflist}}
{{Software engineering}}
{{Programming paradigms navbox}}
{{Authority control}}
{{DEFAULTSORT:Component-Based Software Engineering}}
Category:Object-oriented programming