Наверное, всякий, кто когда-либо пытался осознать специфику различных подходов к разработке программного обеспечения, задавался вопросами: в чём отличие между итеративной и инкрементальной разработкой? Agile – итеративный? RUP – инкрементальный?
Под катом очередное рассуждение на эту тему и заочный спор с Карлом Вигерсом.
В 3-м издании книги Карла Вигерcа «Разработка требований к программному обеспечению» есть иллюстрация, демонстрирующая распределение усилий по работе с требованиями на протяжении проектов с разным жизненным циклом разработки (SDLC).
Итак, картинка разделяет Agile и итеративные подходы. Корректно ли это?
Для начала определимся с терминами.
- Итеративность – повторение операций в целях переработки результатов предыдущего этапа.
- Инкрементирование – приращение результатов предыдущего этапа.
Википедия подсказывает:
«Гибкая методология разработки (англ. Agile software development, agile-методы) — серия подходов к разработке программного обеспечения, ориентированных на использование итеративной разработки…»
Значит, если в рамках спринта в гибком Scrum’е или итерации в RUP Вы перерабатываете результаты предыдущего этапа и одновременно реализуете новые части продукта, Ваша разработка и итеративна, и инкрементальна.
Ниже изображение, поясняющее разницу между итеративной и инкрементальной разработкой на примере создания портрета Карла Вигерса.
Вывод
Разделять гибкие и итеративные подходы некорректно. Вигерс, ты не прав!
Автор: IvanGolubev