Сегодня хочу поговорить о методологиях разработки программного обеспечения.
Поварившись немного в команде начинаешь мыслить шире и понимать важность принципов построения рабочего процесса.
Отмечу, даже на собеседованиях встречаются вопросы о нашей теме. Краткая выжимка и описание основных методолгий:
1. "Waterfall Model" - (Водопад или каскадная модель) Подразумевает последовательное прохождение стадий: проектирования, дизайна, кодирования, тестирования, поддержки, каждая из которых должна завершиться полностью до начала следующей. Стоимость внесения изменений высока, так как для ее инициализации приходится ждать завершения всего проекта. Применяют в проектах, где важно не допустить риск ошибки (медицина, авиостроительство и т.п.)
2. "V-модель"
- применима к системам, которым особенно важно бесперебойное функционирование. Модель направлена на тщательную проверку и тестирование продукта, находящегося уже на первоначальных стадиях проектирования. Стадия тестирования проводится одновременно с соответствующей стадией разработки, например, во время кодирования пишутся модульные тесты.
3. "Incremental Model" (инкрементальная модель)
В этой модели полные требования к системе делятся на поэтапные сборки ПО. Имеют место несколько циклов разработки, и вместе они составляют жизненный цикл "мульти-водопад" . Цикл разделен на более мелкие легко создаваемые модули. Каждый модуль проходит через фазы определения требований, проектирования, кодирования, внедрения и тестирования. Процедура разработки по инкрементной модели предполагает выпуск на первом большом этапе продукта в базовой функциональности, а затем уже последовательное добавление новых функций. Процесс продолжается до тех пор, пока не будет создана полная система.
4. "RAD Model" (rapid application development model или быстрая разработка приложений)
RAD-модель — разновидность инкрементной модели. В RAD-модели компоненты или функции разрабатываются несколькими высококвалифицированными командами параллельно, будто несколько мини-проектов. Временные рамки одного цикла жестко ограничены. Созданные модули затем интегрируются в один рабочий прототип. Синергия позволяет очень быстро предоставить клиенту для обозрения что-то рабочее с целью получения обратной связи и внесения изменений.
5. "Agile Model" (гибкая методология разработки)
В гибкой методологии разработки после каждой итерации заказчик может наблюдать результат и понимать, удовлетворяет он его или нет. Это одно из преимуществ гибкой модели. К ее недостаткам относят то, что из-за отсутствия конкретных формулировок результатов сложно оценить трудозатраты и стоимость, требуемые на разработку.
В основе такого типа лежит "Scrum" набор принципов, ценностей, ритуалов. На которых строится процесс Scrum-разработки, позволяющий в жёстко фиксированные временные итерации(sprints) предоставлять пользователю готовый продукт. Непродолжительные ежедневные встречи — "StandUp" и регулярно повторяющиеся собрания (раз в неделю, раз в две недели или раз в месяц), которые называются "Sprint Planning Meeting". Строго фиксированная небольшая длительность спринта придаёт процессу разработки предсказуемость и гибкость.
6. "Iterative Model" (итеративная или итерационная модель)
Итерационная модель жизненного цикла не требует для начала полной спецификации требований. Вместо этого, создание начинается с реализации части функционала, становящейся базой для определения дальнейших требований. Этот процесс повторяется. Версия может быть неидеальна, главное, чтобы она работала. Понимая конечную цель, мы стремимся к ней так, чтобы каждый шаг был результативен, а каждая версия — работоспособна.
7. "Spiral Model" (спиральная модель)
"Спиральная модель" похожа на инкрементную, но с акцентом на анализ рисков. Она хорошо работает для решения критически важных бизнес-задач, когда неудача несовместима с деятельностью компании, в условиях выпуска новых продуктовых линеек, при необходимости научных исследований.