Гибкая разработка программного обеспечения — это общий термин для подходов к разработке программного обеспечения , которые отражают ценности и принципы, согласованные Agile Alliance , группой из 17 специалистов по разработке программного обеспечения в 2001 году. [1] Как указано в их Манифесте по гибкой разработке программного обеспечения, специалисты по разработке программного обеспечения ценят: [2]
Практикующие специалисты черпают вдохновение из новых практик того времени, включая экстремальное программирование , Scrum , метод разработки динамических систем , адаптивную разработку программного обеспечения , а также с пониманием относятся к необходимости альтернативы тяжеловесным процессам разработки программного обеспечения, основанным на документации. [3]
Многие практики разработки программного обеспечения возникли из гибкого мышления. Эти основанные на гибкости практики, иногда называемые Agile (с большой буквы) [4], включают требования, открытие и улучшение решений посредством совместных усилий самоорганизующихся и кросс-функциональных команд с их клиентами / конечными пользователями . [5] [6]
Хотя существует множество неофициальных свидетельств того, что гибкое мышление и основанные на гибкой методологии практики улучшают процесс разработки программного обеспечения, эмпирические данные ограничены и не являются убедительными. [7] [8] [9]
Итеративные и инкрементальные методы разработки программного обеспечения можно проследить еще в 1957 году [10] , а эволюционное управление проектами [11] [12] и адаптивная разработка программного обеспечения [13] появились в начале 1970-х годов [14] .
В 1990-х годах появилось несколько методов легкой разработки программного обеспечения в ответ на преобладающие тяжеловесные методы (часто называемые в совокупности водопадом ), которые критики описывали как чрезмерно регулируемые, планируемые и микроуправляемые . [15] К этим легким методам относятся: быстрая разработка приложений (RAD) с 1991 года; [16] [17] унифицированный процесс (UP) и метод разработки динамических систем (DSDM) с 1994 года; Scrum с 1995 года; Crystal Clear и экстремальное программирование (XP) с 1996 года; и разработка на основе функций (FDD) с 1997 года. Хотя все они возникли до публикации Agile Manifesto , теперь их в совокупности называют методами гибкой разработки программного обеспечения. [3]
Уже с 1991 года аналогичные изменения происходили в производстве [18] [19] и управленческом мышлении [20], основанном на бережливом управлении .
В 2001 году семнадцать разработчиков программного обеспечения встретились на курорте в Сноуберде , штат Юта , чтобы обсудить методы облегченной разработки. Это были: Кент Бек (экстремальное программирование), Уорд Каннингем (экстремальное программирование), Дэйв Томас ( прагматическое программирование , Ruby), Джефф Сазерленд (Scrum), Кен Швабер (Scrum), Джим Хайсмит (адаптивная разработка программного обеспечения), Алистер Кокберн (Crystal), Роберт К. Мартин ( SOLID ), Майк Бидл (Scrum), Ари ван Беннекум, Мартин Фаулер ( OOAD и UML ), Джеймс Греннинг, Эндрю Хант (прагматическое программирование, Ruby), Рон Джеффрис (экстремальное программирование), Джон Керн, Брайан Марик (Ruby, разработка через тестирование ) и Стив Меллор ( OOA ). Группа, The Agile Alliance, опубликовала Манифест гибкой разработки программного обеспечения . [2]
В 2005 году группа под руководством Кокберна и Хайсмита написала дополнение к принципам управления проектами — Декларацию взаимозависимости руководителей проектов [21] , — призванную направлять управление программными проектами в соответствии с гибкими методами разработки программного обеспечения.
В 2009 году группа, работающая с Мартином, написала расширенную версию принципов разработки программного обеспечения — « Манифест мастерства программного обеспечения» , призванный направлять гибкую разработку программного обеспечения в соответствии с профессиональным поведением и мастерством.
В 2011 году Agile Alliance создал Руководство по Agile-практикам (переименованное в Agile Glossary в 2016 году) [22] — постоянно обновляемый сборник с открытым исходным кодом рабочих определений гибких практик, терминов и элементов, а также интерпретаций и рекомендаций по опыту от мирового сообщества практиков Agile.
Agile-манифест гласит: [2]
Мы открываем лучшие способы разработки программного обеспечения, делая это и помогая другим делать это. Благодаря этой работе мы пришли к ценности:
То есть, хотя предметы справа имеют ценность, мы больше ценим предметы слева.
Скотт Эмблер объяснил: [23]
Представляя манифест от имени Agile Alliance, Джим Хайсмит сказал:
Движение Agile не является антиметодологией, на самом деле многие из нас хотят восстановить доверие к слову «методология». Мы хотим восстановить баланс. Мы принимаем моделирование, но не для того, чтобы заполнить какую-то диаграмму в пыльном корпоративном репозитории. Мы принимаем документацию, но не сотни страниц никогда не поддерживаемых и редко используемых томов. Мы планируем, но осознаем ограничения планирования в нестабильной среде. Те, кто хотел бы заклеймить сторонников XP или SCRUM или любой другой Agile-методологии как «хакеров», не знают ни методологий, ни первоначального определения термина «хакер».
— Джим Хайсмит, История: Манифест Agile [24]
Ценности основаны на следующих принципах: [25]
Большинство методов гибкой разработки разбивают работу по разработке продукта на небольшие этапы, которые минимизируют объем предварительного планирования и проектирования. Итерации, или спринты, представляют собой короткие временные рамки ( таймбоксы ) [26] , которые обычно длятся от одной до четырех недель. [27] : 20 Каждая итерация включает в себя кросс-функциональную команду, работающую во всех функциях: планирование , анализ , проектирование , кодирование , модульное тестирование и приемочное тестирование . В конце итерации заинтересованным сторонам демонстрируется работающий продукт. Это минимизирует общий риск и позволяет продукту быстро адаптироваться к изменениям. [28] [29] Итерация может не добавить достаточно функциональности, чтобы гарантировать выпуск на рынок, но цель состоит в том, чтобы иметь доступный релиз (с минимальным количеством ошибок ) в конце каждой итерации. [30] Благодаря инкрементальной разработке продукты имеют возможность « часто и рано терпеть неудачу » на протяжении каждой итеративной фазы, а не радикально в дату окончательного выпуска. [31] Для выпуска продукта или новых функций может потребоваться несколько итераций. Рабочее программное обеспечение является основным показателем прогресса. [25]
Ключевым преимуществом гибких подходов является скорость выхода на рынок и снижение рисков. Обычно на рынок выпускаются более мелкие инкременты, что снижает временные и финансовые риски разработки продукта, не соответствующего требованиям пользователя.
Шестой принцип гибкого манифеста по разработке программного обеспечения гласит: «Наиболее эффективным и действенным методом передачи информации команде разработчиков и внутри нее является личное общение». Манифест, написанный в 2001 году, когда видеоконференции не были широко распространены, утверждает это в отношении передачи информации, а не обязательно того, что команда должна находиться в одном месте.
Принцип совместного размещения заключается в том, что коллеги в одной команде должны располагаться вместе, чтобы лучше определить идентичность как команды и улучшить коммуникацию. [32] Это обеспечивает личное взаимодействие , в идеале перед доской, что сокращает время цикла, которое обычно требуется, когда вопросы и ответы передаются по телефону, в постоянном чате , вики или по электронной почте. [33] С широким распространением удаленной работы во время пандемии COVID-19 и изменениями в инструментах было проведено больше исследований [34] вокруг совместного размещения и распределенной работы, которые показывают, что совместное размещение становится все менее актуальным.
Независимо от того, какой метод разработки используется, в каждой команде должен быть представитель заказчика (известный как владелец продукта в Scrum ). Этот представитель соглашается заинтересованными сторонами действовать от их имени и берет на себя личное обязательство быть доступным для разработчиков, чтобы отвечать на вопросы на протяжении всей итерации. В конце каждой итерации заинтересованные стороны проекта вместе с представителем заказчика проверяют прогресс и переоценивают приоритеты с целью оптимизации возврата инвестиций (ROI) и обеспечения соответствия потребностям заказчика и целям компании. Важность удовлетворенности заинтересованных сторон, подробно изложенная в частом взаимодействии и обзоре в конце каждой фазы, является причиной того, что подход часто обозначается как методология, ориентированная на заказчика . [35]
В гибкой разработке программного обеспечения информационный радиатор — это (обычно большой) физический дисплей, доска с липкими заметками или что-то подобное, расположенное на видном месте рядом с командой разработчиков, где его могут видеть прохожие. [36] Он представляет собой актуальную сводку статуса разработки продукта. [37] Световой индикатор сборки также может использоваться для информирования команды о текущем статусе разработки их продукта.
Распространенной характеристикой гибкой разработки программного обеспечения является ежедневный стендап (известный как ежедневный скрам в фреймворке Scrum). В течение короткого сеанса (например, 15 минут) члены команды сообща рассматривают, как они продвигаются к своей цели, и соглашаются, нужно ли им адаптировать свой подход. Чтобы придерживаться согласованного лимита времени, команды часто используют простые закодированные вопросы (например, что они завершили в предыдущий день, что они намерены завершить в этот день и есть ли какие-либо препятствия или риски для прогресса) и откладывают подробные обсуждения и решение проблем до окончания стендапа. [38]
Конкретные инструменты и методы, такие как непрерывная интеграция , автоматизированное модульное тестирование , парное программирование , разработка через тестирование , шаблоны проектирования , разработка на основе поведения , проектирование на основе домена , рефакторинг кода и другие методы часто используются для улучшения качества и повышения гибкости разработки продукта. [39] Это основано на проектировании и создании качества с самого начала и возможности продемонстрировать программное обеспечение клиентам в любой момент или, по крайней мере, в конце каждой итерации. [40]
По сравнению с традиционной разработкой программного обеспечения, гибкая разработка программного обеспечения в основном нацелена на сложные системы и разработку продуктов с динамическими, недетерминированными и нелинейными свойствами . Точные оценки, стабильные планы и прогнозы часто трудно получить на ранних стадиях, и уверенность в них, вероятно , будет низкой. Практикующие Agile используют свою свободную волю , чтобы сократить « прыжок веры », который необходим, прежде чем можно будет получить какие-либо доказательства ценности . [41] Требования и проектирование считаются возникающими . Большие предварительные спецификации, вероятно, приведут к большим потерям в таких случаях, т. е. не являются экономически обоснованными. Эти основные аргументы и предыдущий отраслевой опыт , извлеченные из многих лет успехов и неудач, помогли сформировать благоприятные условия гибкой разработки для адаптивного, итеративного и эволюционного развития. [42]
Методы разработки существуют в континууме от адаптивных до предиктивных . [43] Методы гибкой разработки программного обеспечения лежат на адаптивной стороне этого континуума. Одним из ключевых методов адаптивной разработки является подход «набегающей волны» к планированию расписания, который определяет контрольные точки, но оставляет гибкость в пути их достижения, а также позволяет изменять сами контрольные точки. [44]
Адаптивные методы фокусируются на быстрой адаптации к меняющимся реалиям. Когда потребности проекта меняются, адаптивная команда также меняется. Адаптивной команде сложно точно описать, что произойдет в будущем. Чем дальше дата, тем более неопределенно адаптивный метод описывает, что произойдет в эту дату. Адаптивная команда не может точно сообщить, какие задачи она будет выполнять на следующей неделе, а только какие функции она планирует на следующий месяц. Когда ее спрашивают о релизе через шесть месяцев, адаптивная команда может сообщить только о миссии для релиза или об ожидаемой ценности по сравнению со стоимостью.
Методы прогнозирования , напротив, фокусируются на детальном анализе и планировании будущего и учитывают известные риски. В крайних случаях команда прогнозирования может точно сообщать, какие функции и задачи запланированы на весь процесс разработки. Методы прогнозирования опираются на эффективный анализ ранней фазы, и если он пойдет совсем не так, проекту может быть трудно изменить направление. Команды прогнозирования часто создают совет по контролю изменений , чтобы гарантировать, что они рассматривают только самые ценные изменения.
Анализ рисков может использоваться для выбора между адаптивными ( гибкими или ориентированными на ценность ) и прогнозными ( ориентированными на план ) методами. [45] Барри Бём и Ричард Тернер предполагают, что каждая сторона континуума имеет свою собственную базу , а именно: [46]
Одним из отличий между методами гибкой разработки ПО и каскадной моделью является подход к качеству и тестированию. В каскадной модели работа проходит через фазы жизненного цикла разработки ПО (SDLC) — одна фаза завершается до того, как может начаться другая — поэтому фаза тестирования является отдельной и следует за фазой сборки . Однако в гибкой разработке ПО тестирование завершается в той же итерации, что и программирование.
Поскольку тестирование выполняется в каждой итерации, которая разрабатывает небольшую часть программного обеспечения, пользователи могут часто использовать эти новые части программного обеспечения и проверять ценность. После того, как пользователи узнают реальную ценность обновленной части программного обеспечения, они могут принимать более обоснованные решения о будущем программного обеспечения. Наличие ретроспективы ценности и сессии перепланирования программного обеспечения в каждой итерации — в Scrum итерации обычно длятся всего две недели — помогает команде постоянно адаптировать свои планы, чтобы максимизировать ценность, которую она предоставляет. Это следует шаблону, похожему на цикл «планируй-делай-проверяй-действуй » (PDCA), поскольку работа планируется , выполняется , проверяется (в обзоре и ретроспективе), и любые согласованные изменения вносятся в действие .
Этот итеративный подход поддерживает мышление продукта, а не проекта . Это обеспечивает большую гибкость в процессе разработки; тогда как в проектах требования определяются и фиксируются с самого начала, что затрудняет их последующее изменение. Итеративная разработка продукта позволяет программному обеспечению развиваться в ответ на изменения в бизнес-среде или требованиях рынка.
В письме в IEEE Computer Стивен Ракитин выразил цинизм по поводу гибкой разработки программного обеспечения, назвав ее « очередной попыткой подорвать дисциплину разработки программного обеспечения » и переведя « рабочее программное обеспечение вместо исчерпывающей документации » как « мы хотим тратить все наше время на кодирование. Помните, настоящие программисты не пишут документацию ». [47]
Это оспаривается сторонниками гибкой разработки программного обеспечения, которые утверждают, что разработчики должны писать документацию, если это лучший способ достичь соответствующих целей, но что часто существуют лучшие способы достижения этих целей, чем написание статической документации. [48] Скотт Эмблер утверждает, что документация должна быть «едва достаточно хорошей» (JBGE), [49] что слишком много или всеобъемлющая документация обычно приводит к потерям, и разработчики редко доверяют подробной документации, потому что она обычно не синхронизирована с кодом, [48] в то время как слишком мало документации может также вызывать проблемы для обслуживания, общения, обучения и обмена знаниями. Алистер Кокберн писал о методе Crystal Clear :
Crystal рассматривает разработку как серию кооперативных игр и предполагает, что документации будет достаточно, чтобы помочь следующей победе в следующей игре. Рабочие продукты для Crystal включают варианты использования, список рисков, план итерации, основные модели домена и проектные заметки для информирования о выборе... однако для этих документов нет шаблонов, а описания обязательно расплывчаты, но цель ясна, достаточно документации для следующей игры. Я всегда склонен характеризовать это для своей команды так: что бы вы хотели знать, если бы присоединились к команде завтра.
— Алистер Кокберн [50]
Методы гибкой разработки программного обеспечения поддерживают широкий спектр жизненного цикла разработки программного обеспечения . [51] Некоторые методы фокусируются на практиках (например, XP , прагматичное программирование , гибкое моделирование), в то время как некоторые фокусируются на управлении потоком работы (например, Scrum, Kanban). Некоторые поддерживают деятельность по спецификации требований и разработке (например, FDD ), в то время как некоторые стремятся охватить полный жизненный цикл разработки (например, DSDM , RUP ).
Известные гибкие фреймворки разработки программного обеспечения включают в себя:
Гибкая разработка программного обеспечения поддерживается рядом конкретных практик, охватывающих такие области, как требования, проектирование, моделирование, кодирование, тестирование, планирование, управление рисками, процесс, качество и т. д. Некоторые известные гибкие практики разработки программного обеспечения включают в себя: [52]
В литературе понятие адаптации метода обозначается разными терминами, включая «адаптацию метода», «адаптацию фрагмента метода» и «ситуационную инженерию метода». Адаптация метода определяется как:
Процесс или возможность, в рамках которых человеческие агенты определяют подход к разработке системы для конкретной проектной ситуации посредством ответных изменений и динамических взаимодействий между контекстами, намерениями и фрагментами метода.
— Мехмет Нафиз Айдын и др., Метод разработки гибких информационных систем в действии [69]
Ситуационную целесообразность следует рассматривать как отличительную характеристику между гибкими методами и более плановыми методами разработки программного обеспечения, при этом гибкие методы позволяют группам разработки продукта адаптировать рабочие практики в соответствии с потребностями отдельных продуктов. [70] [69] Потенциально большинство гибких методов могут быть пригодны для адаптации методов, [51] например, DSDM , адаптированный в контексте CMM . [71] и XP, адаптированный с помощью техники Rule Description Practices (RDP). [72] Однако не все сторонники гибких методов согласны со Швабером, отмечающим, что «именно так мы изначально попали в беду, думая, что проблема была в отсутствии идеальной методологии. Усилия [должны] быть сосредоточены на изменениях, [необходимых] на предприятии». [73] Бас Водде усилил эту точку зрения, предположив, что в отличие от традиционных, больших методологий, которые требуют от вас выбора элементов, Scrum предоставляет основы, поверх которых вы добавляете дополнительные элементы для локализации и контекстуализации его использования. [74] Практикующие специалисты редко используют методы разработки систем или, в частности, гибкие методы по инструкции, часто предпочитая исключить или адаптировать некоторые практики метода, чтобы создать внутренний метод. [75]
На практике методы можно адаптировать с помощью различных инструментов. Общие языки моделирования процессов, такие как Unified Modeling Language, можно использовать для адаптации методов разработки программного обеспечения. Однако существуют также специализированные инструменты для разработки методов, такие как Essence Theory of Software Engineering of SEMAT . [76]
Гибкая разработка программного обеспечения широко рассматривается как очень подходящая для определенных типов сред, включая небольшие группы экспертов, работающих над новыми проектами , [46] [77], а проблемы и ограничения, возникающие при внедрении гибких методов разработки программного обеспечения в крупной организации с устаревшей инфраструктурой , хорошо документированы и понятны. [78]
В ответ на это был разработан ряд стратегий и моделей для преодоления проблем, связанных с крупномасштабными усилиями по разработке (>20 разработчиков) [79] [80] или распределенными (не размещенными в одном месте) командами разработчиков [81] [82] , а также с другими проблемами; и в настоящее время существует несколько признанных фреймворков, которые стремятся смягчить или избежать этих проблем.
Существует множество противоречивых точек зрения относительно того, являются ли все эти подходы эффективными или действительно ли они соответствуют определению гибкой разработки, и это остается активной и продолжающейся областью исследований. [79] [83]
Когда гибкая разработка программного обеспечения применяется в распределенной среде (с командами, разбросанными по нескольким бизнес-локациям), ее обычно называют распределенной гибкой разработкой программного обеспечения . Цель состоит в том, чтобы использовать уникальные преимущества, предлагаемые каждым подходом. Распределенная разработка позволяет организациям создавать программное обеспечение, стратегически настраивая команды в разных частях земного шара, фактически создавая программное обеспечение круглосуточно (чаще называемое моделью follow-the-sun). С другой стороны, гибкая разработка обеспечивает повышенную прозрачность, непрерывную обратную связь и большую гибкость при реагировании на изменения.
Методы гибкой разработки программного обеспечения изначально рассматривались как наиболее подходящие для разработки некритических продуктов, поэтому их исключили из использования в регулируемых областях, таких как медицинские приборы , фармацевтика, финансы, ядерные системы, автомобилестроение и авионика и т. д. Однако за последние несколько лет было предпринято несколько инициатив по адаптации гибких методов для этих областей. [84] [85] [86] [87] [88]
Существует множество стандартов, которые могут применяться в регулируемых областях, включая ISO 26262 , ISO 9000 , ISO 9001 и ISO/IEC 15504. Ряд ключевых проблем имеют особое значение в регулируемых областях: [89]
Хотя гибкие методы разработки программного обеспечения могут использоваться с любой парадигмой или языком программирования на практике, изначально они были тесно связаны с объектно-ориентированными средами, такими как Smalltalk, Lisp и позднее Java, C#. Первоначальными последователями гибких методов обычно были небольшие и средние команды, работающие над беспрецедентными системами с требованиями, которые было трудно окончательно определить и которые, вероятно, менялись по мере разработки системы. В этом разделе описываются общие проблемы, с которыми сталкиваются организации, когда они пытаются принять гибкие методы разработки программного обеспечения, а также различные методы измерения качества и производительности гибких команд. [90]
Индекс измерения гибкости , среди прочего, оценивает разработки по пяти измерениям разработки продукта (продолжительность, риск, новизна, усилия и взаимодействие). [91] Другие методы основаны на измеримых целях [92] , и одно исследование предполагает, что скорость может использоваться как метрика гибкости. Существуют также гибкие самооценки для определения того, использует ли команда гибкие методы разработки программного обеспечения (тест Nokia, [93] тест Karlskrona, [94] тест на 42 балла). [95]
Одним из первых исследований, сообщающих о росте качества, производительности и удовлетворенности бизнеса за счет использования гибких методов разработки программного обеспечения, был опрос, проведенный компанией Shine Technologies с ноября 2002 года по январь 2003 года. [96]
Аналогичное исследование, State of Agile , проводится каждый год, начиная с 2006 года, с тысячами участников из сообщества разработчиков программного обеспечения. Оно отслеживает тенденции в отношении предполагаемых преимуществ гибкости, извлеченных уроков и передового опыта. В каждом исследовании сообщалось об увеличении числа тех, кто утверждает, что гибкая разработка программного обеспечения помогает им быстрее поставлять программное обеспечение; улучшает их способность справляться с меняющимися приоритетами клиентов; и повышает их производительность. [97] Опросы также постоянно показывают лучшие результаты с гибкими методами разработки продуктов по сравнению с классическим управлением проектами. [98] [99] В целом, есть сообщения о том, что некоторые считают, что гибкие методы разработки все еще слишком молоды, чтобы проводить обширные академические исследования их успеха. [100]
Организации и команды, внедряющие гибкую разработку программного обеспечения, часто сталкиваются с трудностями при переходе от более традиционных методов, таких как каскадная разработка , например, когда командам навязывают гибкий процесс. [101] Их часто называют антишаблонами гибкой разработки или, что более распространено, запахами гибкой разработки . Ниже приведены некоторые распространенные примеры:
Цель гибкой разработки программного обеспечения — сосредоточиться больше на создании работающего программного обеспечения и меньше на документации. Это контрастирует с каскадными моделями, где процесс часто строго контролируется, а незначительные изменения в системе требуют существенного пересмотра поддерживающей документации. Однако это не оправдывает полного отказа от анализа или проектирования вообще. Невнимание к проектированию может привести к тому, что команда сначала будет действовать быстро, но затем потребуется значительная переработка при попытке масштабировать систему. Одной из ключевых особенностей гибкой разработки программного обеспечения является то, что она итеративна. При правильном выполнении гибкая разработка программного обеспечения позволяет проекту появляться по мере разработки системы и помогает команде обнаружить общие черты и возможности для повторного использования. [102]
В гибкой разработке программного обеспечения истории (похожие на описания вариантов использования ) обычно используются для определения требований, а итерация — это короткий период времени, в течение которого команда обязуется достичь определенных целей. [103] Добавление историй к итерации в процессе работы вредит хорошему потоку работы. Их следует добавлять в бэклог продукта и расставлять по приоритетам для последующей итерации, или в редких случаях итерация может быть отменена. [104]
Это не означает, что история не может расширяться. Команды должны иметь дело с новой информацией, которая может создавать дополнительные задачи для истории. Если новая информация мешает завершению истории в течение итерации, то ее следует перенести в последующую итерацию. Однако она должна быть приоритетной по сравнению со всеми оставшимися историями, поскольку новая информация могла изменить первоначальный приоритет истории.
Agile-разработка программного обеспечения часто реализуется как низовое усилие в организациях командами разработчиков программного обеспечения, пытающимися оптимизировать свои процессы разработки и обеспечить согласованность в жизненном цикле разработки программного обеспечения. Не имея поддержки спонсоров, команды могут столкнуться с трудностями и сопротивлением со стороны деловых партнеров, других команд разработчиков и руководства. Кроме того, они могут пострадать без соответствующего финансирования и ресурсов. [105] Это увеличивает вероятность неудачи. [106]
Опрос, проведенный VersionOne, показал, что респонденты назвали недостаточное обучение наиболее значимой причиной неудачных внедрений Agile [107]. Команды попали в ловушку, предполагая, что сокращенные процессы разработки Agile-ПО по сравнению с другими подходами, такими как каскадная модель, означают, что фактических правил для Agile-разработки ПО не существует. [ необходима ссылка ]
Владелец продукта отвечает за представление бизнеса в процессе разработки и часто является самой ответственной ролью. [108]
Распространенной ошибкой является назначение на роль владельца продукта кого-то из команды разработчиков. Это требует от команды принятия собственных решений по приоритетам без реальной обратной связи от бизнеса. Они пытаются решать бизнес-проблемы внутри компании или задерживают работу, поскольку обращаются за указаниями за пределы команды. Это часто приводит к отвлечению внимания и срыву сотрудничества. [109]
Agile разработка программного обеспечения требует от команд выполнения обязательств по продукту, что означает, что они должны сосредоточиться на работе только для этого продукта. Однако от членов команды, у которых, как представляется, есть свободные мощности, часто ожидают, что они возьмут на себя другую работу, что затрудняет для них помощь в завершении работы, которую взяла на себя их команда. [110]
Команды могут попасть в ловушку, тратя слишком много времени на подготовку или планирование. Это распространенная ловушка для команд, менее знакомых с гибкой разработкой программного обеспечения, когда команды чувствуют себя обязанными иметь полное понимание и спецификацию всех историй. Команды должны быть готовы двигаться вперед только с теми историями, в которых они уверены, а затем во время итерации продолжать обнаруживать и готовить работу для последующих итераций (часто называемую уточнением или подготовкой бэклога).
Ежедневный стендап должен быть целенаправленным, своевременным собранием, на котором все члены команды распространяют информацию. Если происходит решение проблем, оно часто может включать только определенных членов команды и потенциально не является лучшим использованием времени всей команды. Если во время ежедневного стендапа команда начинает погружаться в решение проблем, его следует отложить до тех пор, пока подгруппа не сможет обсудить, обычно сразу после завершения стендапа. [111]
Одним из предполагаемых преимуществ гибкой разработки программного обеспечения является предоставление команде возможности делать выбор, поскольку они находятся ближе всего к проблеме. Кроме того, они должны делать выбор как можно ближе к реализации, чтобы использовать более своевременную информацию при принятии решения. Если членам команды поручают задачи другие или слишком рано в процессе, преимущества локализованного и своевременного принятия решений могут быть потеряны. [112]
Назначение работы также ограничивает членов команды определенными ролями (например, член команды А всегда должен выполнять работу с базой данных), что ограничивает возможности для перекрестного обучения. [112] Члены команды сами могут выбирать для себя задачи, которые расширяют их возможности и предоставляют возможности перекрестного обучения.
В фреймворке Scrum, который утверждает, что соответствует ценностям и принципам Agile, роль скрам-мастера заключается в обеспечении соблюдения процесса скрам и в обучении команды скрам в ходе этого процесса. Распространенной ошибкой является то, что скрам-мастер действует как участник. Хотя фреймворк Scrum не запрещает это, скрам-мастер должен убедиться, что у него есть возможность действовать в роли скрам-мастера в первую очередь, а не работать над задачами разработки. Роль скрам-мастера заключается в содействии процессу, а не в создании продукта. [113]
Если Scrum-мастер также будет заниматься несколькими задачами одновременно, это может привести к слишком частым переключениям контекста, что не позволит быть продуктивным. Кроме того, поскольку Scrum-мастер отвечает за устранение препятствий, чтобы команда могла двигаться вперед, выгода, получаемая от продвижения вперед отдельных задач, может не перевесить препятствия, отложенные из-за нехватки мощности. [114]
Из-за итеративной природы гибкой разработки часто требуется несколько раундов тестирования. Автоматизированное тестирование помогает снизить влияние повторяющихся модульных, интеграционных и регрессионных тестов и освобождает разработчиков и тестировщиков для сосредоточения на более ценной работе. [115]
Автоматизация тестирования также поддерживает непрерывный рефакторинг, необходимый для итеративной разработки программного обеспечения. Разрешение разработчику быстро запускать тесты для подтверждения того, что рефакторинг не изменил функциональность приложения, может снизить рабочую нагрузку и повысить уверенность в том, что усилия по очистке не привели к появлению новых дефектов.
Сосредоточение на предоставлении новой функциональности может привести к увеличению технического долга . Команда должна выделить себе время на исправление дефектов и рефакторинг. Технический долг затрудняет планирование, увеличивая объем незапланированной работы, поскольку производственные дефекты отвлекают команду от дальнейшего прогресса. [116]
По мере развития системы важно проводить рефакторинг . [117] Со временем отсутствие постоянного обслуживания приводит к увеличению дефектов и затрат на разработку. [116]
Распространенное заблуждение заключается в том, что гибкая разработка программного обеспечения допускает непрерывные изменения, однако бэклог итерации — это соглашение о том, какая работа может быть завершена в течение итерации. [118] Слишком много незавершенной работы (WIP) приводит к неэффективности, такой как переключение контекста и очередность. [119] Команда должна избегать ощущения давления, заставляющего ее брать на себя дополнительную работу. [120]
Agile-разработка программного обеспечения фиксирует время (продолжительность итерации), качество и, в идеале, ресурсы заранее (хотя поддержание фиксированных ресурсов может быть затруднено, если разработчики часто отвлекаются от задач для решения производственных инцидентов), в то время как область действия остается переменной. Заказчик или владелец продукта часто настаивают на фиксированной области действия для итерации. Однако команды должны неохотно брать на себя обязательства по фиксированному времени, ресурсам и области действия (обычно известному как треугольник управления проектами ). Попытки добавить область действия к фиксированному времени и ресурсам гибкой разработки программного обеспечения могут привести к снижению качества. [121]
Из-за сфокусированного темпа и непрерывного характера гибких практик существует повышенный риск выгорания среди членов команды поставки. [122]
Agile-управление проектами — это итеративный процесс разработки, в котором от пользователей и заинтересованных сторон постоянно собирается обратная связь для создания правильного пользовательского опыта. Для выполнения гибкого процесса могут использоваться различные методы, в том числе Scrum , Extreme Programming , Lean и Kanban . [123] Термин Agile Management применяется к итеративному, инкрементальному методу управления проектированием и сборкой в области инжиниринга, информационных технологий и других бизнес-областей, которые направлены на обеспечение разработки новых продуктов или услуг в очень гибкой и интерактивной манере на основе принципов, изложенных в Manifesto for Agile Software Development . [124] Метрики Agile Project Management помогают уменьшить путаницу, выявить слабые места и измерить производительность команды на протяжении всего цикла разработки. Гибкость цепочки поставок — это способность цепочки поставок справляться с неопределенностью и изменчивостью предложения и спроса. Гибкая цепочка поставок может быстро увеличивать и уменьшать свою мощность, поэтому она может адаптироваться к быстро меняющемуся спросу клиентов. Наконец, стратегическая гибкость — это способность организации менять свой курс действий по мере развития ее среды. Ключом к стратегической гибкости является достаточно раннее распознавание внешних изменений и распределение ресурсов для адаптации к этим меняющимся условиям. [123]
Методы Agile X также можно назвать экстремальным управлением проектами . Это вариант итеративного жизненного цикла [125] , где результаты представляются поэтапно. Основное различие между гибкой и итеративной разработкой заключается в том, что гибкие методы завершают небольшие части результатов в каждом цикле поставки (итерации), [126] в то время как итеративные методы развивают весь набор результатов с течением времени, завершая их ближе к концу проекта. Как итеративные, так и гибкие методы были разработаны в качестве реакции на различные препятствия, которые возникли в более последовательных формах организации проекта. Например, по мере того, как технологические проекты становятся сложнее, конечные пользователи, как правило, испытывают трудности с определением долгосрочных требований, не имея возможности просматривать прогрессивные прототипы. Проекты, которые развиваются итерациями, могут постоянно собирать обратную связь, чтобы помочь уточнить эти требования.
Agile-менеджмент также предлагает простую структуру, способствующую общению и размышлениям о прошлой работе среди членов команды . [127] Команды, которые использовали традиционное каскадное планирование и приняли гибкий способ разработки, обычно проходят фазу трансформации и часто получают помощь от гибких тренеров, которые помогают командам пройти через более плавную трансформацию. Обычно существует два стиля гибкого коучинга: основанный на подталкивании и основанный на вытягивании гибкий коучинг. Здесь «система подталкивания» может относиться к предварительной оценке того, какие задачи могут быть вписаны в спринт (подталкивающая работа), например, типичная для Scrum; тогда как «система вытягивания» может относиться к среде, в которой задачи выполняются только при наличии возможностей. [128] Подходы гибкого управления также использовались и адаптировались к деловому и государственному секторам. Например, в федеральном правительстве Соединенных Штатов Агентство США по международному развитию (USAID) использует подход к управлению совместными проектами, который фокусируется на включении стратегий сотрудничества, обучения и адаптации (CLA) для итерации и адаптации программирования. [129]
Методы Agile упоминаются в Руководстве к своду знаний по управлению проектами ( Руководство PMBOK, 6-е издание ) в определении жизненного цикла разработки продукта :
В жизненном цикле проекта обычно есть одна или несколько фаз, связанных с разработкой продукта, услуги или результата. Они называются жизненным циклом разработки (...) Адаптивные жизненные циклы бывают гибкими, итеративными или инкрементальными. Подробный объем определяется и утверждается до начала итерации. Адаптивные жизненные циклы также называются гибкими или жизненными циклами, управляемыми изменениями. [130]
По словам Жана-Лу Рише (научный сотрудник Института стратегических инноваций и услуг ESSEC ), «этот подход может быть эффективно использован для непрограммных продуктов и для управления проектами в целом, особенно в областях инноваций и неопределенности». Результатом является продукт или проект, который наилучшим образом соответствует текущим потребностям клиентов и поставляется с минимальными затратами, отходами и временем, что позволяет компаниям достигать конечного результата раньше, чем при использовании традиционных подходов. [131]
Методы гибкой разработки программного обеспечения широко использовались для разработки программных продуктов, и некоторые из них используют определенные характеристики программного обеспечения, такие как объектные технологии . [132] Однако эти методы могут применяться для разработки непрограммных продуктов, таких как компьютеры, медицинские приборы, продукты питания, одежда и музыка. [133] Методы гибкой разработки программного обеспечения использовались при развертывании и миграции ИТ-инфраструктуры, не связанной с разработкой . Некоторые из более широких принципов гибкой разработки программного обеспечения также нашли применение в общем управлении [134] (например, стратегия, управление, риски, финансы) в терминах гибкости бизнеса или гибкого управления бизнесом. Методологии гибкого программного обеспечения также были приняты для использования в процессе обучения инженерии , итеративном процессе, основанном на данных, который применяет науки обучения , проектирование, ориентированное на человека , и принятие решений на основе данных для поддержки учащихся и их развития. [135]
Парадигмы гибкой разработки программного обеспечения могут быть использованы в других областях жизни, таких как воспитание детей. Их успех в развитии детей может быть основан на некоторых базовых принципах управления: коммуникации, адаптации и осведомленности. В своем выступлении на TED Talk Брюс Файлер рассказал, как он применил базовые гибкие парадигмы к управлению домашним хозяйством и воспитанию детей. [136]
Agile-методологии были названы потенциально неэффективными в крупных организациях и определенных типах разработки. [137] Многие организации считают, что гибкие методологии разработки программного обеспечения слишком экстремальны, и принимают гибридный подход [138] , который смешивает элементы гибкой разработки программного обеспечения и подходы, основанные на плане. [139] Некоторые методы, такие как метод разработки динамических систем (DSDM), пытаются сделать это дисциплинированным образом, не жертвуя фундаментальными принципами.
Растущее внедрение гибких методов также подвергалось критике как модное увлечение менеджмента , которое просто описывает существующие передовые методы под новым жаргоном, продвигает единый подход к стратегиям развития и ошибочно делает акцент на методах, а не на результатах. [140]
Алистер Кокберн организовал празднование 10-й годовщины Манифеста гибкой разработки программного обеспечения в Сноуберде, штат Юта, 12 февраля 2011 года, собрав около 30+ человек, которые были вовлечены в первоначальную встречу и с тех пор. Был собран список из примерно 20 слонов в комнате ('необсуждаемые' agile-темы/проблемы), включая аспекты: альянсы, неудачи и ограничения практик гибкой разработки программного обеспечения и контекст (возможные причины: коммерческие интересы, деконтекстуализация, отсутствие очевидного способа добиться прогресса на основе неудач, ограниченные объективные доказательства, когнитивные предубеждения и ошибки рассуждения), политика и культура. [141] Как писал Филипп Крухтен :
Agile-движение в некотором смысле немного похоже на подростка: очень застенчивое, постоянно проверяющее свою внешность в зеркале, принимающее мало критики, заинтересованное только в общении со своими сверстниками, отвергающее целиком всю мудрость прошлого, просто потому, что она из прошлого, перенимающее моду и новый жаргон, порой дерзкое и высокомерное. Но я не сомневаюсь, что оно будет взрослеть дальше, станет более открытым внешнему миру, более рефлексивным и, следовательно, более эффективным.
— Филипп Крухтен [141]
«Манифест» мог оказать негативное влияние на управление и руководство в сфере высшего образования, поскольку он предлагал администраторам заменить более медленные традиционные и совещательные процессы более «гибкими». Эта концепция редко находила признание среди университетских преподавателей. [142]
Другая критика заключается в том, что во многих отношениях гибкое управление и традиционные методы управления в конечном итоге оказываются в оппозиции друг к другу. Распространенная критика этой практики заключается в том, что время, потраченное на попытки изучить и внедрить практику, слишком дорого, несмотря на потенциальные выгоды. Переход от традиционного управления к гибкому управлению требует полного подчинения гибкому и твердой приверженности всех членов организации доведению процесса до конца. Такие проблемы, как неравные результаты в организации, слишком много изменений для способности сотрудников справиться или отсутствие гарантий в конце трансформации, — вот лишь несколько примеров. [143]
{{cite web}}
: CS1 maint: unfit URL (link)Статья под названием "Гибкая разработка программного обеспечения: бизнес инноваций" ... является еще одной попыткой подорвать дисциплину разработки программного обеспечения ... Мы хотим тратить все свое время на кодирование. Помните, настоящие программисты не пишут документацию.
95% заявили, что эффекта не было или наблюдалось снижение затрат... 93% заявили, что производительность повысилась или значительно повысилась... 88% заявили, что качество повысилось или значительно повысилось... 83% заявили, что удовлетворенность бизнесом повысилась или значительно повысилась
6% указали, что их производительность снизилась... 34% респондентов не сообщили об изменении производительности, а 60% сообщили о повышении производительности... 66% [ответили], что качество стало выше... 58% организаций сообщают о повышении удовлетворенности, тогда как только 3% сообщают о снижении удовлетворенности.
Что такое самоорганизующаяся команда?
{{cite book}}
: CS1 maint: location missing publisher (link)