На любом собесе вас будут спрашивать и про этапы, и про парадигмы, и про конкретные модели жизненных циклов – если вы не знаете этих тем, то вы не представляете, как вообще ведется разработка. Кроме того, основная методология сейчас – гибкая разработка, и вам нужно знать ее конкретные модели, потому что вы будете использовать их в работе.
Ниже мы даем вам структурированный материал о жизненном цикле ПО с примерами – этих знаний будет достаточно, чтобы уверенно отвечать на собеседовании.
С общим определением цикла разработки программных продуктов мы уже познакомились, здесь расскажем, зачем он нужен. Причина, как всегда, кроется в деньгах. Когда заказчик придумывает идею, которая должна принести деньги, ему нужно посчитать потенциальную прибыль. А чтобы посчитать ее, ему нужно знать, сколько он потратит на разработку. Чтобы посчитать ее, он приходит в отдел разработки и говорит: «Хочу сделать лучший в мире калькулятор и выпустить его на смартфоны. Сколько с меня?». И теперь уже отделу разработки нужно считать, сколько они возьмут, а для этого им нужно разбить весь процесс разработки на конкретные шаги и посчитать затраты на каждый шаг – получаем конкретные изолированные этапы в стадиях жизненного цикла продукта.
Но просто выделить этапы и посчитать деньги – недостаточно. Разработка – это динамичный процесс взаимодействия многих людей. На ранних этапах развития компьютеров действительно можно было накидать простенькую программу и отдать ее заказчику. Сейчас процесс стал намного более сложным: нужно где-то программу развернуть; нужно посмотреть, как она зайдет пользователям; нужно внести изменения и отловить баги; наконец, нужно улучшать приложение, если оно выходит в плюс. Чтобы учесть все эти факторы, нужно что-то более серьезное, чем этапы жизненного цикла.
Этим более серьезным является парадигма. Парадигма – это набор абстрактных мыслей о чем-либо.
Первая из появившихся парадигм разработки – каскадная модель жизненного цикла. Основная идея – берем все требования заказчика, делаем их, отдаем результат, повторяем при необходимости. Очень похоже на то, что было на заре разработки ПО. Из этой парадигмы вышли модели «Водопад» и «Водоворот».
Со временем, когда рынок стал активнее, у каскадной парадигмы обнаружилась проблема: ее методы не умеют подстраиваться под динамику рынка. Microsoft запустила в разработку Windows 2000, 3 года делала ее из беты в релиз, когда Windows 2000 вышла – оказалось, что она никому уже не нужна, 3 года работы потрачены впустую. Чтобы такого не повторять, придумали новую парадигму: итеративная разработка. Основная мысль: собираем все требования заказчика и режем их на небольшие финализированные блоки. Сделали блок – получили какой-то минимальный продукт – выбросили его на рынок. Пользователям понравилось – взяли еще один блок функциональности, добавили в уже работающее приложение, снова выкинули на рынок. Все еще приносит прибыль – повторяем.
Если из каскадной парадигмы разработки вышло в лучшем случае 3-4 метода, то из итеративной парадигмы вышел десяток минимум. Есть еще пара методов на стыке методологий – спиральная модель, например – но основным циклом создания программного обеспечения считается Scrum, который – полностью итеративный. То есть история показала, что итерации – лучше для бизнеса, чем каскадная разработка.
Итак, промежуточный вывод: жизненный цикл ПО – это и стадии существования, и методы разработки программного обеспечения. Стадии лежат в его основе, а переходы между стадиями – это циклы разработки.
Если пока не очень понятно – ниже вы найдете примеры, которые все расставят по местам.
Чтобы разобраться в моделях жизненного цикла программного обеспечения, нам сначала нужно выделить стадии разработки. Вот они:
Предположим, есть заказчик, который хочет создать калькулятор и выпустить его на смартфоны. Этапы жизненного цикла:
Идея: делаем сразу весь функционал по ТЗ, смотрим на результат. Из примера с калькулятором: сразу разрабатываем все 3 окошка, переключатель и логику, выпускаем на рынок.
Плюсы парадигмы | Минусы парадигмы |
Заказчик сразу знает, сколько надо потратить на весь проект | Нулевая гибкость |
Если нужно добавить новый функционал в ТЗ – сначала надо подождать, пока закончится вся разработка по текущему ТЗ | |
Проект может потерять актуальность к моменту выхода на рынок |
Основные модели разработки: водопад, водоворот, V-образная.
Идея: делаем минимально жизнеспособный продукт, выпускаем на рынок, пошагово дорабатываем. Из примера с калькулятором: делаем два окошка ввода информации без переключателя и окошка вывода. Выпускаем в Google Play. Пользователям понравилось? Добавляем переключатель и выпускаем в App Store. Снова много скачиваний? Добавляем окошко вывода результата.
Плюсы парадигмы | Минусы парадигмы |
Быстрый результат | Затраты на финальный продукт – зачастую непредсказуемые |
Заказчик не переплачивает | Очень быстрая разработка – команда устает |
Можно быстро проверять бизнес-теории |
Основные модели разработки: Scrum, Kanban, Extreme Programming.
Есть еще парадигма, которую никто толком не описывает, но которая витает в воздухе. Она не имеет четкого названия, но неразрывно связана с циклом информационных разработок. Ее суть: смешение принципов каскадной и гибкой парадигмы в разных пропорциях. Из примера с калькулятором: на первом шаге создаем приложение со всеми окошками, логикой и действием «+», выпускаем на рынок; проводим аудит бизнеса, добавляем «-», выпускаем на рынок; …
Плюсы парадигмы | Минусы парадигмы |
Можно рассчитать приблизительную цену | За счет большого количества шагов цена на финальный продукт всегда получается высокой |
Относительно гибкая разработка | Довольно низкий темп разработки |
Основная модель разработки: спиральный цикл.
При этой разработке ТЗ выполняется полностью, только после этого продукт уходит на рынок. Одна из первых моделей, получивших широкое распространение.
Преимущества:
Недостатки:
Модификация предыдущей модели. Если на каком-то шаге разработки стало понятно, что результат будет так себе – команда откатывается на предыдущий шаг и пытается все исправить. Частично решает проблемы водопада, но все еще недостаточно, почему – объясним в разделе «Гибкие методологии разработки».
Дальнейшее развитие водопада в сторону гибкости. Появились приемки и проверки, которые позволяют быстрее и безболезненнее откатиться на предыдущий этап, если поняли, что что-то идет не так.
Преимущества:
Недостатки:
Спиральную модель можно называть переходным вариантом между каскадной и гибкой методологией – именно дальнейшее развития спиральной структуры жизненного цикла привело к появлению Agile. При использовании спиральной модели весь цикл жизни делится на 4 фазы: определение задач; оценка потенциального результата; создание продукта; планирование следующей итерации. И эти фазы следуют одна за одной: придумали минимально жизнеспособный продукт, прикинули его выгоду, разработали, построили дальнейшие планы; придумали новый функционал, прикинули его выгоду, разработали и внедрили, построили дальнейшие планы; …
Преимущества:
Недостатки:
А теперь мы детально рассмотрим гибкую методологию и объясним, почему каскадные модели ей уступили. Agile-методология базируется на 12 принципах:
Из этих принципов мы получаем картину идеальной методологии разработки: высокомотивированная самоорганизующаяся команда делает быстрые релизы и постоянно совершенствует техническую и организационную часть как путем самоаудита, так и путем постоянного общения с заказчиком, что делает последнего крайне довольным (= вернется опять и заплатит больше денег). Звучит очень хорошо, но при классическом цикле это невозможно – каскадная модель ставит строгое соблюдение ТЗ выше, чем технический прогресс и потребности рынка, от чего страдают и заказчики (проверка теорий обходится дорого), и разработчики (медленный прогресс и далекий результат, что вызывает выгорание и снижает заинтересованность), и пользователи (новые версии выходят редко). Что делать? Взять понятия жизненного цикла и пересмотреть их с точки зрения этих 12 принципов.
Так и сделали. Первым результатом стал Extreme Programming, затем «подтянулись» Scrum и Kanban (последний эволюционировал из Lean).
Extreme Programming реализовывает основные принципы Agile «в лоб». В основе лежат короткие (до нескольких недель) циклы разработки, все они описаны в расписании релизов. На каждом цикле делается одна конкретная фича (иногда – несколько мелких), после разработки фича тут же уходит в тестирование. Глобально разработка фичи контролируется и корректируется на ежедневных митингах (созвонах), локально разработка контролируется за счет пар программистов – один смотрит, что там накодил другой (эта практика не особо прижилась). Наличие ежедневных созвонов, быстрых релизов, цикличной разработки в целом – все это соответствует принципам Agile.
Преимущества:
Недостатки:
Scrum отталкивается от спринтов – коротких (2-8 недель) промежутков, на которые команда ставит себе определенные задачи. Задачи берутся из бэклога – списка задач к выполнению. Вне зависимости от результатов спринта (выполнили задачи на спринт или нет) лидер команды проводит анализ результатов спринта и при необходимости вносит изменения в работу.
Но Scrum – это не столько про разработку, сколько про команду. В «правильных» Scrum-командах есть специальный Scrum-менеджер, который занимается только вопросами соблюдения методологии. Он же организует регулярные митинги, следит за полнотой коммуникации внутри команды и предоставляет инвентарь/площадку для специальных Scrum-событий – planning poker, например, условно-карточной игры, с помощью которой команда определяет сложность той или иной фичи. В конце прошлого десятилетия вышло большое мета-исследование по Scrum, в котором есть такие выводы:
Преимущества методологии:
Недостатки:
Kanban строится вокруг досок (Trello, Jira) и изолированных задач. Здесь тоже есть бэклог, из которого достаются фичи для реализации. Каждая фича затем делится на простые задачи, которые выкладываются на доску.
В изначальном Kanban любой разработчик мог брать понравившуюся ему задачу в работу, но иногда этой практикой пренебрегают, и Project Manager сам назначает ответственных.
Kanban появился как развитие Lean и наследует его основную фишку. Lean – это концепция управления производством, основанная на минимизации бесполезных действий – так называемое «бережливое производство». Достигается оно за счет предварительного планирования бэклога – если он был хорошо составлен, все необходимые действия будут в него записаны, и лишних задач не будет. Это хорошо и для бизнеса (просто рассчитывать сроки/суммы), и для команды (все уверены, что их работу не выкинут в мусорку).
Преимущества:
Недостатки:
Если смотреть на теорию, то Agile – лучший вариант в моделях SDLC, а каскадная разработка должна уйти в прошлое. В реальности же каскадные методы живут и процветают, хотя и уступили немалую часть рынка Agile-методу. Почему они живы?
Дело в том, что идеального метода разработки не существует. Да, Agile очень хорош для бизнеса с нестабильным рынком, но вы никогда не сможете построить разработку новой версии Windows по Agile – на середине разработки все ваши отлаженные процессы рухнут под напором восьмичасовых созвонов, у разработчиков не останется времени ни на что другое. Выбор правильной методологии разработки (в том числе и Waterfall при необходимости) – это решение, зависящее от десятков факторов, и не все из них говорят в пользу Agile.
Еще один момент – в большинстве случаев команды используют несколько методологий разработки. Одна команда использует Scrum, но непосредственно внутри спринта использует Kanban – разработчики сами берут себе карточки из доступных, а после спринта PM анализирует результативность. Другая команда использует Kanban, но внутри него использует Waterfall – в каждой карточке описаны большие куски фич или целые фичи, которые могут реализовываться сразу несколькими разработчиками. Поэтому запомните главное: методологии для разработчиков, а не разработчики для методологий.
Если какая-то смесь будет идеально работать для вашей команды – нужно отбросить принципы и использовать смесь.
Для программиста методология – это важная информация; для прождект менеджера методология – это его хлеб. Если вам нужно досконально знать методологии и сферы их применения, вам стоит присмотреться к платным курсам, на которых вы получите необходимую практику:
Тезисно: