Entrambi i metodi di prototipazione sono usati quando c'è qualche aspetto del sistema che non capisci del tutto. Tuttavia, la differenza fondamentale è la metodologia del ciclo di vita che si utilizza. Con la prototipazione evolutiva, in genere capisci alcuni aspetti del sistema e non sei sicuro di altri. Nella prototipazione usa e getta, hai una generale mancanza di comprensione che devi completare prima di poter costruire un sistema pronto per la produzione.
Si noti che esistono molti tipi di prototipazione usa e getta e nessuno dei due è limitato all'intero sistema. Ad esempio, l'utilizzo di schizzi su carta o lavagna di un'interfaccia utente può essere considerato la prototipazione usa e getta. Sì, potresti passare attraverso diverse iterazioni e buttare via un progetto precedente, ma non utilizzerai nemmeno il prototipo finale nel sistema (non è fisicamente possibile, per uno).
Se sei interessato ad argomenti di ingegneria generale del software e all'ampiezza di SE, ti consiglio vivamente di prendere il libro di Sommerville che cito. È davvero buono per coprire l'ampiezza degli argomenti. Se sei più interessato ai modelli e alle metodologie di processo e al modo in cui puoi applicarli a vari progetti, consiglierei il libro McConnell: ha un intero capitolo dedicato alla prototipazione evolutiva e un altro capitolo dedicato alla prototipazione usa e getta.
Ho anche dato una rapida occhiata all'articolo di Wikipedia sulla prototipazione del software . Alcune parti sono un po 'strane (almeno sulla mia lettura veloce), ma non sembra esserci nulla con cui non sono assolutamente d'accordo. In parte è un po 'focalizzato su un aspetto particolare, ma non è effettivamente sbagliato che io veda. Preferisco le definizioni seguenti, ma potrebbe essere una lettura interessante su vari tipi di prototipazione.
Prototipazione evolutiva
Sviluppo esplorativo in cui l'obiettivo del processo è lavorare con il cliente per esplorare le loro esigenze e fornire un sistema finale. Lo sviluppo inizia con le parti del sistema che sono comprese. Il sistema si evolve aggiungendo nuove funzionalità proposte dal cliente. (Sommerville: Ingegneria del software, ottava edizione)
Il prototipo evolutivo è un modello del ciclo di vita in cui il sistema viene sviluppato in incrementi in modo da poter essere facilmente modificato in risposta al feedback dell'utente finale e del cliente. La maggior parte degli sforzi di prototipazione evolutiva inizia prototipando l'interfaccia utente e quindi evolvendo il sistema completo da quello, ma la prototipazione può iniziare con qualsiasi area ad alto rischio. Il prototipo evolutivo non è lo stesso del prototipo usa e getta e fare la scelta giusta se sviluppare un prototipo evolutivo o un prototipo usa e getta è la chiave del successo. Altre chiavi del successo includono l'utilizzo di sviluppatori esperti, la gestione delle aspettative di pianificazione e budget e la gestione dell'attività di prototipazione stessa. (McConnell: Rapid Development: Pianificazioni di software per domare Wild)
Prototipazione usa e getta:
La prototipazione usa e getta è dove l'obiettivo del processo di sviluppo evolutivo è comprendere i requisiti del cliente e quindi sviluppare una migliore definizione dei requisiti per il sistema. Il prototipo si concentra sulla sperimentazione delle esigenze del cliente che sono capite male. (Sommerville: Ingegneria del software, ottava edizione)
Con Throwaway Prototyping, il codice viene sviluppato per esplorare i fattori critici per il successo del sistema, quindi il codice viene eliminato. L'implementazione del prototipo utilizza linguaggi di programmazione o pratiche di sviluppo o entrambi molto più veloci della lingua e delle pratiche target. L'interfaccia utente è prototipata molto più comunemente rispetto a qualsiasi altra parte del sistema, ma anche altre parti di alcuni sistemi possono trarre vantaggio dalla prototipazione. Se utilizzata come ausilio per la specifica dei requisiti, la pratica del prototipo Throwaway può accelerare i progetti basati su modelli di ciclo di vita tradizionali, come i progetti DoD. Può essere avviato a livello gestionale o tecnico. (McConnell: Rapid Development: Pianificazioni di software per domare Wild)