Obie metody prototypowania są stosowane, gdy istnieje jakiś aspekt systemu, którego nie do końca rozumiesz. Jednak kluczową różnicą jest stosowana metodologia cyklu życia. Dzięki ewolucyjnemu prototypowaniu zazwyczaj rozumiesz niektóre aspekty systemu i nie jesteś pewien innych. W przypadku prototypowania typu „out-out” ogólnie nie rozumiesz, co musisz zrobić, zanim zbudujesz system gotowy do produkcji.
Zauważ, że istnieje wiele rodzajów prototypowania, które nie są ograniczone do całego systemu. Na przykład użycie szkiców papierowych lub tablic interfejsu użytkownika można uznać za prototypowanie. Tak, możesz przejść przez kilka iteracji i odrzucić poprzedni projekt, ale nie użyjesz również ostatecznego prototypu w systemie (na przykład fizycznie nie jest to możliwe).
Jeśli interesujesz się ogólnymi zagadnieniami inżynierii oprogramowania i szerokością SE, gorąco polecam wybranie cytowanej przeze mnie książki Sommerville. To naprawdę dobre, aby omówić szeroki zakres tematów. Jeśli bardziej interesują Cię modele procesów i metodologie oraz to, jak możesz je zastosować w różnych projektach, polecam książkę McConnell - zawiera ona cały rozdział poświęcony prototypowaniu ewolucyjnemu i kolejny rozdział poświęcony prototypowaniu.
Rzuciłem też okiem na artykuł z Wikipedii na temat prototypowania oprogramowania . Niektóre z nich są trochę dziwne (przynajmniej po mojej szybkiej lekturze), ale wydaje się, że nie ma niczego, z czym po prostu się nie zgadzam. Niektóre z nich są trochę skoncentrowane na jednym konkretnym aspekcie, ale nie jest to w rzeczywistości mylne. Wolę poniższe definicje, ale może to być ciekawa lektura na temat różnych rodzajów prototypowania.
Ewolucyjne prototypowanie
Rozwój eksploracyjny, w którym celem procesu jest współpraca z klientem w celu zbadania jego wymagań i dostarczenia ostatecznego systemu. Rozwój rozpoczyna się od zrozumiałych części systemu. System ewoluuje poprzez dodanie nowych funkcji zaproponowanych przez klienta. (Sommerville: Software Engineering, wydanie 8)
Ewolucyjne prototypowanie to model cyklu życia, w którym system jest opracowywany przyrostowo, dzięki czemu można go łatwo modyfikować w odpowiedzi na opinie użytkowników końcowych i klientów. Większość ewolucyjnych działań związanych z prototypowaniem rozpoczyna się od prototypowania interfejsu użytkownika, a następnie ewolucji gotowego systemu, ale prototypowanie można rozpocząć od dowolnego obszaru wysokiego ryzyka. Ewolucyjne prototypowanie to nie to samo, co prototypowanie na odległość, a dokonanie właściwego wyboru, czy opracować prototyp ewolucyjny, czy prototyp, jest jednym z kluczy do sukcesu. Inne klucze do sukcesu obejmują korzystanie z doświadczonych programistów, zarządzanie harmonogramem i oczekiwaniami budżetowymi oraz zarządzanie samym działaniem związanym z prototypowaniem. (McConnell: Rapid Development: Taming Wild Software Schedules)
Wyrzucanie prototypów:
Prototypowanie bezzwrotne polega na tym, że celem ewolucyjnego procesu rozwoju jest zrozumienie wymagań klienta, a tym samym opracowanie lepszej definicji wymagań dla systemu. Prototyp koncentruje się na eksperymentowaniu z słabo poznanymi wymaganiami klienta. (Sommerville: Software Engineering, wydanie 8)
Dzięki prototypowaniu Throwaway opracowywany jest kod w celu zbadania czynników krytycznych dla sukcesu systemu, a następnie kod ten jest wyrzucany. Implementacja prototypowania wykorzystuje języki programowania lub praktyki programistyczne lub oba, które są znacznie szybsze niż język docelowy i praktyki. Interfejs użytkownika jest prototypowany znacznie częściej niż jakakolwiek inna część systemu, ale inne części niektórych systemów również mogą czerpać korzyści z prototypowania. Praktyka Throwaway Prototyping stosowana jako pomoc w określaniu wymagań może przyspieszyć projekty oparte na tradycyjnych modelach cyklu życia, takie jak projekty DoD. Może być inicjowany na poziomie zarządzania lub technicznym. (McConnell: Rapid Development: Taming Wild Software Schedules)