Iterations and Increments
As mentioned in "The Four Phases," each of the Unified Process's phases is divided into iterations. An iteration is simply a mini-project that's part of a phase.
A typical iteration crosses all five of the workflows discussed in the previous section, to a greater or lesser extent. For instance, an iteration during the Elaboration phase might focus heavily on activities of the Requirements and Analysis workflows, whereas an iteration during Construction is more likely to involve Design, Implementation, and Test activities. (Chapters 7 through 9 discuss the details of these crossovers.)
Each iteration results in an increment. This is a release of the system that contains added or improved functionality compared with the previous release.
Figure 1-3 shows the essence of the iterative and incremental approach to software development.
Figure 1-3: Iterative and Incremental Development
Using an iterative and incremental approach, a project team starts the development process by evaluating the relevant risks, including those associated with requirements, skills, technology, and politics, and by ensuring that the scope of the project is defined to everyone's satisfaction (see "Elaboration"). Then the team follows these steps:
Define the first iteration, addressing the most critical and difficult risks. (In other words, do the hard stuff first.)
Map out a plan for the iteration to a suitable level of detail.
Perform the appropriate activities; for the Unified Process, these are activities associated with the Requirements, Analysis, Design, Implementation, and Test workflows.
Do a postmortem on the increment that results from the iteration.
Discard the risks that the increment has sufficiently addressed. Then update the ongoing risk list.
Revise the overall project plan in response to the relative success or failure of the iteration.
Proceed with the next iteration.
Iterations build the six models increment by increment. At the end of each iteration, the full set of models that represents the system is in a particular state; this is the architectural baseline.