Overview of the Unified Process
Introduction
The Unified Process fits the general definition of a process: a set of activities that a team performs to transform a set of customer requirements into a software system. However, the Unified Process is also a generic process framework that people can customize by adding and removing activities based on the particular needs and available resources for a project.
The Rational Unified Process (RUP) is an example of a specialized version of the Unified Process that adds elements to the generic framework; see Appendix A for a discussion of those elements. The discussion in the body of this book about The Internet Bookstore, an example project, represents a tailoring in the other direction: The team doing that project skipped some activities that didn't add value. This example system illustrates a key aspect of how one should put the Unified Process to work: Use those elements of it that add value for a particular project; omit those elements that don't add value. See Appendix C for an example of a streamlined process based on the principle of starting with core elements and adding other elements as necessary.
The Unified Process makes extensive use of the Unified Modeling Language (UML). At the core of the UML is the model, which in the context of a software development process is a simplification of reality that helps the project team understand certain aspects of the complexity inherent in software.
The UML was designed to help the participants in software development efforts build models that enable the team to visualize the system, specify the structure and behavior of that system, construct the system, and document the decisions made along the way. Many of the tasks that the Unified Process defines involve using the UML and one or more models.
NOTE
See Chapter 1 of UML Explained for information about models and their value in software development.
The remaining sections in this chapter describe how the Unified Process evolved, the key tenets that underlie the process (use case driven, architecture-centric, and iterative and incremental), and the vocabulary used to describe the details of the process.