In this chapter, the following content will be discussed: Developing a single product, component markets, product families and product lines, product populations, component approaches, frameworks as components.
Chapter 11 Components in Product Line Architectures Building Reliable Componentbased Overview Developing a Single Product Component Markets Product Families and Product Lines Product Populations Component Approaches Frameworks as Components Building Reliable Componentbased Global Software Component Market Will it solve all our reuse problems? Far from a global component market Intra-organizational reuse of core software indispensable ”The traditional techniques for reuse of software are still sufficient for small product families, but for larger product populations the best elements of single product development and third party component markets are required.” Building Reliable Componentbased Basic arguments for software product lines Size & Complexity Architecture Quality Diversity Product Lines Reuse Components Lead Time Reduction Building Reliable Componentbased Developing a Single Product Starting from the requirements, we define an architecture The architecture decomposes the system into subsystems and components We build and test the components, then the subsystems, and finally the product Building Reliable Componentbased Characteristics of Product Lines Product Lines Single Product Product Family Product Population Component Markets top-down top-down partially bottom-up bottom-up planned planned planned / opportunistic opportunistic developed developed developed / available available intra – organization intra – organization intra – organization inter – organization Building Reliable Componentbased Component Markets Building systems from existing components, obtained from third parties often has the following characteristics: It is a bottom-up activity (no global architecture defined) Use of components is opportunistic (use whatever is available) The component software is available when starting the project It results in inter-organizational reuse Building Reliable Componentbased Difficulties in Component Markets Architecture Mismatch Less efficient system Scale Reusability Usefulness Resources Excess Building Reliable Componentbased Product Software Categorization: Core Few other companies are able to produce such software Sharing is not an option Key Can be obtained from others Base Can be and is obtained from others Building Reliable Componentbased Product Families and Product Lines Product family : Is a set of products with many commonalties and few differences Is intra-organizational Product Line: Is a top-down, planned, proactive approach to achieve reuse of software within a family (or population, see the next section) of products Building Reliable Componentbased Fixed Generic Architectures The use of fixed generic architectures with variation points: Involve creation of a platform first, from which products can be derived Are a sound basis for realizing the functional and nonfunctional properties Can be difficult to forecast the requirements of future products Can be difficult to agree upon a single architecture in a large multi business-line organization Building Reliable Componentbased Definitions Product Family: Is a set of products with many commonalities and few differences Product Populations: Is a set of products with many commonalities but also many differences Building Reliable Componentbased Consequences Development within product populations will cross business lines, groups or division boundaries Common architectural rules Planning Building Reliable Componentbased Component Approaches Two dimensions for reuse: Variability Independence Building Reliable Componentbased Variability Versus Independence Independence Reusable Composable Lego ‘As is’ Variability Libraries Parameterized Inheritance Koala OO Frameworks Frameworks as Components Plug-ins Component Frameworks Building Reliable Componentbased Libraries The classical techique for organizing reusable software Mathematical Graphical Library-independent interface Libraries dependent on libraries Building Reliable Componentbased Object Oriented Frameworks A set of classes from which to create an application Inheritance allows to abstract from specific behaviour Danger: derived classes are very dependent Fragile base class problem Building Reliable Componentbased Component Frameworks Benifits: Components can be plugged to specialize the behavior Resembles OO frameworks Specifies interfaces between plug-ins and underlying framework – reduces dependencies Downsides: Plug-ins cannot be independently deployed Framework often not composable itself Building Reliable Componentbased Frameworks As Components Powerful parameterization mechanism The ultimate solution for variability and independence The basic mechanism for achieving composability is to make every context dependency explicit and bindable by a third party Building Reliable Componentbased Selectable Plug-ins Variant Free Skeleton Component Frameworks with Plug-ins Building Reliable Componentbased Summary Product development: Small product families traditional techniques Larger product populations top-down with bottom-up Inter-organizational reuse of software Product lines Component approaches Different component models Building Reliable Componentbased ... system into subsystems and components We build and test the components, then the subsystems, and finally the product Building? ?Reliable? ?Componentbased Characteristics of Product Lines Product Lines... available intra – organization intra – organization intra – organization inter – organization Building? ?Reliable? ?Componentbased Component Markets Building systems from existing components, obtained... future products Can be difficult to agree upon a single architecture in a large multi business -line organization Building? ?Reliable? ?Componentbased Definitions Product Family: Is a set of products