Итеративная и инкрементная разработка — это любая комбинация итеративного проектирования или итеративного метода и модели инкрементной сборки для разработки .
Использование этого термина началось в разработке программного обеспечения , причем давняя комбинация двух терминов «итеративный » и «инкрементный» [1] широко предлагалась для крупных проектов разработки. Например, в DOD-STD-2167 [2] 1985 года упоминается (в разделе 4.1.2): «Во время разработки программного обеспечения одновременно может выполняться более одной итерации цикла разработки программного обеспечения». и «Этот процесс можно охарактеризовать как подход «эволюционного приобретения» или «поэтапного построения». В программном обеспечении взаимосвязь между итерациями и приращениями определяется общим процессом разработки программного обеспечения .
Основная идея этого метода состоит в том, чтобы разрабатывать систему посредством повторяющихся циклов (итеративный) и небольшими порциями (поэтапный), что позволяет разработчикам программного обеспечения использовать преимущества того, что было изучено во время разработки более ранних частей или версий системы. Обучение происходит как при разработке, так и при использовании системы, где возможные ключевые этапы процесса начинаются с простой реализации подмножества требований к программному обеспечению и итеративно совершенствуются развивающиеся версии до тех пор, пока не будет реализована полная система. На каждой итерации вносятся изменения в конструкцию и добавляются новые функциональные возможности. [3]
Сама процедура состоит из шага инициализации, шага итерации и списка управления проектом. На этапе инициализации создается базовая версия системы. Целью этой первоначальной реализации является создание продукта, на который пользователь сможет отреагировать. Он должен предлагать выборку ключевых аспектов проблемы и предлагать решение, достаточно простое для понимания и легкого внедрения. Для управления процессом итерации создается контрольный список проекта, содержащий запись всех задач, которые необходимо выполнить. Он включает в себя такие элементы, как новые функции, которые необходимо реализовать, и области модернизации существующего решения. Контрольный список постоянно пересматривается по результатам этапа анализа.
Итерация включает в себя редизайн и реализацию, которая должна быть простой, понятной и модульной, поддерживая редизайн на этом этапе или в качестве будущей задачи, добавляемой в контрольный список проекта. [ необходимы пояснения ] Уровень детализации проекта не определяется итеративным подходом. В легком итеративном проекте код может представлять собой основной источник документации системы; однако в критически важном итеративном проекте может использоваться формальный документ проектирования программного обеспечения . Анализ итерации основан на отзывах пользователей и доступных средствах анализа программы. Он предполагает анализ структуры, модульности, удобства использования , надежности, эффективности и достижения целей. Контрольный список проекта модифицируется с учетом результатов анализа.
Поэтапная разработка разбивает функциональность системы на инкременты (части). В каждом приращении часть функциональности реализуется посредством междисциплинарной работы, от требований до развертывания . Унифицированный процесс группирует приращения/итерации по этапам: начало, разработка, построение и переход.
Каждый из этапов может быть разделен на одну или несколько итераций, которые обычно ограничены по времени, а не по функциям. Архитекторы и аналитики работают на одну итерацию раньше разработчиков и тестировщиков, чтобы сохранить заполненность своего журнала невыполненных рабочих продуктов.
Многие примеры раннего использования представлены в статье Крейга Лармана и Виктора Бэзили «Итеративное и постепенное развитие: краткая история» [4] , одним из первых из которых был проект НАСА «Меркурий» 1960-х годов .
Некоторые из этих инженеров Mercury позже сформировали новое подразделение в IBM , где «еще одним ранним и ярким примером крупного успеха IID [было] самое сердце программного обеспечения космического челнока НАСА — основная система программного обеспечения для авионики, которую [они] создавали с 1977 года. по 1980 год. Команда применила IID в серии из 17 итераций в течение 31 месяца, в среднем около восьми недель на итерацию. Их мотивацией избежать жизненного цикла водопада было то, что требования к программе-челноку менялись в процессе разработки программного обеспечения». [4]
Некоторые организации, такие как Министерство обороны США, отдают предпочтение итеративным методологиям, начиная с MIL-STD-498 , «явно поощряющего эволюционное приобретение и IID».
Инструкция Министерства обороны США 5000.2, выпущенная в 2000 году, явно отдает предпочтение IID:
Есть два подхода: эволюционный и одношаговый [водопад] к достижению полной мощности. Предпочтителен эволюционный подход. … [В этом] подходе конечные возможности, предоставляемые пользователю, делятся на два или более блоков с возрастающим приращением возможностей... разработка программного обеспечения должна следовать итеративному спиральному процессу разработки, в котором постоянно расширяющиеся версии программного обеспечения основаны на обучении на основе опыта. более раннее развитие. Это также можно делать поэтапно.
Недавние редакции DoDI 5000.02 больше не относятся к «спиральной разработке», но пропагандируют общий подход в качестве основы для программ разработки/закупок с интенсивным использованием программного обеспечения. [5] Кроме того, Агентство США по международному развитию (USAID) также использует итеративный и поэтапный подход к своему программному циклу для разработки, мониторинга, оценки, изучения и адаптации международных проектов развития с подходом управления проектами, который фокусируется на включении стратегии сотрудничества, обучения и адаптации для повторения и адаптации программ. [6]
Основной причиной неудач проектов разработки программного обеспечения является выбор модели, поэтому к нему следует подходить с большой осторожностью. [ неясно ] [7]
Например, парадигма разработки «Водопад» завершает работу над проектом по каждой дисциплине за один шаг, а затем переходит к следующей дисциплине на следующем этапе. Ценность для бизнеса достигается сразу и только в самом конце проекта, тогда как возврат назад [ необходимы пояснения ] возможен при итеративном подходе. Сравнивая два подхода, начинают проявляться некоторые закономерности :
Рекомендации по внедрению и анализу программного обеспечения включают: [ нужна ссылка ]
Хотя термин «итеративная и инкрементная разработка» появился в индустрии программного обеспечения, во многих разработках аппаратного и встроенного программного обеспечения используются итеративные и инкрементные методы.
Примеры этого можно увидеть в ряде отраслей. Одним из секторов, на который в последнее время существенно повлиял этот сдвиг в мышлении, стала индустрия космических запусков , где действуют существенные новые конкурентные силы , вызванные более быстрыми и обширными технологическими инновациями, вызванными образованием частных компаний, занимающихся космическими запусками. Эти компании, такие как SpaceX [8] и Rocket Lab , [9] в настоящее время обе предоставляют коммерческие услуги по запуску на орбиту за последнее десятилетие, что до десяти лет назад [10] назад делали только шесть стран. Новые инновации в подходах к разработке технологий, ценообразовании и предложениях услуг, включая существующую только с 2016 года возможность летать в космос на ранее летавшей (многоразовой) ступени ракеты-носителя , еще больше снижают цену получения доступа в космос. [11] [8]
SpaceX открыто заявляет о своих усилиях по внедрению итеративных методов проектирования в космическую отрасль и использует эту технику в космических кораблях, ракетах-носителях, электронике и авионике, а также в эксплуатации летного оборудования. [12]
Поскольку отрасль начала меняться, другие конкуренты по запуску также начинают менять свою практику долгосрочного развития с государственными учреждениями . Например, крупный американский поставщик услуг по запуску United Launch Alliance (ULA) в 2015 году начал десятилетний проект по реструктуризации своего пускового бизнеса — сокращению двух ракет -носителей до одной — используя итеративный и поэтапный подход для перехода к частично многоразовому использованию ракеты-носителя. и гораздо более дешевая система запуска в течение следующего десятилетия. [13]
Мы вели поэтапную разработку еще в 1957 году в Лос-Анджелесе под руководством Берни Димсдейла [в IBM ServiceBureau Corporation]. Он был коллегой Джона фон Неймана , так что, возможно, он научился этому там или считал это совершенно естественным. Я помню, как Херб Джейкобс (в первую очередь, хотя мы все участвовали) разрабатывал большую симуляцию для Motorola, где, насколько я могу судить, использовалась техника…»
первая частная ракета на жидком топливе, успешно достигшая орбиты.
Быстрый рост недорогих альтернатив, таких как ракета Falcon 9 от SpaceX, привел к тому, что количество запусков «Протонов» в данном году сократилось с восьми или около того до одного или двух.
Но SpaceX всегда считала себя технологической фирмой, и ее столкновения с НАСА часто принимали форму, которую разработчики компьютеров (или любой, кто знаком с проблемным внедрением Health.gov) признали бы поколением.
SpaceX следовала итеративному процессу проектирования, постоянно совершенствуя прототипы в ходе испытаний.
Традиционное управление продуктом требует четкого плана, выполняемого до конца, что является рецептом перерасхода средств.
Заявление ULA от 13 апреля о том, что оно разработает ракету под названием Vulcan, используя поэтапный подход, первая итерация которого по сути представляет собой Atlas 5, оснащенную новой первой ступенью.