EPRAM: A Risk Analysis and Mitigation-Based Evolutionary
Prototyping Model for Quality Requirements Development.
Carter, Ryan Alden
Ana (Annie) I. Antón, Committee Chair
ABSTRACT
Evolutionary prototyping focuses on the iteration of software planning,
implementation, and evaluation while gathering a correct and consistent set of
requirements. The process lends particular strength to building quality software due,
in part, to the ongoing clarification of existing requirements and the discovery of
previously missing or unknown requirements. Traditionally, however, the iterative
reexamination of a system’s requirements has not been the panacea that practitioners
sought due to the predisposition for requirements creep and the difficulty in managing
it. This thesis describes the use of evolutionary prototyping in conjunction with an
aggressive risk-mitigation strategy. Together, these techniques support successful
requirement discovery and clarification and guard against the negative effects of
requirements creep; an aspect that general evolutionary prototyping methodologies
have not mastered. These techniques are embodied in a comprehensive software
development model, which has been christened as the EPRAM (Evolutionary
Prototyping with Risk Analysis and Mitigation) model. To ensure that quality is
inherent within this process model, the Software Engineering Institute’s (SEI)
Capability Maturity Model (CMM) was tailored to conform to the development
base upon which to build the model. The model was intentionally designed to
comply with the Level 2 Key Process Areas (KPA) of the CMM. Validation of the
EPRAM model has occurred on several software development efforts employing the
EPRAM: A Risk Analysis and Mitigation-Based Evolutionary
Prototyping Model for Quality Requirements Development.
by
Ryan Alden Carter
A thesis presented to the Academic Faculty of North Carolina State University
in Partial Fulfillment of the requirements for the Degree of
Master of Science
COMPUTER SCIENCE
April 2001
APPROVED BY:
Dr. Ana (Annie) I. Antón, Chair of Advisory Committee
Dr. Aldo Dagnino
Personal Biography
Ryan Alden Carter is originally from Minneapolis, North Carolina – a small town
situated high in the Appalachian Mountains. He pursued a Bachelor of Science degree in
Computer Science from the University of North Carolina at Charlotte. Upon completion
of his undergraduate coursework in 1999, Ryan continued his education by enrolling in
North Carolina State University where he sought a Master of Science degree in Computer
Science. During the summer of 2000, he was the instructor for Computer Science 310
(Software Engineering), a core course in the North Carolina State undergraduate
curriculum. Ryan has also taught computer classes at Mayland Community College in
Spruce Pine, North Carolina. He intends to graduate from North Carolina State
Acknowledgements
Sometimes our light goes out but is blown into flame by another human being. Each of us owes deepest thanks to those who have rekindled this light.
Albert Schweitzer
First and foremost, I would like to thank my family for their continued support.
To Mom, Dad, and Grant for never letting me drive myself crazy, however hard I tried. I
owe each of you special thanks beyond what I could ever express.
I wish to thank Thomas, John, Devon, and Jason for allowing me to crash in their
office when they were here, and in their homes when they weren’t.
I would like to thank my committee members, Dr. Antón, Dr. Dagnino, Dr. Earp,
and Dr. Williams for their time and help over the last year. Special thanks to Dr. Antón
for rap sessions about my thesis and life, in general. Additionally, I would like to thank
Dr. Vouk for providing the opportunity to delve into prototyping during CSC 510.
I am grateful to have had the opportunity to work with ABB (this work was
partially funded by Asea Brown Boveri grant #2001-0867) and with the e-commerce
practicum students. I wish to thank Hema Srikanth, Ashish Sureka, Kai Yang, and
Lingyun Yang for their assistance and discussions while tailoring the CMM to achieve
Table of Contents
LIST OF TABLES ……… vii
LIST OF FIGURES ……… viii
LIST OF SYMBOLS AND ABBREVIATIONS ……… ix
GLOSSARY ……… x
1. INTRODUCTION ……….. 1
2. A SURVEY OF RELATED WORK ……….. 5
2.1. A Survey of Prototyping in Software Engineering ……….. 5
2.1.1. The Movement Toward Prototyping Model Use ……….. 6
2.1.1.1. Example: Non-evolutionary Waterfall Process Models ……….. 6
2.1.1.2. Problems Facing Non-Evolutionary (Waterfall) System Development ……….. 7
2.1.1.3. The Need for a New Solution ……….. 10
2.1.2. Kinds of Prototypes ……….. 11
2.1.3. Traditional Evolutionary Prototyping ……….. 14
2.1.3.1. Evolutionary Prototyping Principles and Practices ……….. 15
2.1.3.2. Benefits Behind Evolutionary Prototyping ……….. 16
2.1.3.3. Evolutionary Prototyping Quality Metrics ……….. 21
2.1.3.6. Evolutionary prototyping – Future
Practices ……….. 28
2.1.4. Prototyping for Software Development – A Literature Survey ……….. 31
2.2. Managing Risk During Requirements Engineering ……….. 34
2.3. Tailoring the Capability Maturity Model ……….. 35
2.4. Summary ……….. 37
3. THE EVOLUTIONARY PROTOTYPING WITH RISK ANALYSIS AND MITIGATION (EPRAM) MODEL ……….. 38
3.1. The EPRAM Model Process ……….. 38
3.2. Risk Mitigation in the EPRAM Model ……….. 42
3.3. Requirements Evolution in the EPRAM Model ……….. 44
3.4. Tailoring the CMM for the EPRAM Model ……….. 45
3.5. Summary ……….. 49
4. VALIDATION ……….. 50
4.1. Validation Setting ……….. 50
4.2. Blue Cross Blue Shield of North Carolina Case Study ……….. 52
4.2.1. The Case Study Process ……….. 52
4.2.2. Case Study Results ……….. 54
4.2.2.1. Lessons Learned from the Case Study Validation Effort ……….. 56
4.3. Practitioner Survey Validation of the EPRAM Model ……….. 59
4.4. Summary ……….. 61
5. DISCUSSION AND FUTURE WORK ……….. 62
5.1. The “Lightweightedness” of the EPRAM Model ……….. 63
5.2. Requirements Inspections to Reduce Requirements Creep ……….. 65
5.3. Stakeholder Negotiation and Compromise ……….. 66
5.4. A Quality Tailored CMM Basis for the EPRAM Model ……….. 67
5.5. Renewing Past Research in Evolutionary Prototyping ……….. 67
5.6. Summary of Contributions of this Research ……….. 68
5.7. Future Work ……….. 68
BIBLIOGRAPHY ……….. 71
APPENDIX A ……….. 76
APPENDIX B ……….. 99
List of Tables
3.1 Example Tailored CMM Elements ……….. 48
4.1 Relationships Encountered During EPRAM
Inspection Validation ……….. 54
4.2 Results Found from Inspections During the Case
List of Figures
2.1 Vertical Prototyping ……….. 12
2.2 Horizontal Prototyping ……….. 12
2.3 Evolutionary Prototyping Cycle ……….. 13
2.4 Representation of the Evolutionary Prototyping
Model ……….. 16
2.5 Operational Prototyping ……….. 30
2.6 Levels of Risk and Knowledge in the Gate
Model ……….. 36
3.1 The Evolutionary Prototyping with Risk
List of Symbols and Abbreviations
4GLs …. 4th generation languages
ABB …. Asea Brown Boveri
CASE …. Computer Aided Software Engineering
CMM …. Capability Maturity Model
E-commerce …. Electronic Commerce
EDM …. Electricidade da Madeira (utility company)
EPRAM …. Evolutionary Prototyping with Risk Analysis and Mitigation
(model)
KPA …. Key Process Area
NCSU …. North Carolina State Univeristy
RAD …. Rapid Application Development
SEI …. Software Engineering Institute
SITINA …. Sistema de Telemetria para Instalacoes Nao Acompanhadas
Glossary
• Capability Maturity Model: A software process improvement model that provides a set of best practices for improving the software development process, thereby
increasing product quality [JB97].
• Evolutionary Prototyping: An iterative software lifecycle model in which a software prototype gains functionality by being repeatedly planned, implemented, and
reviewed until a final system emerges. The prototype embodies the best-understood
requirements.
• Horizontal Prototyping: A form of iterative prototyping in which all modules covering the breadth of the software system are developed with limited, yet
increasing functionality as the project is refined.
• Operational Prototyping: A form of prototyping that involves the incorporation of throw-away prototyping layered on top of an evolutionary baseline [Dav92].
• Requirements Creep: Significant additions or modifications to the requirements of a software system, resulting in extensions to and alteration of the software’s
• Throw-away Prototyping: A form of prototyping in which prototypes are developed from the least-understood requirements for experimentation purposes and are then
discarded [Som95].
• Vertical Prototyping: A form of iterative prototyping in which a limited number of modules are developed per cycle with complete functionality. Thus, the system
Chapter 1
Introduction
Sometimes a scream is better than a thesis.
Ralph Waldo Emerson
Prototyping has gained acceptance in the software engineering community as a
credible model for software creation, and it has been listed among other more traditional
process methodologies including the Waterfall and Spiral models [Jal00]. Due to the
rising costs of software and the lower rates of systems meeting customer needs,
evolutionary prototyping has become a viable software development model [Dav92]. It
addresses a number of problems such as increased maintenance requests [Gra89],
premature freezing of requirements [Som95], difficulty in revisiting previous model
stages [Pre01, Som95], lack of consideration of user-system interfaces [Gra91], and
miscommunication between developers and customers [Gra91] that are not adequately
addressed in more traditional software process models. Additionally, evolutionary
prototyping provides other benefits including: the clarification of management and user
requirements [LSZ93], the ability to uncover missing or previously unknown
developers can communicate about systems, the easing of maintenance tasks, the creation
of ‘better’ user interfaces [Gra89, Gra91, LSZ93], prototyping with quality [Dav92,
Roy90], and the ability for developers to reflect on lessons learned during system
development [FD89].
Requirements creep refers to significant additions or modifications to the
requirements of a software system throughout the lifecycle, resulting in extensions to and
alteration of the software’s functionality and scope. Requirements creep can be
especially troublesome and frustrating to developers when it is not properly managed due
to the detrimental impact such changes may have on cost, resources, quality, or the ability
to deliver a system that incorporates the new requirements on time. While it can be
argued that the majority of software applications have unstable requirements and that
requirements creep is observed, to some degree, in all requirements methodologies
[Jon96], evolutionary prototyping is particularly susceptible to significant changes in
requirements [Gra89, Gra91]. This is due, in part, to the cyclical revisiting of
requirements throughout the development process.
Electronic commerce (e-commerce) software developers, under pressure to
develop applications at a record pace, are especially ill-equipped to handle requirements
creep due to the widespread lack of process discipline and procedural guidance available
for such market-driven environments. For this reason, requirements creep is rampant in
emerging e-commerce domains, as the innovator often discovers requirements as the
system is incrementally implemented. This thesis presents a risk-based evolutionary
Mitigation) model, that explicitly addresses the challenges inherent in these small, rapid
development efforts.
We ensured that the EPRAM model follows the intent and guidance (thus
adhering to the spirit) of the CMM. This was done by first tailoring the Software
Engineering Institute’s (SEI) Capability Maturity Model (CMM) [PWC94] for use by
small software development teams comprised of as few as 5 individuals, and then using
this tailoring as the basis for the EPRAM. The EPRAM model and associated techniques
facilitate the construction of a complete and consistent set of system requirements while
mitigating the ill effects of requirements creep by supporting the early detection and
resolution of requirements conflict.
Use of the model by small teams has demonstrated that the EPRAM model is
effective for rapid software development; it has undergone validation in various
e-commerce projects in which security and privacy are paramount. The model has been
employed in five projects for three companies (Newton Instruments, Blue Cross Blue
Shield of North Carolina, and Haht Software) within the North Carolina State University
(NCSU) E-commerce Studio [AE00]. As the model is refined, based on the lessons
learned during these five development efforts, it will be further validated during the
development of Web applications at Asea Brown Boveri (ABB).
The remainder of this thesis discusses research directed toward the description of
a risk-based, CMM compatible evolutionary prototyping model; it focuses on such a
model’s ability to circumvent the weaknesses of the “traditional” evolutionary
mitigation, and CMM tailoring and use. The modified evolutionary prototyping model,
the EPRAM model, is detailed in Chapter 3 along with a description of the CMM
tailoring process used as the basis for the EPRAM model. Chapter 4 presents the results
of validation efforts held to verify the tenets of the EPRAM model. Finally, Chapter 5
highlights the EPRAM model’s research contributions, including the view of EPRAM as
Chapter 2
A Survey of Related Work
A dwarf standing on the shoulders of a giant may see farther than a giant himself.
Robert Burton
Our evolutionary prototyping model must address several practical issues, which
are discussed below in the context of related work. Section 2.1 provides an overview of
prototyping models, including an in-depth look at evolutionary prototyping processes.
We then focus on the core aspects of prototyping in relation to risk management during
requirements engineering and the Capability Maturity Model in Sections 2.2 and 2.3
respectively.
2.1 A Survey of Prototyping in Software Engineering
Prototyping as a software lifecycle model or lifecycle model phase has been the
subject of much discussion. We now examine many different kinds of prototypes so that
we may better establish the context for an evolutionary approach. This type of approach
specifically supports practitioners as they seek to better manage requirements creep using
primarily on evolutionary prototyping for software system creation, a survey of other
prototyping categories and reasons behind the rise in popularity of prototyping are also
included for a complete picture of the state of field.
2.1.1. The Movement Toward Prototyping Model Use
Software engineering practitioners, in general, have established certain
‘traditional’ non-evolutionary process guidelines. These guidelines have proven to be
prime candidate steps for guiding the development of quality software. However, there is
a migration occurring on many fronts from non-evolutionary processes to iterative
processes. We demonstrate the movement away from non-evolutionary models using the
replacement of the Waterfall model as one example, in the subsections below.
2.1.1.1. Example: Non-evolutionary Waterfall Process Models
Originally, software development almost exclusively used the ad-hoc,
unpredictable “code and fix” process model. The Waterfall model succeeded this
approach and demonstrated significant improvements in quality and predictability.
Entrenched within the software engineering field, the Waterfall model for system
development has cultivated a loyal following among software developers. In fact, the
Waterfall Model is followed year after year in the software engineering classrooms and
industries throughout the world. According to Sommerville [Som95], this traditional
software development model involves a sequential application of the following phases:
• problem definition – state the problem that is to be solved
• design specification – define ‘how’ the system should operate
• coding, debugging, and unit testing – develop and remove errors from the actual code
• integration and system testing – verify and validate the code that was developed; test the completed system to ensure requirements coverage
• maintenance – modify and tailor the system after delivery to the customer; fix errors discovered after system delivery to the customer
The Waterfall methodology is more applicable to projects with certain
characteristics. The process lends itself well to systems that embody relatively simple
tasks, the developer does not need specialized domain knowledge to produce the system,
there are low expectations from the customers, the project has well-understood
requirements, or the system concept is stable [Bea99]. This approach is widely popular
with software engineering professionals, and it is engrained in the mindset, experiences,
and history of software creation.
2.1.1.2. Problems Facing Non-evolutionary (Waterfall) System Development
Often, popular non-evolutionary process models, such as the time-tested Waterfall
model, do not provide the complete solution to all software engineering woes. There are
a number of problems associated with non-evolutionary system development:
Growing Costs of Software. The rising costs of software have resulted in
software practitioners employing alternative evolutionary process methods in the
reported that upwards of 50% of maintenance requests are the direct result of not
having complete or correct specifications during development [Gra89]. In a 1989
paper, Graham addresses the need for some way to combat these errors and their
related costs with techniques that aid in the production of better software system
specifications. Graham specifically recommends prototyping as a means for
improving these specifications.
Requirements Difficulties. The set of requirements is often one of the most
pivotal matters of importance for any software system. The inability to discover
needed requirements and the inability to adapt to changes in user requirements
will mean failure for many software projects. Yet, non-evolutionary models are
often very weak in these very areas [Bea99]. The Waterfall model, for example,
has a strict linearity with regards to requirements discovery, insisting that the
developers create a complete set of requirements up-front. This may lead to the
premature freezing of the requirements [Som95] in which requirements are either
missing, incorrect, or unchangeable.
Lack of User-Centeredness. Oftentimes in the software development process,
neither those who commission the project nor those who develop the project can
truly identify the needed functionality of the system. In more traditional
non-evolutionary approaches, there is a notable lack of user input into and control of
the entire project development [Bea99]. The list of requirements is derived
representations in order to gain a focus on what they really need from the
delivered product. Successful project completion, however, requires a marked
involvement of those who will ultimately use the system [Gra98].
Difficulty in Revisiting Previous Model Stages. As mentioned above, the
Waterfall model and other non-evolutionary models are structured as linear
sequential models. Iteration can only be done indirectly and causes confusion
when attempted [Pre01]. As a process continues, developers often would like to
revisit previous stages with lessons that have been learned so as to improve the
project, but can only do so with much difficulty, if at all [Bea99]. Sommerville
states that this difficulty sometimes leads to incomplete requirements and design
problems “circumvented by implementation tricks” [Som95].
Lack of Consideration of User-system Interface. Conventional software
engineering process models rarely consider user-system interfaces until the end of
development. Since these interfaces are not available until late in the
development cycle, users have little input into the usefulness and appeal of this
crucial part of the system with which they interact. Many of the problems of
which users complain stem from this very area, and when these problems require
changes, costs escalate. Therefore, various models must be considered in order to
Miscommunication Between Developers and Customers. Many customers are
uncomfortable with the “huge volumes of text, structured English, screen layouts,
and diagrams which constitute most functional specifications” [Gra91].
Documents found within the non-evolutionary models can be confusing to
less-technical customers and therefore require greater effort to understand; ironically,
these are often the only tools for communication that linear models possess. This,
therefore, solely provides an error-prone communication path between developers
and customers. The communication missteps created as a result reinforce the
notion of the need for a common, understandable language (embodied, for
example, in prototypes) created by other process models.
2.1.1.3. The Need for a New Solution
In a report published by the Standish Group in 1995, one-third of approximately
250,000 development projects were cancelled at a cost of $80,000m. Additionally,
$60,000m was estimated for cost and delivery overruns. Among the reasons given for
these extraordinary figures were listed a lack of user involvement during the projects, a
failure to obtain a clear statement of requirements, and no clear common project vision
and objectives held by the customer, the user, and the developers [Gra98]. As seen in the
discussion above, traditional non-iterative processes find weaknesses in these very areas.
Their shortcomings can be summarized by saying that these models are useful for
producing the planned product, which quite often is not the product that the customer
ultimately wants. While the Waterfall model is just one established non-evolutionary
such as the Rapid Application Development (RAD) and Formal Methods models [Pre01].
In response to these deficiencies, other methodologies, such as evolutionary prototyping,
have gained acceptance within the software engineering field. In fact, industry and
academia alike have embraced alternative processes – including holding prototyping as a
legitimate process model for software development by placing it among the other ‘valid’
models such as the Waterfall and Spiral Models [Jal00].
2.1.2. Kinds of Prototypes
Much work has been done in the area of prototyping for the purpose of software
system development. The term ‘prototyping’, however, covers a wide variety of
activities – varying in methodology, outcome, and purpose. This section provides a
big-picture overview of different prototyping categories.
Evolutionary Prototyping. Evolutionary development involves iterativly
gathering system requirements, building a prototype, and delivering this prototype
to the customer. The prototype is started from the best-understood requirements.
This process continues, incrementally adding functionality, until the entire system
is completed. There are two main divisions of this practice: vertical (incremental)
prototyping and horizontal (traditional evolutionary) prototyping. In vertical
prototyping, a small, yet complete portion of the system is delivered to the
customer at the end of each iteration. This piece is fully developed and will not
not yet developed, but does not allow changes to the completed prototyped pieces
[Bea99]. Vertical prototyping is depicted in Figure 2.1.
In horizontal prototyping, the software is fully specified and gradually
refined during the prototyping iterations. This allows the practitioners to
incorporate lessons learned into the system. In this case, requirements can both
be added and changed throughout development cycles. Horizontal prototyping is
depicted in Figure 2.2.
Breath of the Software System
Functionality of the Software
Module
Vertical Prototype
Figure 2.1: Vertical Prototyping. The vertical prototyping consists of one or more modules developed completely with full functionality. Figure from Nielsen 1993 [Bea99].
Breath of the Software System (Modules)
Functionality of the Software
Module Horizontal Prototype
In the most general form, Beaumont [Bea99] provides that evolutionary
prototyping follows the prototyping lifecycle as shown in Figure 2.3.
Throw-Away (Rapid) Prototyping. Throw-away prototyping, also sometimes
(and inconsistently) referred to as rapid or quick-and-dirty prototyping, is a
method of developing a customer’s poorly-understood requirements. For this
method, prototypes are developed from the least-understood requirements for
experimentation purposes [Som95]. This type of prototype is not built with
quality up-front, and therefore the prototype is discarded after the experimental
requirements become clearer and have been written into the requirements
specification [Dav92].
“Revolutionary" (Experimental) Prototyping. Graham [Gra91] defines a third
type of prototype known as the “Revolutionary Prototype”. This kind of
prototyping is more along the lines of the disparaged “hacking”. Ideas can be Develop Prototype
Evaluate Prototype Plan Prototype
in a commercial environment. In actuality, this type is a subclass of the
throw-away prototyping with even stricter controls set in place to guide it.
Operational Prototyping. A new type of prototyping has been created from the
combination of the very dissimilar evolutionary and throw-away prototyping
models. This new prototyping method, called operational prototyping, starts with
an evolutionary prototype being developed for the well-understood requirements.
At the customer site, a user operates this prototype with a trained prototyper
recording any problems the user finds. The prototyper constructs throw-away
prototypes on top of a copy of the existing evolutionary baseline to ‘fix’ the
problems. The new prototypes are again used and any new requirements or
changes are documented to be added to the specification. The throw-away
prototypes are discarded, and the baseline is evolved with the new requirements.
This method combines rapid-development with a quality approach [Dav92]. This
particular method, however, relies heavily on skilled prototypers that must
quickly create throw-away prototypes in the customer’s own environment.
2.1.3. Traditional Evolutionary Prototyping
More and more, as software permeates everyday life, the focus on software
development methodologies increases. It becomes ever more important for software
engineers to know the current state of software development methodologies so that they
can make informed decisions and appropriate choices during the process of software
evolutionary prototyping, as it covers practices, benefits, and drawbacks as seen in
current trends.
2.1.3.1. Evolutionary Prototyping Principles and Practices
Evolutionary prototyping is the repeated software development process of
gathering user requirements, prototyping the software system, having the user evaluate
the system, and evolving the prototype with the user’s changes. These steps are cycled
through, incrementally adding functionality, until a final system emerges from the
process. In theory, at process conclusion, this system will have incorporated the set of
true user requirements – often more so than the same system developed through other
non-iterative methods. The prototyping described above requires that the developers
build quality prototypes throughout the entire lifecycle. Therefore, as depicted in Figure
2.4, each round of the evolutionary process requires that work be done on requirements,
2.1.3.2. Benefits Behind Evolutionary Prototyping
Evolutionary development methods arrived on the scene as valid process models
due, in part, to specific problems that arose in the software engineering and software
development fields. Questions such as how to form clear, complete, consistent
requirements in the face of change, how to have the user involved throughout the life of
the project, and how to adapt to customer expectations and modify those expectations
where appropriate proposed specific challenges – challenges to which evolutionary
prototyping is most remarkably suited. The following is a summary of the benefits of and
motivations for using evolutionary prototyping:
Maintain New Prototype
Deliver Customer Evaluation Debugging / Testing Implementation Design
Reqts
Reqt
Doc New/
Changed Reqts Design
Doc
Prototype Project
Planning
Project Plan
New Design New Reqts
New Correct Prototype
Correct
Not Correct
Clarifies Management and User Requirements. Due to constantly changing
opinions, vague specifications, and indecisive clients, requirements may suffer
from a lack of focus and direction. The direction in which the software should
develop can be very unclear when software engineers employ traditional process
methods. Evolutionary prototyping helps to alleviate this by embodying the
better-understood requirements in a tangible, executable form. Management and
users can see their requirements in the prototyped systems, and therefore can
validate the requirements reflected in the prototype [LSZ93]. By the iterative
nature of the prototype’s evolution, the customer gets the opportunity to accept,
reject, or change the prototype, and in turn, accept, reject, or change the project’s
requirements.
Uncovers Missing or Previously Unknown Requirements. Another benefit
associated with evolutionary prototyping is that of discovering a more complete
set of requirements for a software project. Once a prototype baseline is
established, users can often find additional functions that the prototype must
provide. In [Gra91], Graham presents this ideal facet of the evolutionary process
by claiming that “the key is that prototypes are an excellent means of eliciting
correct, consistent, and complete specifications of requirements.” Through the
use of evolutionary prototyping, developers are able to find out what requirements
Allows for System Flexibility to Meet Changing Constraints. Evolutionary
prototyping is beneficial to practitioners who are struggling to build software
systems that, by their very nature, are based on constantly shifting assumptions,
constraints, and requirements. Lehman has summed up this problem by writing
that software always encapsulates some assumptions. Some of these assumptions
will be stated in the documentation. Some assumptions will be implicit. As
software is being developed, the world on which the assumptions are based will
change [Leh90]. Evolutionary development models take these effects into
account, allowing the project to adapt to the changes and uncertainties inevitably
encountered in software system creation. In these models, commitments in the
constraints and requirements are only held until the beginning of the next
prototyping cycle, where they can be changed and altered as needed. The
evolutionary model’s adaptability works to promote its acceptability within the
software community. Developers working on particularly volatile projects often
look first to evolutionary prototyping from which to base their project [NC98,
FD89].
Provides a Method Whereby Users, Management, and Developers Can
Communicate about Systems. Graham is a proponent of evolutionary
prototyping for the purposes of facilitating communication between all
stakeholders of the software project. The prototypes produced allow all involved
to have a common ‘language’ from which to speak about the system. There is
misinterpretations stemming from the often conflicting, ambiguous natural
language specifications seen in the more traditional, non-evolutionary software
development methods. Many stakeholders are also less intimidated by the
presentation of a prototype than by the paper avalanche of specifications, designs,
screen layouts, and diagrams found too often in methods such as the Waterfall
model [Gra89, Gra91, Gra98]. Graham is not alone in his support of prototyping
for communication [LSZ93].
Eases Maintenance. Evolutionary prototyping reduces the effort that the
developers must apply towards maintenance. There is a relationship between the
maintenance gains and the improvement in the requirements gathering process
upheld by prototyping processes. By achieving a clearer, more complete
requirements list (as previously mentioned) during the project development, the
software is more likely to be what the customer actually wants. Therefore, the
developers will have less to change, fix, and clean-up at the end of the software
project [Gra89, Gra91]; thereby reducing maintenance efforts.
Enables Developers to Create ‘Better’ User Interfaces. Interface problems and
difficulties are often the source of complaints from users of many software
systems. As these problems grow so large that they require changes and
maintenance, costs will rise. Prototyping, such as that done during the phases of
with ways to make the user interface more powerful and easier to use [Gra89,
Gra91]. Prototypes will also assure that the user interface is compatible with the
user requirements [LSZ93].
Encourages Prototyping with Quality. Not all prototypes are the same. There
are various kinds of prototyped systems, each created with differing levels of care
and attention and each possessing varying degrees of quality. For example, unlike
a throw-away prototype, an evolutionary prototype, according to [Dav92], “is
built in a quality manner (including a software-requirements specification, design
documentation, and thorough test).” Royce touts an evolutionary process model
as one in which the quality will not suffer due to rapid bug fixes which are pushed
into the software without valid software engineering practices [Roy90].
Allows Participants to Reflect on Lessons Learned During System
Development. As opposed to the more linear models, traditional evolutionary
prototyping allows developers to take what they have learned and experienced
from the implementation of the earlier prototypes and correct their mistakes and
build on the experiences to gradually refine the software system [Bea99]. This
sentiment is shared among software engineers, as there is a common belief that
“evolutionary models of prototyping take advantage of knowledge acquired as
development progresses [FD89].” Developers can successfully apply
newly-acquired knowledge such as that resulting from a better understanding of the
2.1.3.3. Evolutionary Prototyping Quality Metrics
Software quality is the measure of compliance with customer and user budget,
schedule, functional expectations, and performance expectations. Practitioners in the
software field strive to build products that have the highest level of quality that is needed.
One common, agreed-upon idea that has arisen is the need to judge the quality levels for
software systems. In this light, software engineers often uphold ease of change as the
most important quality perspective. The idea behind this perspective is that the easier
that software is to modify, the easier it is to gain any other aspect of quality [Roy90].
Since ease of change is upheld as the measure by which software quality can be
judged, evolutionary prototyping and development are at the forefront of process models
for building quality software. Evolutionary development enables its practitioners to
achieve better quality more efficiently. This development model is successful at
achieving quality because it mandates the production of intermediate products that assist
in providing early insight into quality. Evolutionary models also help to eliminate
extensive rework at the end of the project and obtain a stable set of requirements as
quickly as possible [Roy90].
Royce, in [Roy90], proposes that rework (in changed lines of source code) should
be the primary metric to be collected. This rework figure could be helpful in identifying
trends in product attributes both during and after project development. In particular, the
rework measure allows software engineers to investigate modularity, the average extent
of breakage, changeability, the average complexity of breakage, maintainability, the ratio
2.1.3.4. Evolutionary Prototyping Issues / Shortcomings
As previously discussed, evolutionary prototyping alleviates many of the issues
that practitioners face during the use of other linear development methods. While
evolutionary prototyping has succeeded in becoming an accepted and even supported
software process model, it has succeeded despite having its own set of drawbacks,
difficulties, and shortcomings. Evolutionary development remains a viable and often
best-fit solution for the creation of many software systems as long as the developers
recognize and accommodate for the model’s liabilities. The EPRAM model described in
Chapter 4 employs risk analysis to address the problems of process control and
functionality / requirements creep as mentioned later in this subsection.
Difficult to Control. Software engineers who use evolutionary prototyping often
face a process that seems difficult to manage and control. The prototyping
literature demonstrates that management of evolutionary prototyping is a major
contributor to the building of ‘good’ software [BS96]. Control of this process lies
in solid management practices, as it can be difficult for all stakeholders to agree
on the direction and objectives of the software development. The contents of the
next prototype may also be hard to determine as a number of revisions and
decisions may need to be made by management. Finally, it is often hard to judge
the level of completeness of the prototyped system as prototyped systems often
lend themselves to being either over-evolved or delivered prematurely [BS96].
being done in the areas of limiting iteration cycles [Gra89, Gra91] and using risk
analysis [BS96] for the purpose of controlling the evolutionary process.
Perception Within Software Engineering Community that Prototyping is
Equivalent to 'Hacking'. In some software engineering circles, prototyping has
become synonymous with ‘hacking’ [Gra91]. Some software engineers view
prototyping as being an unstructured process with low quality and little planning.
Dire warnings abound in certain literature that “prototypes tend to be hacked and
pasted together with little attention to architecture or good programming [CL99].”
Though such statements are meant to discourage the use of prototyping for
development, they actually are somewhat misleading since at their heart, they talk
about evolving throw-away prototypes. In fact, multiple sources, [LSZ93,
Dav92], counsel against the evolution of throw-away prototypes into the final
system. However, [Dav92] praises evolutionary prototyping as having a rigorous
development approach, thereby debunking the ‘hacking’ stereotype.
Project Team Motivation After Many Prototyping Rounds. Graham [Gra91,
Gra98] warns that developers need some indication during the project’s lifecycle
that their efforts are ‘paying-off’. In fact, during some prototyping experiences,
though the system changes, the evolved software never seems to be nearing
completion. This perpetual changing process may become burdensome as
Functionality Creep Possibility. A major benefit of using evolutionary
prototyping for a process model is that it leads to systems that meet known user
requirements and yet can change to meet the user requirements that are discovered
later. This helps to produce systems that the customers want and need. However,
this, too, can become burdensome as customers often try to continually request
that new features be added – features that will add to development time and costs
[Gra91, Gra98]. Stricter time limits, risk analysis and mitigation (as employed,
for instance, in the EPRAM model described in Chapter 3), and limits on the
number of iteration cycles are sometimes used to mitigate this downside.
Poorly Structured Applications. Traditionally, evolutionary prototypes have
had a certain amount of poor structure associated with them, and this structure
deficiency is mainly the result of the iterative process of the evolutionary model
[NC98]. Often, the structures that result from evolved prototypes are considered
to be inefficient when compared to their linear system counterparts [BS96] since
the software design has a tendency to become corrupted through continual
change. Care must be taken when cycling through prototype refinement processes
so that the design is kept clean.
Lack of Defined Milestones. Another anticipated obstacle presented by
evolutionary prototyping is the lack of defined milestones [Bea99]. As the
to keep up-to-date or even to create in the first place. Many times, milestones are
not defined due to the constant revisiting of stages of requirements gathering,
design, and implementation. Such practices, while they may make sense for the
prototyped system, reduce process visibility and therefore must be monitored and
controlled carefully [NC98].
Lack of Achievement. Software developers must carefully plan the contents of
each iteration of the evolutionary process. A temptation that arises from the use
of this software method is the ability for developers to procrastinate in an ‘I’ll do
it later’ approach. These system builders gain the ability to put off what should be
in the present prototype until the next one, extending the time and decreasing the
efficiency of evolutionary prototyping as a useful software engineering process
model [Bea99].
Lack of Continued Commitment from Users. End user involvement is a
must-have for any evolutionary prototyping based project [LSZ93]. End users are an
integral part of the process of refining requirements and evaluating prototypes.
They must be involved for longer sustained periods than is traditionally required
by other processes. Users have to be aware of the status of the prototypes and
should know what to expect from the prototypes that they are shown [Bea99].
This is necessary as users sometimes view prototypes as the ‘real’ systems, even
2.1.3.5. Examples of Systems in Industry Developed Using an Evolutionary Prototyping
Methodology
Evolutionary prototyping is not just a thing of academic study and textbook
reflection. Instead, it has been used countless times in commercial projects. To provide
the reader with a more complete view of evolutionary prototyping as a viable method of
building software, this subsection contains a sample of three such projects of varying
success.
Customer Advice System
In a project documented by Lichter et al. in 1993 [LSZ93], a Customer Advice
System was developed to be the answer to inconsistency of advice given to a public
service organization’s customers and in response to the competition for flexibility in the
market of the organization. It was a sales support system used by sales employees that
allowed for the employees to help configure complex systems that were required to
follow strict legal rules. The system was initialized with a default configuration that was
modified in conjunction with the needs and requests of the organization’s customers
[LSZ93].
Evolutionary prototyping was used for system development for a number of
reasons. The initial prototype assisted the development team in acquiring the project
from the public service organization and in looking at system feasibility. The evolved
prototype provided the core of the system’s functionality, and it helped to evaluate
technical decisions during the project’s completion. Finally, the prototype served in
The drawbacks of using evolutionary prototyping for this particular system is that
it resulted in a product that had redundant system components. There was a lack of user
involvement that served as a determent for project completion. In addition, poor project
planning resulted in a not-quite-perfect process. Nonetheless, the system was built,
accepted by the users, and put into use [LSZ93].
Planning System
Lichter et al. detail another evolutionary prototyping project in their description of
the Planning System [LSZ93]. The purpose of the Planning System was to aid in the
lengthy manual process of system planning in the heating and plumbing industries. Some
automated tools have been used in these fields, but are generally devoted to performing
single work tasks such as calculating pressure loss. The Planning System was created as
an integrated toolkit to aid these professions by providing united computer support for the
entire planning process [LSZ93].
In order to complete this system, developers used evolutionary prototyping as the
software development process model on which to base the project. The initial prototype
developed for the system showcased the potential of the proposed system to the
customer; thus, it served as a presentation prototype. Also, functional prototypes were
developed and evolved to improve developer-customer-user communication. Finally,
this prototyping methodology assisted the practitioners in performing risk assessment.
As of the cited reference’s publication date, the system was being piloted under a small
Power Plant Monitoring System
The EDM (Electricidade da Madeira) utility company proposed the Power Plant
Monitoring System, SITINA (Sistema de Telemetria para Instalacões Não
Acompanhadas – Telemetry System for Unaccompanied Utilities), in order to monitor
two automated power plants. The key feature that the system would provide is that it
would collect statistical information on the power plants’ production [NC98].
Since the developers had experience working with 4th generation languages and
their integration with the evolutionary model, they decided to use evolutionary
prototyping as their process model. The benefit that the developers achieved is that they
gained the opportunity to improve upon poorly defined requirements. Additionally, this
paradigm helped to increase user satisfaction with the system, as well.
Problems that were encountered along the way were bothersome, but were
acknowledged and worked-around. There was an explicit need for tools in order for the
project to be a success. This demonstrated the necessity of using CASE tools and 4th
generation languages for some evolved systems. Visibility into the evolutionary process
was reduced, and the prototyping resulted in a poorer system structure as it became
difficult to keep the conceptual models consistent with the changing prototype. Finally,
there was a discernable need for having highly qualified people involved in the
evolutionary process [NC98].
2.1.3.6. Evolutionary Prototyping – Future Practices
The software engineering field must adapt to the ever-volatile technological
processes to remain useful, they too must undergo modifications and embrace new ideas
and tools. Evolutionary prototyping is no exception, as it benefits greatly from such new
ideas and tools. Included in this subsection is a description of the future outlook for
evolutionary prototyping software methodologies.
Operational Prototyping
Davis proposes a twist on the traditional evolutionary prototyping model – the
incorporation of throw-away prototyping layered on top of an evolutionary baseline. As
previously mentioned, this new prototyping method, called operational prototyping, starts
with an evolutionary prototype being developed for the well-understood requirements.
Practitioners build throw-away prototypes based on the evolved baseline to gather a more
complete set of requirements. The baseline is then evolved with the changes [Dav92] as
shown in Figure 2.5.
Operational prototyping offers a balance between achieving rapid results and
obtaining stability. It develops a set of well-understood requirements and provides the
flexibility for the developer to experiment with poorly-understood requirements.
Operational prototyping also helps to maintain the integrity of the system’s architecture
Improved / New Use of Tools for Evolutionary Prototyping
There continues to be an increase in the level of technology to assist software
engineers during the use of an evolutionary prototyping process model. As technology
progresses, new ways of mitigating weaknesses of the evolutionary approach appear and
are used successfully. Three such technological advances are Object-oriented analysis
and design methods, CASE (Computer Aided Software Engineering) tools, and 4th
generation languages [NC98].
Object-oriented analysis and design methods have begun to be used during the
evolutionary prototyping process. They benefit prototyped systems by helping to
maintain control of the system structure. They provide a layer of encapsulation and clear
notations so that all participants can be a part of the system analysis. Also, these
object-Evolutionary Baseline
Prototyper User Evaluate Baseline
Throw-away Prototypes
Create Evaluate New
Requirements Evolve
Discover and Document
oriented methods provide the developers with the ability to produce analysis and design
diagrams, thereby increasing the process visibility [NC98].
CASE tools have also provided benefits for evolutionary prototyping for software
system development. Though often domain dependent, CASE tools have helped to
bridge rapid development with the analysis and design phases. These tools enable both
process verification and process validation. They also maintain conceptual models and
measure progress for the system [NC98]. CASE tools have worked to provide a better
environment in which to prototype.
4th generation languages (also known as 4GLs) have accelerated prototype
development (coding, debugging, and maintenance) and increased productivity due to the
abstraction that they provide. When integrated with the CASE tools, 4th generation
languages have helped to prevent prototyping CASE tools from being abandoned after a
period of time. 4th generation languages helped to clear the way for more efficient
evolutionary prototyping [NC98].
2.1.4. Prototyping for Software Development – A Literature Survey
In requirements engineering, prototyping is employed to: generate user interface
prototypes in conjunction with scenarios [EKK99]; support walkthroughs with
stakeholders to elicit and validate requirements [Sut97, SR98]; eliminate ambiguity,
incompleteness, and inconsistency during requirements capture [ABR94, RL93]; and
incrementally replace specifications with implementations [OS94].
various levels of lack adequate support for requirements evolution and risk management.
Baskerville et.al. advocate risk analysis for controlling the evolutionary prototyping
process [BS96] since it provides developers with the risk management support needed to
control the evolutionary prototyping lifecycle. As discussed in depth later in this
document, Baskerville and Stage describe a four-step procedure to aid developers as they
focus on risk. The four steps are: define the risks, evaluate the risks, assign priorities to
the risks, and resolve the noteworthy risks. Their work touts risk analysis as the solution
to the “main unsolved problem in prototyping” – the difficulty of controlling the
prototyping process [BS96]. Unfortunately, Baskerville et al., do not address the use of
risk mitigation to solve another evolutionary prototyping problem – functionality and
requirements creep.
Walker Royce stresses the importance of quality metrics such as flexibility and
ease of change throughout the life of a software project [Roy90]. This can be especially
meaningful in prototyping environments such as operational, iterative, and evolutionary
prototyping as they provide tangible products that practitioners can use for getting early
feedback about the quality of the products that they are producing. Royce claims that
there are conventional techniques for gauging functionality, reliability, and performance,
but there are no accepted methods for looking at the flexibility of the system including
modularity, changeability, and maintainability. He proposes that metrics should take the
form of various “rework” measures that are variants of the number of changed lines of
source code in software system baselines [Roy90]. We concur that such metrics are
valuable for measuring an evolutionary process and propose the study of such metrics
Davis notes the advantages of evolutionary prototyping, such as built-in quality,
as well as the pitfalls, including the inability to quickly implement experimental features
[Dav92]. In this work, Davis outlines operational prototyping as a mixture of
evolutionary and throw-away prototyping. He states that operational prototyping results
in “rapid development of experimental features while providing the highest standards of
quality control, configuration management, stability, and robustness [Dav92].”
Ian Graham summarizes the various prototyping approaches of evolutionary,
revolutionary (throw-away), and revelationary (research) prototyping [Gra89, Gra91].
Systems that benefit from evolutionary prototyping are those systems in which the target
programming language is the same as the prototyping language and requirements are
forecasted to quickly change on a regular basis [Gra91]. He does not advocate the use of
prototyping in place of good software engineering practices, but asserts that prototyping
should be accompanied by such practices. According to Graham, project management,
milestone scheduling, deliverable completion, and task decomposition should be included
within the prototyping process model. Graham addresses the need to balance customer
wants versus customer needs, creeping functionality, maintenance of project team
motivation during the cyclical process, and the reduction of implementation shock
through user involvement [Gra91, Gra98]. With respect to creeping functionality,
Graham promotes the use of a time box to limit the time and tendency of the customer to
make significant changes in the scope of the system. This thesis advocates a more
cooperative negotiation and communication between the customer and developers during
evolutionary prototyping to more readily adapt to requirements changes in a controlled
manner.
2.2 Managing Risk During Requirements Engineering
Risk management during iterative software development is a key factor for
project success [BS96]. However, managing risks during the software lifecycle and, in
particular, during requirements engineering activities, is especially challenging in rapid
development environments. Boehm’s Spiral and Win-Win models have explicit risk
resolution sectors that serve to manage risks [Som95, BI96], though such spiral models
have their critics. These types of cyclical models have been discredited as being “wound
up Waterfall models” which are just as inappropriate for fast-paced development as the
Waterfall model, itself, [Gra98] as discussed earlier in Chapter 2. Hall addresses
identification, analysis, resolution, mitigation, and management of software risks in
[Hal98]. Risk management is also employed within the context of aligning e-commerce
application requirements with corresponding security and privacy policies [AE01,
PFI99].
The EPRAM incorporates the risk and compliance assessment activities of
[AE01] and the risk identification and ranking processes of [BS96] to form a
comprehensive risk mitigation strategy. Additionally, many industries use decision
making business models to manage risk during the development phases of a product. For
example, ABB (Asea Brown Boveri) uses a phased business decision-making model to
minimize the risk that a development cycle will spin out of control [CAD01]. This
that represent Go/No-Go (Stop/Change) decision points. The model serves to ensure that
a customer will receive a high-quality and high-value product at release time. The Gate
Model allows for a common terminology within the corporation for product development,
especially when several components (hardware/software) must be integrated into a final
product. A gate in the model represents a decision point to determine whether to
continue or terminate a project based on its benefit, status, risk, resource, and technology
considerations. The diagram in Figure 2.6 represents the objectives of progressing from
one gate to another during a product development cycle. When a project begins, the level
of risk and fuzziness is very high and, ideally, as the project progress proceeds through
the gates, the level of risk decreases. Conversely, as the project evolves and moves
through the gates, the level of knowledge and maturity in the project team increases.
Successive refinements to the EPRAM model have involved adaptation to this gate model
to facilitate its adoption by ABB.
2.3. Tailoring the Capability Maturity Model
A growing number of software organizations are turning to the CMM as a viable
mechanism to build quality into their software processes [JB97]. The CMM was
specifically designed for large government contracts; yet, it embodies basic principles
that are applicable, to some extent, to all software development projects. Small
organizations, however, are experiencing difficulties in adopting the CMM due to lack of
resources, tools, and training [OC99]. Customization is often required to support the
In fact, some practitioners have tailored it to fit smaller, non-traditional organizations
[KHT00, OC99] with mixed results. What is certain is that such tailorings are required
to support the smaller team structure found in common rapid development
environments. This thesis extends the tailoring process to cover small (fewer than 13
individuals) electronic commerce development teams.
Consider Winapp, a company of five employees that develops PC based client
server software applications. Winapp has attempted to improve its software process
maturity. The company was facing increasing difficulty tracking projects, requirements,
and resources as the number, size, and complexity of the projects that it was undertaking
grew. Winapp looked to the CMM for guidance for their process improvements, but
found the CMM a bit overwhelming. Winapp initially experienced difficulties in
adapting the CMM to meet their specific needs for several reasons, including their
inability to support the amount of required documentation, their lack of resources (as
called for by the CMM), and the fact that their flat team structure was not accounted for
in the CMM. To remedy this, the company extracted the applicable concepts of CMM
0 10 20 30 40 50 60 70 80 90 100
b e f o r e G 0
G 0 G 1 G 2 G 3 G 4 G 5 G 6 G 7
Risk, Fuzzyness D e p t h o f K n o w l e d g e %
Figure 2.6. Levels of Risk and Knowledge in the Gate Model.
process improvement and established an improvement framework according to selected
key process ideals. Despite the overhead incurred, the creation of a CMM-inspired
framework at Winapp yielded the perception of significant improvements among the
developers; developers perceived an improvement in the requirements analysis activities
of 157% and a decrease in the number of requirements faults by 57% [OC99]. While
these figures are, admittedly, subjective, they are indicative of a need for process
improvement and guidance within small organizations. In fact, the catalyst for our work
was our analysis of five such teams within Asea Brown Boveri during the Summer of
2000. We observed that many “small” development efforts were evolutionary in nature,
yet they lacked rigorous support for the Key Process Areas of the CMM, such as
requirements management and project planning. We, thus, tailored the CMM, to more
appropriately support the demands of such efforts and used that tailoring as the basis for
the EPRAM model.
2.4. Summary
This chapter presented an overview of prototyping for software development. It
described background research as it pertains to prototyping, risk mitigation, and CMM
tailoring. Chapter 3 presents the modified evolutionary prototyping model, the EPRAM
model that we have developed to reap the benefits offered by traditional evolutionary
Chapter 3
The Evolutionary Prototyping with Risk Analysis and Mitigation
(EPRAM) Model
Those who make peaceful evolution impossible will make violent revolution inevitable.
John F. Kennedy
To demonstrate the effectiveness of the EPRAM model and its ability to manage
requirements creep, we first define the model and its subsequent phases. As discussed in
Chapter 2, traditional evolutionary prototyping models encompass phases involving
requirements engineering, design, coding, testing, customer evaluation, and enhancement
reporting [Dav92]. The EPRAM extends this traditional approach by incorporating risk
management, particularly as it pertains to e-commerce systems, while imposing
adherence to the Level 2 KPAs in the CMM.
3.1. The EPRAM Model Process
This section provides an overview of the EPRAM model, shown in Figure 3.1. In
this figure, rectangles represent process activities, dog-eared boxes (pages) indicate
documentation artifacts, thicker arrows represent major control flows through the
arrow depicts the risk mitigation process maintained throughout the lifecycle. In this
discussion, there is a focus on the requirements activities – specifically, those
requirements activities that are unique to our evolutionary prototyping model, as we show
Government Policy Identification of Risk
Mitigation Strategies
Reqts. Gathering / Integration
Delivery to Customer Risk Analysis
Maintenance Customer Evaluation Implementation
Debugging / Testing Design
Project Planning Project Plan Design Doc. Reqts Doc. New or Changed Reqts Security Policy Consolidated Requirements New Design New Prototype Correct Prototype Acceptable Evaluation Prototype
Non Acceptable Evaluation
Risk Mitigation and Management for the Prototyping Cycle
Existing Design
Updated Design Existing Requirements
Updated Requirements
New / Changed Reqts
Policy Data
New / Changed Reqts Existing Prototype
Newly Updated Prototype Updated Prototype
Existing Project Plan
Updated Project Plan
KEY Documentation Process Activity Risk Mitigation Data Flow Process Flow activity Privacy Policy Negotiated Requirements Risk Doc. Existing Risks Updated Risks Existing Requirements
how the EPRAM model works to counterbalance the possibility of requirements
(functionality) creep.
The project plan is created during the initial prototyping cycle and must be
maintained throughout the life of the project. A scaled-down set of project planning
sections are recommended in order to reduce the overhead of unnecessary over-planning;
yet, we acknowledge that at a minimum, some documentation must be in place to control
and shepherd the project. It is for this reason that the templates that we provide
developers focus on the most essential aspects of project management. To that end,
templates developed for the model include a core group of project planning sections such
as roles, schedules, and responsibilities. As schedules, personnel, roles, responsibilities,
project descriptions, or related documents are changed, created, added, or deleted during
the course of the project, the project plan should be updated to reflect the modifications.
During each prototyping cycle, requirements are reevaluated for completeness,
consistency, understandability, and compliance with any overriding policies. The
requirements considered during each iteration may stem from many sources including,
but not limited to, previously established requirements, policies (e.g. security and privacy
policies [AE01]), stakeholders (customers, users, and developers), organizational
responsibilities, other systems, or additional projects. Requirements are agreed to during
a negotiation process stemming from the risk mitigation discussion; the agreed-to
requirements are then integrated to the requirements documentation and are reflected in
each subsequent prototype release.
As is the case in most software processes, design of new prototype releases occur
revised prototypes. The architectural design, subsystem and module specification, file
structure, global data, and interface design are revised and minimally documented as
necessary to ensure a solid system design and prototype structure. The existing design
document, if there is one, is also updated to reflect these changes.
During implementation, the older, antiquated prototype is modified to fulfill the
new requirements and reflect the new redesign. The implementation, and indeed the
entire EPRAM evolutionary prototyping process, is based upon horizontal prototyping
where, as discussed in earlier sections, the software is fully specified (to the extent of the
level of understanding of the best-known requirements) and gradually refined during the
prototyping iterations. This allows practitioners to incorporate lessons learned into the
system. As the components of the prototype are implemented, they undergo unit testing.
These components are then integrated and the retooled prototype is tested once again to
remove errors.
At the end of each prototyping cycle, the stakeholders are shown the newly tested
prototype so that they may judge whether or not it meets their expectations. At this
juncture, if the customer is satisfied, the project is deemed successful and no additional
iterations are necessary; the system is delivered and the project may then wrap up. If,
however, there are areas that are not addressed by the prototype, or the prototype must be
modified in some way, the new requirements generated during customer evaluation are
recorded and a new evolutionary prototyping cycle begins. Obviously, this iterative
approach all but invites requirements creep, which we manage via risk analysis and