J2EE: An Introduction to the Rational Unified Process
- Best Practices—The Foundation of RUP
- RUP Key Concepts
- RUP as a Process Framework
- Summary
The purpose of this chapter is to introduce the Rational Unified Process (RUP), the process framework on which this book is based. We start with a discussion of the software best practices that form the foundation of RUP. We then discuss the key concepts and overall organization of RUP (the RUP "architecture"), and then close with a discussion of the use of RUP as a process framework for developing a customized process.
This chapter is important because it sets the context for the next chapter, Chapter 4, An Introduction to the J2EE Developer Roadmap, which provides an overview of our customized view of RUP that has been explicitly tailored to meet the needs of the J2EE developer. The J2EE Developer Roadmap is the process we use in this book to describe the development of the Online Auction application described in Chapter 5, An Introduction to the Sample Application.
Best PracticesThe Foundation of RUP
The Rational Unified Process is a software development process framework that provides a disciplined approach to assigning tasks and responsibilities within a development organization. Its goal is to ensure the production of high-quality software that meets the needs of its end users within a predictable schedule and budget ("better software faster").
Best practices are a set of commercially proven approaches to software development. When used in combination, best practices ensure the success of a software development project by striking at the root causes of typical software development problems. RUP was explicitly designed to support the implementation of six best practices1.
Develop iteratively. Deliver the functionality of the system in a successive series of releases of increasing completeness, where each release is the result of an iteration. The selection of which requirements are addressed within each iteration is driven by the mitigation of project risks, with the most critical risks being addressed first.
Manage requirements. Use a systematic approach to elicit and document the system requirements, and then manage changes to those requirements, including assessing the impact of those changes on the rest of the system. Effective requirements management involves maintaining a clear statement of the requirements, as well as maintaining traceability from these requirements to the other project artifacts.
Use component architectures. Structure the software architecture using components2. A component-based development approach to architecture tends to reduce the complexity of the solution, and results in an architecture that is more robust and resilient, and which enables more effective reuse.
Model visually. Produce a set of visual models of the system, each of which emphasizes specific details, and "ignores" (abstracts, filters away) others. These models promote a better understanding of the system being developed and provide a mechanism for unambiguous communication among team members ("a picture is worth a thousand words").
Continuously verify quality. Continuously assess the quality of the system with respect to its functional and nonfunctional requirements. Perform testing as part of every iteration. It is a lot less expensive to correct defects found early in the software development life cycle than it is to fix defects found later.
Manage change. Establish a disciplined and controlled approach for managing change (changing requirements, technology, resources, products, platforms, and so on). Control how changes are introduced into the project artifacts, who introduces the changes, and when those changes are introduced. Provide a means to efficiently synchronize those changes across the different development teams, releases, products, platforms, and so forth.
These best practices are the result of Rational's experiences in developing its software products together with the experiences of Rational's many customers. Implementing these best practices puts a software development organization in a much better position to deliver high-quality software in a repeatable and predictable fashion.