Оба метода прототипирования используются, когда есть какой-то аспект системы, который вы не совсем понимаете. Однако ключевое отличие заключается в методологии жизненного цикла, которую вы используете. С помощью эволюционного прототипирования вы обычно понимаете некоторые аспекты системы и не уверены в других. В одноразовых прототипах у вас, как правило, отсутствует понимание, которое вам необходимо выполнить, прежде чем вы сможете построить готовую к работе систему.
Обратите внимание, что существует много видов одноразовых прототипов, и ни один из них не ограничен всей системой. Например, использование эскизов пользовательского интерфейса на бумаге или доске можно рассматривать как одноразовое создание прототипа. Да, вы можете пройти несколько итераций и отбросить предыдущий дизайн, но вы также не будете использовать окончательный прототип в системе (физически это невозможно, например).
Если вы заинтересованы в общих темах разработки программного обеспечения и широте SE, я настоятельно рекомендую взять книгу Соммервилля, которую я цитирую. Это действительно хорошо для освещения широты тем. Если вас больше интересуют модели процессов и методологии, а также способы их применения в различных проектах, я бы порекомендовал книгу Макконнелла - в ней есть целая глава, посвященная эволюционному прототипированию, и еще одна глава, посвященная одноразовому прототипированию.
Я также быстро взглянул на статью в Википедии о прототипировании программного обеспечения . Некоторые его части немного странные (по крайней мере, по моему быстрому прочтению), но, похоже, я не согласен ни с чем. Некоторые из них немного сосредоточены на одном конкретном аспекте, но на самом деле это не так, как я вижу. Я предпочитаю определения ниже, но это может быть интересное прочтение по различным типам прототипирования.
Эволюционное прототипирование
Исследовательская разработка, целью которой является работа с заказчиком для изучения его требований и создания окончательной системы. Разработка начинается с частей системы, которые понятны. Система развивается путем добавления новых функций, предлагаемых клиентом. (Sommerville: разработка программного обеспечения, 8-е издание)
Эволюционное прототипирование - это модель жизненного цикла, в которой система развивается поэтапно, чтобы ее можно было легко изменять в ответ на отзывы конечных пользователей и клиентов. Большинство усилий по эволюционному прототипированию начинаются с создания прототипа пользовательского интерфейса, а затем с его помощью дорабатываются законченные системы, но создание прототипов может начинаться с любой области высокого риска. Эволюционное прототипирование не то же самое, что Throwaway Prototyping, и правильный выбор в отношении того, разрабатывать ли эволюционный прототип или одноразовый прототип, является одним из ключей к успеху. Другие ключи к успеху включают использование опытных разработчиков, управление расписанием и ожиданиями бюджета, а также управление самой деятельностью по созданию прототипов. (Макконнелл: Быстрая разработка: Укрощение диких программных расписаний)
Throwaway Прототипирование:
В процессе быстрого прототипирования цель эволюционного процесса разработки состоит в том, чтобы понять требования заказчика и, следовательно, разработать более точное определение требований для системы. Прототип концентрируется на экспериментах с плохо понятыми требованиями заказчика. (Sommerville: разработка программного обеспечения, 8-е издание)
С Throwaway Prototyping код разрабатывается для изучения факторов, важных для успеха системы, а затем этот код выбрасывается. Реализация прототипа использует языки программирования или методы разработки или оба, которые намного быстрее, чем целевой язык и практики. Пользовательский интерфейс прототипируется гораздо чаще, чем любая другая часть системы, но другие части некоторых систем также могут выиграть от прототипирования. При использовании в качестве вспомогательного средства для определения требований практика Throwaway Prototyping может ускорять проекты, основанные на традиционных моделях жизненного цикла, таких как проекты DoD. Он может быть инициирован как на уровне управления, так и на техническом уровне. (Макконнелл: Быстрая разработка: Укрощение диких программных расписаний)