25
1.13
Modeling and simulation
evaluation with significant success and cost savings. However, this concept of a vir-
tual prototype does not translate well into the software development community.
The software industry has embraced the prototyping concept as a means of
achieving timely and incremental deliveries of the software product. Many software
development strategies have adopted a prototyping philosophy. These
methodologies
have deliberately introduced a calculated diversion into their software development
approach. By prototyping the software product, software personnel are permitted to
do what they do best—programming. By the time the prototype has reached a cer-
tain
state of completeness, the majority of the time and labor available to the soft-
ware development project has been consumed. This travesty belies the appearance of
developing an “evolutionary prototype” that eventually must be acknowledged to be
the deliverable software product. (It looks like the product, was developed by the pro-
ject, therefore it must be the product!) This practice avoids
the exertion of engineering
rigor necessary to establish a stable architecture upon which the software product can
be sustained and evolved. As the prototype is evolved by adding additional function-
ality, the fragility of the underlying architecture is destined to fracture. This
is not
a
legitimate or justifiable software engineering practice.
Prototypes are, by definition, a sample or model built to test a concept or to
behave as a design entity.
4
Prototypes mimic or imitate a
design entity in an attempt
to allow engineers and designers the ability to explore design alternatives, test the-
ories, and confirm engineering expectations. Prototypes serve to enable the speci-
fication of the product rather than basing the specifications on a theoretical or
contemplated engineering solution. Software prototyping
is fundamentally an oxymo-
ron and, as such, is an unprofessional contradiction devised to permit software per-
sonnel to focus on coding rather than architecting the software product.
Software prototyping does serve a purpose in software engineering if used ethi-
cally and sparingly. Prototyping the graphical user interface (GUI) is an example of a
proper use of a software prototype. The GUI test article can be exposed to human test
subjects to gather human–machine interface data that can
be used to refine the GUI
specification and design motif. Software prototypes should be undertaken prudently
to ensure that the information gathered (benefits of prototyping) merits the invest-
ment in the prototyping development. That’s right! Prototyping is a form of develop-
ment and the software prototype must be properly scoped, specified,
designed, and
implemented before it can be used to gather engineering data or user feedback. This
suggests that many of the rigorous and meticulous practices associated with imple-
menting the software product may be disregarded to reduce the cost of prototype
development. However, this lack of rigor relegates the software prototype to a dispos-
able mockup. Fundamentally, no software code developed
under prototyping condi-
tions should be utilized within a deliverable software product.
The different treatments of prototypes by traditional engineering disciplines and
the software community should be examined prior to adopting a software prototyp-
ing strategy.
Table 1.3
provides a comparison of the use of prototyping by traditional
4
See
http://en.wikipedia.org/wiki/Prototype
.