Prototypes facilitate the requirements phase for any type of software if the requirements have changed from the previous version, which is usually the case. Prototypes can demonstrate system scenarios to the affected parties as a way to (
1
) collect criticisms and feedback for updated requirements, (
2
) detect deviations from users' expectations early, (
3
) trace the evolution of the requirements, (
4
) improve the communication and integration of the users and the development personnel, and (
5
) provide early warning of mismatches between proposed software architectures and the conceptual structure of requirements.
The benefits of prototyping are widely accepted. The main incentive for using prototypes is economic—scale models and prototype versions of most systems are much less expensive to build than are the final versions. Prototypes should therefore be used to evaluate proposed systems if acceptance by the customer or the feasibility of development is in doubt. The need for software prototyping has become more urgent as systems being developed have grown more complex, are more likely to have requirements errors, and are more expensive to implement. Particularly, in real‐time applications where severe time constraints impose more challenges, the use of prototypes helps to describe the requirements in a clear, precise, consistent and executable format.
Prototyping is a class of software development methods that use software prototypes of the envisioned system. A prototype is an executable model of a proposed system that accurately reflects a chosen subset of its properties, such as display formats, computed results, or response times. Prototypes are useful for formulating and validating requirements, resolving technical design issues, and supporting computer aided design of both software and hardware components of proposed systems. Rapid prototyping refers to the capability to create a prototype with significantly less effort than it takes to produce an implementation for operational use. Rapid prototyping usually implies some degree of automated code generation.