An iteration encompasses the development activities that lead to a product release-a stable, executable version
of the product, together with any other peripheral elements necessary to use this release. So a development iteration
is in some sense one complete pass through all the disciplines: Requirements, Analysis & Design, Implementation,
and Test, at least. Note that evaluation criteria are established when each iteration is planned. The release will
have planned capability which is demonstrable.
The duration of an iteration will vary depending on the size and nature of the project, but it is likely that
multiple builds will be constructed in each iteration. One well-known approach is the continuous
integration: as unit-tested components become available, they are integrated, then a build is produced and subjected to
integration testing. In this way, the capability of the integrated software grows as the iteration proceeds, towards
the goals set when the iteration was planned.
Iterations and releases allow a better usage over time of the various specialties in the team: developers, testers, and
so forth. Regular releases let you break down the integration and test issues and spread them across the development
cycle. These issues have often been the downfall of large projects because all problems were discovered at once during
the single massive integration step, which occurred very late in the cycle, and where a single problem halts the whole
team.
At each iteration, artifacts are updated. It is said that this is a bit like "growing" software. Instead of developing
artifacts one after another, in a pipeline fashion, they are evolving across the cycle, although at different rates.
Another characteristic of an iteration is to be timeboxed, mening the schedule for an iteration should be regarded as
fixed, and the scope of the iteration's content actively managed to meet that schedule.
Traditionally, projects have been organized to go through each discipline in sequence, once and only once. This leads
to the waterfall lifecycle:
This often results in an integration 'pile-up' late in implementation when, for the first time, the product is built
and testing begins. Problems which have remained hidden throughout Analysis, Design and Implementation come boiling to
the surface, and the project grinds to a halt as a lengthy bug-fix cycle begins.
A more flexible (and less risky) way to proceed is to go several times through the various development disciplines,
building a better understanding of the requirements, engineering a robust architecture, ramping up the development
organization, and eventually delivering a series of implementations that are gradually more complete. This is called an
iterative lifecycle. Each pass through the sequence of process disciplines is called an iteration.
Therefore, from a development perspective the software lifecycle is a succession of iterations, through which
the software develops incrementally. Each iteration concludes with the release of an executable product. This
product may be a subset of the complete vision, but useful from some engineering or user perspective. Each release is
accompanied by supporting work products: release description, user documentation, plans, and so on, and updated models
of the system.
The main consequence of this iterative approach is that the work products, described earlier, grow and mature over time, as shown in the
following diagram.
Information set evolution over the development phases.
Minor milestone
Each iteration is concluded by a minor milestone, where the result of the iteration is assessed relative to the
objective success criteria of that particular iteration.
Iteration and Phases
Each iteration within a phase results in an executable release of the system.
Each phase can be further broken down into iterations. An iteration is a complete development loop resulting in a
release (internal or external) of an executable product, a subset of the final product under development, which grows
incrementally from iteration to iteration to become the final system.
|