Page 62 -
P. 62

ITERATION  IN  SYSTEMS  ANALYSIS  AND  DESIGN     47
                    focus on documentation and its iterations. They encourage “freezing” documentation upstream in
                    order to move in a disciplined manner to the next steps in the design. This conceptualization is not,
                    however, always the case, as most major methodologies allow for iteration of upstream documents
                    at least to some extent (Boehm, 1981, 1988; Humphrey, 1989; Kruchten, 2000).
                      The waterfall model (Royce, 1970) is the best-known life-cycle methodology and is often char-
                    acterized as top-down, unidirectional, and noniterative. Contrary to this claim, even in its earliest
                    manifestation Royce suggested that unwanted changes and associated iterations are inevitable, and
                    he recommended a number of practices to address such problems, including piloting any sizable
                    software project with a “preliminary program design” (Royce, 1970, p. 331). This concept was later
                    popularized by Brooks when he stressed “plan to throw one away; you will, anyhow” (Brooks, 1995,
                    p. 116). Royce also suggested iterative maintenance of design documentation. He understood that
                    requirements change as the developer learns, and therefore the requirements should evolve through a
                    series of at least five classes of documents to the final documentation of the design “as built.” Updates
                    to design documentation occur for two primary reasons: to guide or to track development.
                      The extant literature addresses various forms of iterations related to upstream system representations
                    —such as requirements determinations (Davis, 1982), data models (Hirschheim, Klein, and Lyyt-
                    inen, 1995), and the wide array of technical and social documentations associated with formal
                    methodologies (Boehm, 1981, 1988; Davis, 1974; Humphrey, 1989; Kruchten, 2000; Mumford,
                    2003; and others). Although most of the literature addresses changing documents throughout the
                    design, the value of these changes is not elaborated beyond guiding and tracking. Even the more
                    nuanced views of documentation that treat its creation as problematic and argue its content to
                    be flawed (Parnas and Clements, 1986) have made no distinction between the value and cost of
                    iterations across representations. There are some exceptions to this, however. For example, the
                    “inquiry cycle model” (Potts, Takahashi, and Anton, 1994) describes iterative requirements refine-
                    ment where stakeholders define, challenge, and change requirements. Using requirement goals
                    to drive such practice is expected to be efficient, since many original goals can be eliminated,
                    refined, or consolidated before entering the design step (Anton, 1996).
                    Iterating Software Code


                    The code evolves through multiple instantiations in many development approaches including
                    “throw-away” prototypes (Baskerville and Stage, 1996), prototypes that evolve into a final system,
                    or maintenance of different versions of a system. The common usage of “iterative development”
                    normally refers to software design that proceeds through “self-contained mini-projects” where
                    each produces partially complete software (Larman, 2004). This has traditionally been referred
                    to as evolutionary prototyping (Alavi, 1984; Beynon-Davies et al., 1999; Floyd, 1984). Such
                    “iterative development” practices emerged soon after waterfall was made the orthodox model.
                    The idea of “stepwise refinement” involved a blunt, top-down design of the system, then a phased
                    decomposition and modular improvement of the code—largely to increase system performance
                    (Wirth, 1971). Stepwise refinement was criticized for requiring “the problem and solution to be well
                    understood,” and not taking into consideration that “design flaws often do not show up until the
                    implementation is well under way so that correcting the problems can require major effort” (Basili
                    and Turner, 1975, p. 390). To address these issues, Basili and Turner recommended an “iterative
                    enhancement,” where designers start small and simple, by coding a “skeletal sub-problem of the
                    project.” Then developers incrementally add functionality by iteratively extending and modifying
                    the code, using a project control list as a guide, until all items on the list have been addressed. Each
                    iteration involves design, implementation (coding and debugging), and analysis of the software.
   57   58   59   60   61   62   63   64   65   66   67