A Practical Guide to Enterprise Architecture

The three main goals of a software product line are to reduce cost, improve delivery time, and improve quality. A software product line is a "family of products designed to take advantage of their common aspects and predicted variabilities" (Weiss 1999).

Any organization that has many software systems will notice that many of those software systems have characteristics in common. When a set of systems has common characteristics, they are candidates to become part of a product family or product line. A product line has a set of core assets upon which a shared family of systems is built. Core assets include shared components, infrastructure, tools, process, documentation, and above all else, shared architecture.

A product line is a decomposition of the entire application portfolio of an organization according to these common characteristics. For example, Canaxia hired Scott Roman as its new CIO of Internet systems. Scott decided to create an Internet product line that included all Internet-based systems because they share a common architecture. Chapter 2 explored how software architecture is built to achieve the quality-attribute requirements of the project. In product line development, the software architecture that belongs to the product line is based on the common quality-attribute requirements for all the applications in the product line. Scott realized that all the Internet systems require 24 x 7 availability and have the same performance and scalability requirements and generally need the same software architecture. These requirements drove him to create a set of common core assets that met the quality-attribute requirements for all the Internet applications at Canaxia.

Figure 4-1 (From "Software Product Lines: Practices and Patterns" by Paul Clements and Linda Northrop, Addison Wesley 2002) illustrates that product line development consists of cooperation among three different constituencies: core asset development, product development, and management.

Figure 4-1. Product line development.

Core Asset Development

Core asset development is the creation and maintenance of the artifacts or core assets in the product line. These core assets are used to create systems that match the quality criteria of the product line. For example, if the types of products that are developed in the product line have a high maintainability requirement, then the core assets should reflect this requirement and account for the need for good maintainability. The goal of the core asset development activity is to create a capability within the organization to produce a particular type of application and will thus yield the same or similar software architecture.

Product Development

The second constituency is product development. Product development involves the creation of products or systems from the core assets of the product line. If a system requires an asset that is not included in the core assets, the core asset must be created if the asset can be shared across multiple products in the product line. It is a strategic decision whether or not to build a new core asset or to create a product-specific feature to the project under development. Also, if the core asset that exists in the product line does not match the quality requirements of the product under development, the core asset may be enhanced or modified. Later in this chapter, we talk about several models for organizing core asset and production development.

Management

Management must be involved to ensure that the two constituencies are interacting correctly. Instituting a product line practice at an organization requires a strong commitment from management. It is also important to identify which assets are part of the product line and which ones are part of the development of the individual products of the system. Management consists of the management of individual projects within the product line, as well as overall product line managers. The role of product line manager (Northrop 2002) is one of a product line champion. The champion is a strong, visionary leader who can keep the organization working toward the creation of core assets while limiting any negative impact on project development.

Категории