Product design and development has long been a well-defined discipline outside of software development. However, the idea of treating internally developed systems as products within organizations has only recently started to emerge as a way of managing corporate development. Recently, organizations such as Microsoft and object-oriented methodologists such as Brian Henderson-Sellers have recognized the need to organize development by product (the end result), rather than just focusing on projects (the work itself).
The Microsoft Solution Framework (MSF) is particularly interesting. MSF is Microsoft's publicly available development process its alternative to Rational's Unified Process and Catalysis for developing component-based systems. It incorporates a number of features that can be considered UML-friendly, including an emphasis on architecture, the use of small teams for development, an iterative and incremental development cycle, and, of course, product as a cornerstone (details at http://www.oteam.com/msf).
Models are a critical element of product as a coherent way of packaging software-intensive systems to enhance their long-term management. They are no longer merely archival after a system is deployed; instead, they become the basis for managing and evolving a system throughout its life as a product.
I discuss product in more depth in Chapter 10, "The UML in Context."
PROBLEM | How to ensure that the end result of a development effort is manageable, appropriate, and sustainable. |
CONTEXT | Planning and managing using the UML. |
FORCES |
|
SOLUTION | Focus on the product being developed, not the Make the product model the fulcrum for development and management. Identify the requirements for the product as a whole. Model the overall solution as a product with a lifecycle of its own, from birth to death. Start with a product definition that captures the idea of the solution without being constrained by dates and schedules. Integrate the product within a domain framework of shared services. Define how the product itself will be managed, apart from any development projects that may be required. Identify requirements and metrics with the product. Establish a set of criteria for ending the product life. |
RESULTING CONTEXT | An overall framework for managing development and the results of development that aligns with the needs of customers and business management, rather than just the concerns of technical staff and the priorities of project managers. |
DISCUSSION | This is one of those patterns that explains why models are important, rather than how to model. A project focus for development emphasizes solving immediate problems and meeting a deadline. Project management has a narrow focus solving project problems associated with providing a set of tangible end results within the timeframe and scope established by project planning. For a software product to be managed effectively, to be planned proactively, and to provide ongoing value, it needs to be continually managed. A product-based approach allows key components of software to be managed beyond the duration of individual projects (especially requirements and quality measures), and allows for capturingexperience in a more useful form. |
PROBLEM | How to help manage a product using a product model. |
CONTEXT | Identifying the roles of key players in the organized life of a product. |
FORCES |
|
SOLUTION | Use the UML to capture the organization model needed to make the product manageable over time. This model can be an alternative to an organizational chart or can complement it, depending on the extent to which the organization chart reflects jobs and positions, rather than roles. The organization model should reflect roles, not jobs or positions. This is a critical aspect of defining a product, and is another type of context diagram. In particular, identify stakeholders and their roles. A stakeholder has a more general relationship to a product than the product owner(s). Some stakeholders are product owners (the people who control the money that makes ongoing development possible). Some provide other resources (for example, network bandwidth, processing time, or support staff). A variety of product responsibilities can be identified and diagrammed for stakeholders. Typical responsibilities that should be understood up front include "advise" (keep informed) and "consent" (approve), as well as the traditional "provide resources." The range of responsibility types may be more nuanced than this, of course, but the range of responsibilities needs to be factored into types that make sense for the organizational culture and politics, as well as for the organizational architecture. The organization model should also, of course, identify the development team roles. However, remember that the client for this model is the stakeholders not the users and not the workers. In effect, you're creating an architectural view of the organization to provide management context. |
RESULTING CONTEXT | The stakeholders can see and validate the organization architecture for the product easily, and it is presented in a fashion that is consistent with the other product management artifacts. |
DISCUSSION | Ivar Jacobson addresses the larger issues of modeling an organization in The Unified Software Development Process (Jacobson, Booch, and Rumbaugh 1999a). The UML's business modeling profile reflects the unified process approach of modeling an organization providing a set of extensions that facilitate using the UML in describing organizational architecture. David Taylor provides a non-UML perspective on modeling an organization as part of developing business systems (and re-engineering business) in Business Engineering with Object Technology (Taylor 1995). |
PROBLEM | How to scope and bound the product. |
CONTEXT | Planning the product and the development effort. |
FORCES |
|
SOLUTION | Create a context diagram as a model of the product's interaction with the outside world. This can take the form of black-boxing the product as a package, with the system's actors attached and their interactions annotated (see Figure 7.1) Figure 7.1. A simple context diagram.The workers and external systems modeled in the domain model provide a starting point. Any business actors that will interact with the system are also included. In some cases, customers may interact directly with the system. In other cases, a business interaction in the domain model may be mediated by a worker object interacting with the product. Annotate the actors to document the user roles, interactions, and key business abstractions that are central to the product. Each interaction should be explainable as an event it should be triggered by an action on the part of the actor involved, and it should be completed by the system. Make sure that it's tangible and provides value for the actor. Desmond D'Souza and Wills provide a comprehensive approach to modeling a system's context in their book (1998, 592). The Catalysis Approach extends the notion of collaborations, makes use of a variety of UML artifacts to detail the context dynamics, and uses packages and actors to define the boundaries. |
RESULTING CONTEXT | Management can see the boundaries and scope of the product easily, in terms that are meaningful to them. The development team can understand the business contract that the product must meet. |
DISCUSSION | Context diagrams are old and honorable tools in the arena of systems development. Although never formalized in a way agreeable to all, the need for a diagram type that establishes the environment and key interactions with the outside world (and the boundaries with that outside world) are running themes in modeling. Packages and actors, and use cases and business objects provide a UML equivalent to the data/process modeling "single bubble" that encapsulated the application inside and situated the outside world outside. |
PROBLEM | How to document product requirements in a way that is meaningful to the product user and efficient for the product developer. |
CONTEXT | An evolving product within a domain, modeled by using the UML. |
FORCES |
|
SOLUTION | Document your product's business requirements in the form of use cases. If you're using a requirements management tool, map the individual detailed requirements to the use case(s) that realize them, but use the use cases as your organizing structure for planning work and increments. All requirements identified during preliminary analysis should map to one or more use cases. Requirements that don't map to any use cases may be badly defined or redundant. |
RESULTING CONTEXT | A coherent organized model of the business requirements that can provide a starting point for organizing work and planning product increments (the product lifecycle) in a visually graphic and textually straightforward form. |
DISCUSSION | For this pattern, the important aspects of use cases to remember are that they represent an interaction with the product, and that the interaction provides added value to the user. The product requirements are made explicit by rendering the interactions pictorially and textually, and ensuring that each interaction does provide value. Use cases provide a framework for packaging and managing requirements that are meaningful to the user and beneficial to both the developer and planner. It is also important to remember that use cases do not detail the how the underlying processes or algorithms that produce the results. They are not process models, which are specification artifacts rather than analysis artifacts. A properly defined use case model is a contract with the user that spells out what will be provided by the product. |
PROBLEM | How to organize the initial list of objects to facilitate further analysis, design, and implementation. |
CONTEXT | Analysis has produced a preliminary set of use cases, and these have been reviewed to identify a candidate list of objects. |
FORCES |
|
SOLUTION | Stereotype each analysis object as either a boundary object, a control object, or an entity object to provide a logical view of the roles played by each in the domain being analyzed (see Figure 7.2). A boundary object is responsible for communication between the system and its surroundings. According to Jacobson (1994), each boundary object should (ideally) be concerned only with communications and interactions with actors (including the system variety). Originally, Jacobson called them "interface objects," which is probably more expressive of their purpose, but interface is an overworked term. The canonical example is an ATM interface. A control object performs all of the sequencing and control functions associated with a use case. In effect, it acts as a manager for a use case. Control objects, being solely responsible for the sequencing of operations and flow of control within a process (or system), should neither interact with the actor nor be concerned with managing persistence. There should be at least one control object for a use case (although they may be shared like the others). Entity objects should be the home for any information that lasts longer than the life of a use case. Focus on the specific characteristics of each type in refining your analysis. When appearing in diagrams of UML models, the boundary/control/entity stereotypes can be represented by using the standard angled brackets notation (<<and >>) or guillemets. The UML also provides graphical icons that can be used in place of guillemets. These are suitable when used within analysis models or where detailed information about the class that is represented isn't needed. Use the textual stereotype in the class name compartment when class details must be shown. Be careful to use the stereotypes consistently within diagrams to avoid confusion. Also, donot depart from the semantics of the boundary/control/entity stereotypes. Figure 7.2. Boundary-control-entity pattern as a collaboration.Figure 7.3 shows how the boundary-control-entity collaboration can be depicted with UML stereotypes in the classes as well as by using graphical icons. Be consistent by using one or the other. Figure 7.3. Alternative UML notations for BCE. |
RESULTING CONTEXT | A more precisely defined model that establishes relationships between the objects created by development cycle iterations that can be used to explore the details of the domain. This is especially valuable for obtaining user feedback and validation, as well as to document the types of behavior the classes are intended to exhibit. |
DISCUSSION | BCE stereotyping is a simple way of enriching UML models with information that may be useful to users. Also, it is closely related to the preceding use case analysis and provides an additional means of establishing traceability. Jacobson has discussed the BCE pattern in each of his books, and applied it to both business use cases and system use cases. In The Object Advantage (1995), he also explains how to translate a business model expressed using the BCE pattern into the starting point for defining system interactions that support each business use case. This is refined in Software Reuse (Jacobson, Griss, and Jonsson 1997). |
PROBLEM | How to scope incremental development of a product. |
CONTEXT | Planning and managing a model-based product. |
FORCES |
|
SOLUTION | With high-level system use cases as the basis for planning, plan for short development cycles with frequent incremental releases. After each release, replan the remaining portions of the product life-cycle, including the prioritization and scope of future increments (refactor the remainder). But remember that use cases do not structure the product itself, only the development work architecture structures product. |
RESULTING CONTEXT | Well-formed use cases that support minimal rework in the evolution and maintenance of a product. |
DISCUSSION | The UML is implicitly supportive of an incremental and iterative development style. Barry Boehm's spiral lifecycle is the closest approximation available to a development approach that combines the needs of management (control and communication) with realistic planning. Use cases provide the most reasonable approach to chunking development work so that work boundaries are meaningful to the user and incremental functionality is traceable to real requirements. However, use cases are not architecture. Because use cases are analysis artifacts and not design artifacts, they provide a communication tool for working with domain management and users. They do not provide a way to structure the product; the product architecture does that. |
PROBLEM | How to ensure that product changes are consistently integrated and aligned with product requirements as the product evolves. |
CONTEXT | An evolving product specified, designed, and implemented with UML models. |
FORCES |
|
SOLUTION | Support extended traceability within the overall product model itself, using the <<traces>>stereotype of the UML to highlight connections between artifacts. Traces are used to denote connections between elements in different models (such as the analysis model and the design model); they are not allowed within a model. The connections can either result from development and refinement, such as from requirement to implementation (and vice versa), or they can result from versioning (traces between versions and version elements). |
RESULTING CONTEXT | The product models specifically include key traceability information in a visually graphic form that can provide clear guidance when change requests or new requirements occur. |
DISCUSSION | Jacobson emphasized robustness and traceability as key benefits of object-oriented development from early on, in the OOSE methodology that preceded Objectory. And an emphasis on traceability as a contributing factor to robustness was one of the contributions OOSE offered to the UML. The increasing importance (and successes) of short-cycle development and incremental product evolution make robustness and traceability critical aspects of good design and good management via models. Other parts of the UML can also contribute (for example, the "realizes" association that specifies the relationship between an interface and the class/component that actualizes it). One of the strengths of the UML is its adaptability and breadth. A diagrammatic representation of key traces is only part of an overall traceability strategy that includes configuration management and traceability data collection during development. However, although traceability is desirable for its positive impact on product quality and manageability, the overuse of traceability via diagrams can reduce their clarity. The UML Reference Guide suggests using hyperlinks between model elements to identify traceability other than critical links that are needed during model development as human helpers, as reminders of changes that need to be propagated across models, for example (Jacobson, Booch, and Rumbaugh 1999b, 494). |
PROBLEM | How to partition the development work to be done in a useful way. |
CONTEXT | Managing development in an incremental process. |
FORCES |
|
SOLUTION | Define units of development work according to high-level use cases. Package use cases that will be done together. The use cases should be analyzed for risk and prioritized accordingly, depending on whether the development approach is risk-driven or risk-aversive. Map the release strategy to the use case packaging, and develop other artifacts such as manuals by use case package. |
RESULTING CONTEXT | Increments that provide value to the customer, which are real chunks of functionality for the developer and have meaningful boundaries for management. |
DISCUSSION | Although the UML does not, by itself, impose a development process, the notion of use cases and the strategy called use case-driven development are woven into its threads. (And besides, they make sense.) Traceability back to requirements is via use cases, and the most sensible way to organize testing is around use cases. They provide a convenient way of organizing the work at hand for communicating with the customers and stakeholders, as well as a convenient starting point for planning. However, it is important to remember, as I've cautioned elsewhere, that as analysis artifacts, they do not drive the architecture. |
PROBLEM | How to align testing with development to ensure that testing is focused, consistent, and meaningful. |
CONTEXT | Supporting the life of a model-based product. |
FORCES |
|
SOLUTION | Fabricate a test model that parallels and refactors the product model. For example, user acceptance testing should be built around the use cases validated by the users, based on scenarios developed to validate the requirements themselves. These scenarios can also be used for usability testing and as a basis for automated stress testing. Manage the life of the test model for a product in the same way that the other models are managed. |
RESULTING CONTEXT | A basis for managing product testing throughout the product lifecycle, as well as iterations of the development lifecycle. |
DISCUSSION | Testing is not a stage, but rather an ongoing activity. As with any aspect of an architected and model-driven process, testing needs to be based on models that are consistent with models developed for other views of the product, but differentiated according to the specific needs and perspective of the model client in this case, the tester. Because the underlying process for UML-based modeling is driven by use cases, and because use cases provide the basis for traceability and significant communication with the end user, the test model for a product should be derived from the use cases it includes. This approach also provides a means of closure because the acceptance testing for each release will be based on the initial scenarios derived from the use case model, closing the loop of validation. |
PROBLEM | How to organize and control changeable models in an architected environment. |
CONTEXT | Managing product models over time and, more generally, applying the UML in a consistent and uniform fashion. (Note: this is a pattern that says we use models for everything.) |
FORCES |
|
SOLUTION | Establish a configuration-management model for the product at the start of development. From a management perspective, this is the dynamic equivalent of the product architecture. Start by establishing the key work products that need to be managed as a whole and kept in synch. These are the core of the product and they need to be up-to-date for all product stakeholders: senior management, product management, the development team, and production. These packages are called configurations, and the key work products are called configuration items. Using the key models from each stage of development, identify the key work products from the overall development process that will need to be managed as a whole. Model the static and dynamic relationships of these work products as a starting point for documenting the overall approach to configuration management over the development lifecycle and product lifecycle. Define and document a configuration-management process using a UML model. This must be integrated with change management, testing, and release management (see example that follows). |
RESULTING CONTEXT | A process for managing the evolution of a product that is documented consistently and that is consistent with the other documentation artifacts associated with the product. |
DISCUSSION | A defined and clearly communicated model for handling the versions and configurations of a product is a core requirement for successful product management, not just project management. Various SCM tools provide variations on standard themes for how to handle configuration management, but their approaches need to be evaluated against what works in a given organization and development culture. A configuration model can be derived from a corporate model as one target that can be reused. Alternatively, a product may require a special configuration model to suit special needs. There are an increasing number of patterns available that deal with the specifics of configuration management. A notable one is by Brad Appleton, Steve Berczuk, and others calledStreamed Lines: Branching Patterns for Parallel Software Development at http://www.enteract.com/~bradapp/acme/branching/branch-structs.html (1999). |
This chapter has provided a starting point for seeing how the UML can be used to help model a system from a product perspective. Identifying the context, providing support for maintenance and testing, and managing the product are all activities that need to handled with models just as much as the actual design itself.
Many of the patterns in Chapter 6, "Domain Patterns," are also applicable at the product level, with the boundary of the area of interest shifting from the business to the system.
Designing the product is when you'll use some of the major sources of other patterns. Martin Fowler's Analysis Patterns(1997), theGang of Four's Design Patterns (Gamma et al. 1995), and A System of Patterns (Buschmann et al. 1996) are the prime sources for useful patterns.