Введение
Методология разработки
Итеративная и инкрементная разработка – это любая комбинация итеративного проектирования или итеративного метода и инкрементной модели сборки при разработке. Использование этого термина зародилось в разработке программного обеспечения, при этом длительное сочетание терминов «итеративный» и «инкрементный» широко рекомендовалось для крупных проектов разработки. Например, в DOD STD 2167 1985 года упоминается (в разделе 4.1.2): «В процессе разработки программного обеспечения одновременно может выполняться несколько итераций цикла разработки программного обеспечения» и «Этот процесс можно описать как подход «эволюционного приобретения» или «постепенной сборки»». В разработке программного обеспечения взаимосвязь между итерациями и инкрементами определяется общим процессом разработки программного обеспечения.
Iterative and incremental development is any combination of both iterative design or iterative method and incremental build model for development. Usage of the term began in software development, with a long standing combination of the two terms iterative and incremental having been widely suggested for large development efforts. For example, the 1985 DOD STD 2167
mentions (in section 4.1.2): "During software development, more than one iteration of the software development cycle may be in progress at the same time." and "This process may be described as an 'evolutionary acquisition' or 'incremental build' approach." In software, the relationship between iterations and increments is determined by the overall software development process.
Обзор
Основная идея этого метода заключается в разработке системы посредством повторяющихся циклов (итераций) и небольшими порциями (инкрементами), что позволяет разработчикам программного обеспечения использовать опыт, полученный при разработке более ранних частей или версий системы. Обучение происходит как в процессе разработки, так и в процессе использования системы, при этом ключевые этапы процесса, где это возможно, начинаются с простой реализации подмножества программных требований и итеративно улучшают развивающиеся версии до полной реализации системы. На каждой итерации вносятся изменения в конструкцию и добавляются новые функциональные возможности. Сама процедура состоит из этапа инициализации, этапа итерации и Списка управления проектом. Этап инициализации создает базовую версию системы. Цель этой первоначальной реализации – создать продукт, на который пользователь сможет дать обратную связь. Он должен демонстрировать ключевые аспекты проблемы и предлагать решение, достаточно простое для понимания и легкой реализации. Для управления процессом итераций создается список управления проектом, содержащий перечень всех задач, которые необходимо выполнить. Он включает в себя такие пункты, как новые функции для реализации и области перепроектирования существующего решения. Список управления проектом постоянно пересматривается по результатам фазы анализа. Итерация включает в себя перепроектирование и реализацию, которые должны быть простыми, понятными и модульными, обеспечивая возможность перепроектирования на данном этапе или добавления задачи в список управления проектом в будущем. Уровень детализации проектирования не определяется итеративным подходом. В проектах с упрощенным итеративным подходом код может служить основным источником документации системы; однако в критически важных итеративных проектах может использоваться формальный документ по проектированию программного обеспечения. Анализ итерации основан на отзывах пользователей и средствах анализа программы. Он включает в себя анализ структуры, модульности, удобства использования, надежности, эффективности и достижения целей. Список управления проектом изменяется с учетом результатов анализа.
Фазы
Инкрементальная разработка разделяет функциональность системы на инкременты (части). В каждом инкременте, часть функциональности реализуется посредством совместной работы различных специалистов, от определения требований до развертывания. Унифицированный процесс объединяет инкременты/итерации в фазы: инициация, уточнение, реализация и внедрение. Фаза инициации определяет объем проекта, требования (функциональные и нефункциональные) и риски на высоком уровне, но с достаточной детализацией для оценки трудозатрат. Фаза уточнения предоставляет рабочую архитектуру, которая снижает основные риски и удовлетворяет нефункциональным требованиям. Фаза реализации постепенно дополняет архитектуру производственным кодом, полученным в результате анализа, проектирования, разработки и тестирования функциональных требований. Фаза внедрения обеспечивает развертывание системы в производственной среде. Каждая фаза может быть разделена на одну или несколько итераций, которые обычно ограничены по времени, а не по набору функций. Архитекторы и аналитики работают на одну итерацию впереди разработчиков и тестировщиков, чтобы поддерживать их рабочий бэклог в актуальном состоянии.
Использование/история
Многие примеры раннего использования приведены в статье Крейга Лармана и Виктора Базили "Итеративная и инкрементная разработка: краткая история", одним из самых ранних из которых является проект NASA "Меркурий" 1960-х годов. Некоторые из этих инженеров "Меркурия" позже сформировали новое подразделение в IBM, где "еще одним ранним и впечатляющим примером крупного успеха IID стало ядро программного обеспечения космического шаттла NASA – основная система авионики, которую они создавали с 1977 по 1980 год. Команда применяла IID в серии из 17 итераций за 31 месяц, в среднем по восемь недель на итерацию. Их мотивацией для отказа от каскадной модели разработки было то, что требования к программе шаттла менялись в процессе разработки программного обеспечения". Кроме того, Агентство США по международному развитию (USAID) также использует итеративный и инкрементный подход к разработке в своем цикле планирования для проектирования, мониторинга, оценки, обучения и адаптации международных проектов развития, применяя подход к управлению проектами, ориентированный на включение стратегий сотрудничества, обучения и адаптации для итераций и адаптации планирования.
Контраст с развитием водопада
Основной причиной неудачи проектов разработки программного обеспечения является выбор модели, поэтому к этому следует подходить с большой осторожностью. Например, каскадная модель разработки (Waterfall) завершает создание всех проектных результатов по каждой дисциплине за один этап, прежде чем переходить к следующей дисциплине на последующем этапе. Бизнес-ценность предоставляется единовременно и только в самом конце проекта, в то время как в итеративном подходе возможен возврат к предыдущим этапам. Сравнение этих двух подходов позволяет выявить некоторые закономерности:
Вовлечение пользователя: В каскадной модели пользователь участвует в двух стадиях – определение требований и приемочное тестирование, а также, возможно, в создании учебных материалов. В то время как в инкрементной модели клиент вовлечен на каждом этапе. Изменчивость: Программное обеспечение предоставляется пользователю только после завершения этапа сборки в жизненном цикле, для проведения приемочного тестирования. С другой стороны, каждый инкремент предоставляется пользователю, и после его одобрения разработчик может переходить к следующему модулю. Человеческие ресурсы: В инкрементной модели потенциально требуется меньше сотрудников, чем в каскадной модели. Ограничение по времени: Работоспособный продукт поставляется через несколько месяцев, в то время как в инкрементной модели продукт предоставляется пользователю в течение нескольких недель. Размер проекта: Каскадная модель не подходит для небольших проектов, в то время как инкрементная модель подходит как для небольших, так и для крупных проектов.
Использование в аппаратных средствах и встроенных системах
В то время как термин "итеративная и инкрементальная разработка" возник в индустрии программного обеспечения, многие проекты по разработке аппаратного обеспечения и встроенного ПО используют итеративные и инкрементальные методы. Примеры этого можно встретить в различных отраслях. Одной из областей, которая в последнее время претерпела значительные изменения в этой связи, является космическая отрасль, где появились существенные новые конкурентные силы, обусловленные более быстрыми и масштабными технологическими инновациями, вызванными созданием частных компаний, занимающихся космическими запусками. Эти компании, такие как SpaceX и Rocket Lab, в течение последнего десятилетия предоставляют коммерческие услуги по выведению на орбиту, что ранее удавалось только шести странам. Новые инновации в подходах к разработке технологий, ценообразовании и спектре предлагаемых услуг – включая возможность, появившуюся лишь с 2016 года, летать в космос на ранее использованной (многоразовой) ступени ракеты-носителя – еще больше снижают стоимость доступа в космос. По мере изменения отрасли, другие участники рынка также начинают менять свои долгосрочные методы разработки, в том числе при работе с государственными организациями. Например, крупный американский поставщик услуг по запуску United Launch Alliance (ULA) начал в 2015 году десятилетний проект по реструктуризации своего бизнеса, сократив количество типов ракет-носителей с двух до одного, используя итеративный и инкрементальный подход для создания частично многоразовой и значительно более дешевой системы запуска в течение следующего десятилетия.