Iteration – повторение. Итеративный подход — выполнение всех типов работ параллельно в ходе фиксированных коротких интервалов времени – итераций. При создании ПО в ходе итерации одновременно идут:
уточнение требований,
разработка ПО и его интеграция,
тестирование (или сначала подготовка к нему).
Часто противопоставляется водопадному процессу (каскадному, waterfall). Каждую итерацию можно считать мини-проектом, в конце которого нужно получить готовый результат.
Популярные итеративные подходы
Scrum (официальный сайт). Итерация называется Sprint
Scrum – спринт 1 месяц или меньше. Стабильная длительность.
Extreme Programming – итерация от 1 до 3 недель, длина фиксируется на весь проект.
Rational Unified Process
При большей длительности итерации:
цель может потерять актуальность,
повышается комплексность: связанные работы, дефекты, интеграции, недоработки;
возрастают риски/неопределенности. (См. также "Конус неопределенности при оценке и планировании".)
Преимущества итеративного подхода
При правильном использовании позволяет применять подход Risks first (Fail fast), в ходе которого критические риски проверяются на ранних итерациях, и это приводит к снижению рисков, а значит и затрат на их митигацию и устранение. Риски сделать не то или не так ограничиваются стоимостью и трудозатратами одной итерации.
Частое получение обратной связи от заказчиков и других заинетресованных лиц. Проверка того, что создается именно то, что нужно. Нивелирование симптомов "Я точно знаю, чего хочу... Ой, нет, не этого" и "Да, это то, что написано в ТЗ, но не то, что мне нужно". Повышаются шансы создать продукт, нужный клиентам/пользователям (CustDev).
Возможность изменения приоритетов (последовательности реализации) каждую итерацию. Проще адаптация к изменениям планов, решений, требований, технологий.
Возможна фокусировка на самом важном аспекте проекта в каждой итерации.
Непрерывное тестирование всех видов: и локальное, и интеграционное, и пользовательское, и др.
Как следствие – повышение качества в целом.
Более равномерная загрузка участников проекта.
Стабильная мотивация, потому что окончание каждой итерации = маленький deadline.
Применение опыта предыдущих циклов. Результаты предыдущих итераций становятся основой для оценки и планирования следующих итераций. Опора на фактическую информацию повышает точность.
Тредозатраты равномернее распределяются по всему проекту.
Проще понимать текущий статус проекта, особенно если процесс итеративный и инкрементальный.
Ограничения итеративного подхода
Бывает сложно преодолеть барьер: "Да разве можно начитать разработку – еще ведь не все продумано и понятно."