Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster. Iterative processes are preferred by commercial developers because it allows a potential of reaching the design goals of a customer who does not know how to define what they want.
Iterative Processes
Iterative development prescribes the
construction of initially small but ever larger portions of a software project
to help all those involved to uncover important issues early before problems or
faulty assumptions can lead to disaster. Iterative processes are preferred by
commercial developers because it allows a potential of reaching the design
goals of a customer who does not know how to define what they want.
Agile Software Development
Agile software development processes are built
on the foundation of iterative development. To that foundation they add a
lighter, more people-centric viewpoint than traditional approaches. Agile
processes use feedback, rather than planning, as their primary control
mechanism. The feedback is driven by regular tests and releases of the evolving
software.
XP Extreme Programming
Extreme Programming (XP) is the best-known
iterative process. In XP, the phases are carried out in extremely small (or
“continuous”) steps compared to the older, “batch” processes. The
(intentionally incomplete) first pass through the steps might take a day or a
week, rather than the months or years of each complete step in the Waterfall
model. First, one writes automated tests, to provide concrete goals for
development. Next is coding (by a pair of programmers), which is complete when
all the tests pass, and the programmers can’t think of any more tests that are
needed. Design and architecture emerge out of refactoring, and come after
coding. Design is done by the same people who do the coding. (Only the last
feature - merging design and code - is common to all the other agile processes.) The incomplete but functional
system is deployed or demonstrated for (some subset of) the users (at least one
of which is on the development team). At this point, the practitioners start
again on writing tests for the next most important part of the system.