A common way to fulfill the goals of the inception phase is prototyping. Based on the experience gained from developing a prototype, project teams can make better technology decisions, create better designs, and build better implementations. Usually a prototype is a basic implementation of functionality to show whether a solution is feasible within given constraints. It is commonly used to evaluate the following:
When the prototype is completed, two scenarios are possible: Either the prototype is thrown away and development starts over from scratch, or the prototype is evolved into the product. In the latter case the prototype undergoes a design and functional review, and adjustments are made where necessary to lead into a product.
The prototype developed throughout this chapter will be used only to evaluate feasibility and will not undergo further quality measurement to lead to product code in later iterations.
More about Prototypes
The use and lifecycle models for prototypes are described in Steve McConnell's books Rapid Development (Redmond, WA: Microsoft Press, 1996) and Code Complete (Redmond, WA: Microsoft Press, 1993). Another good reference is The Engineering of Software, by Dick Hamlet and Joe Maybee (Boston, MA: Addison-Wesley, 2001). Readers interested in the definition of prototypes in terms of the Software Engineering Institute's Capability Maturity Model (CMM) will find Pankaj Jalote's book CMM in Practice (Reading, MA: Addison-Wesley, 1999) very helpful.
Introducing Software Engineering
A .NET Prototype
The Photo Editor Application
GDI+ Graphics Extensions
Advanced GDI+ Operations
Dynamic Loading of Components
Accessing System Resources
Performance Optimization, Multithreading, and Profiling
Building the Web Application with ASP.NET
Security and Database Access