Agile — различия между версиями

м
 
(не показано 19 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''Agile''' (на русский обычно не переводится, хотя иногда говорят о “гибких методах”) — серия подходов к разработке программного обеспечения, ориентированных на использование интерактивной разработки, динамическое формирование требований и обеспечение их реализации в результате постоянного взаимодействия внутри самоорганизующихся рабочих групп, состоящих из специалистов различного профиля.  
+
'''Agile''' (на русский обычно не переводится, хотя иногда говорят о “гибких методах”) — [[:Категория:Гибкие методологии разработки ПО|серия подходов к разработке программного обеспечения]], ориентированных на использование интерактивной разработки, динамическое формирование требований и обеспечение их реализации в результате постоянного взаимодействия внутри самоорганизующихся рабочих групп, состоящих из специалистов различного профиля.  
  
В системной инженерии “железных” систем методы agile пока используются мало, но в последние годы ситуация быстро меняется: разработка определения системы в существенной мере оказывается похожей на разработку программного обеспечения, и в ней для разработки моделей могут быть использованы практики, зарекомендовавшие себя при разработке ПО.
+
В [[Системная инженерия|системной инженерии]] “железных” [[система|систем]] методы agile пока используются мало, но в последние годы ситуация быстро меняется: разработка определения системы в существенной мере оказывается похожей на разработку программного обеспечения, и в ней для разработки моделей могут быть использованы практики, зарекомендовавшие себя при разработке ПО.
  
 +
== Гибкое моделирование ==
 +
Метод описания архитектуры [[программная система|программной системы]], который следует идее того, что содержимое важнее представления. Это обеспечивает простоту, понятность, достаточную точность и единообразие создаваемых моделей. Простота документа гарантирует активное участие заинтересованных сторон в моделировании [[рабочий продукт|артефактов]]. Более подробно этот подход рассматривается в книге Скотта Амблера «Гибкие технологии: экстремальное программирование и унифицированный процесс разработки» (J. Wiley, ISBN-10: 0471202827, ISBN-13: 978-0471202820; Питер, ISBN 5-94723-545-5, 0-471-20282-7).
  
== Agile-манифест разработки ПО ==
+
== Критика ==
Мы постоянно открываем для себя более совершенные методы разработки программного обеспечения, занимаясь разработкой непосредственно и помогая в этом другим. Благодаря проделанной работе мы смогли осознать, что:
+
* При agile-подходе часто '''пренебрегают созданием плана''' («дорожной карты») развития продукта, равно как и '''[[Инженерия требований|управлением требованиями]]''', в процессе которого и формируется такая «карта». Гибкий подход к управлению требованиями не подразумевает далеко идущих планов (по сути, управления требованиями просто не существует в данной методологии), а подразумевает возможность заказчика вдруг и неожиданно в конце каждой итерации выставлять новые требования, часто противоречащие архитектуре уже созданного и поставляемого продукта. Такое иногда приводит к катастрофическим «авралам» с массовым рефакторингом и переделками практически на каждой очередной итерации.
# Люди и взаимодействие важнее процессов и инструментов
+
* Считается, что работа в agile '''мотивирует разработчиков решать все поступившие задачи простейшим и быстрейшим возможным способом,''' при этом зачастую '''не обращая внимания на правильность кода с точки зрения требований нижележащей платформы''' (подход — «работает, и ладно», при этом не учитывается, что может перестать работать при малейшем изменении или же дать тяжёлые к воспроизводству дефекты после реального развёртывания у клиента). Это приводит к снижению качества продукта и накоплению дефектов.
# Работающий продукт важнее исчерпывающей документации
+
# Сотрудничество с заказчиком важнее согласования условий контракта
+
# Готовность к изменениям важнее следования первоначальному плану
+
 
+
То есть, не отрицая важности того, что справа, мы всё-таки больше ценим то, что слева.
+
Важно понимать, что мы не отрицаем то, что написано в правой части манифеста. Мы только говорим о том, что мы больше ценим написанное в левой части чем то, что написано в правой части.
+
 
+
 
+
== Основополагающие принципы Agile-манифеста ==
+
# Наивысшим приоритетом для нас является удовлетворение потребностей заказчика, благодаря регулярной и ранней поставке ценного программного обеспечения.
+
# Изменение требований приветствуется, даже на поздних стадиях разработки. Agile-процессы позволяют использовать изменения для обеспечения заказчику конкурентного преимущества.
+
# Работающий продукт следует выпускать как можно чаще, с периодичностью от пары недель до пары месяцев.
+
# На протяжении всего проекта разработчики и представители бизнеса должны ежедневно работать вместе.
+
# Над проектом должны работать мотивированные профессионалы. Чтобы работа была сделана, создайте условия, обеспечьте поддержку и полностью доверьтесь им.
+
# Непосредственное общение является наиболее практичным и эффективным способом обмена информацией как с самой командой, так и внутри команды.
+
# Работающий продукт — основной показатель прогресса.
+
# Инвесторы, разработчики и пользователи должны иметь возможность поддерживать постоянный ритм бесконечно. Agile помогает наладить такой устойчивый процесс разработки.
+
# Постоянное внимание к техническому совершенству и качеству проектирования повышает гибкость проекта.
+
# Простота — искусство минимизации лишней работы — крайне необходима.
+
# Самые лучшие требования, архитектурные и технические решения рождаются у самоорганизующихся команд.
+
# Команда должна систематически анализировать возможные способы улучшения эффективности и соответственно корректировать стиль своей работы.
+
 
+
Из этих принципов важно понять, что главная цель – удовлетворить заказчика (бизнес, стейкхолдеров, пользователей).
+
 
+
Agile манифест заявил, что '''изменяющиеся требования – это не зло, а благо''' и не надо с этим бороться, так как оно позволяет заказчику достигать конкурентного преимущества.  То есть это и есть тот очень важный инструмент, с помощью которого мы сможем удовлетворить заказчика.
+
 
+
Следует также знать, что '''единственной метрикой того, как идет разработка продукта – является сам продукт''' (работающий продукт). Никакие метрики, никакие отчёты напрямую не показывают насколько вы успешны в достижение требуемой цели.
+
 
+
Agile в качестве определенной аксиомы ставит условие взаимного сотрудничества и уважения. С самого начала авторы Agile говорят о том, что работать по таким принципам возможно и следует только в условиях, когда люди работающие над общим продуктом (в том числе заказчики, пользователи и представители бизнеса), выстраивают свое сотрудничество на основе взаимного доверия.
+
 
+
Постоянное самосовершенствование является одним из ключевых факторов достижения цели проекта.
+
 
+
 
+
== Роли ==
+
Ответственность за результат делится между тремя ролями:
+
* '''Владелец продукта'''
+
** определяет проектные цели,
+
** разрабатывает оптимальный график при заданных проектных параметрах,
+
** адаптирует процесс выполнения проекта к изменившимся требованиям,
+
** устанавливает приоритеты в характеристиках продукта
+
* '''Scrum мастер'''
+
** устанавливает приоритеты в выполнении задач командой проекта,
+
** устраняет возникающие затруднения, препятствующие выполнению задач
+
* '''Члены команды'''
+
** выполняют большинство поставленных задач,
+
** осуществляют ежедневный менеджмент,
+
** создают отчеты о ходе выполнения проекта,
+
** контролируют качество продукта
+
 
+
 
+
== Agile-методологии ==
+
* Feature Driven Development (FDD), 1997 г.
+
* Dynamic Systems Development Method (DSDM), 1994 г.
+
* Crystal Methods, 1992 г.
+
* XP (Extreme programming), 1995 г.
+
* [[Scrum]], 1995 г.
+
 
+
  
 
== Ссылки ==
 
== Ссылки ==
Примеры внедрения agile и других гибких методов в системной инженерии:
+
Примеры внедрения agile и других гибких методов в [[Системная инженерия|системной инженерии]]:
* [https://www.aiaa.org/uploadedFiles/Events/Conferences/2012_Conferences/2012-%20Complex-Aerospace-Systems-Exchange-Event/Detailed_Program/CASE2012_2-%204_Muratore_presentation.pdf организация хода разработок в компании SpaceX]. Главная там фраза — focus on tools not rules. А потом test rigorously and often.
+
* [http://sewiki.ru/images/0/00/CASE2012_2-4_Muratore_presentation.pdf организация хода разработок в компании SpaceX]. Главная там фраза — '''focus on tools not rules'''. А потом '''test rigorously and often'''.
 
* производство автомобиля: [http://www.youtube.com/watch?v=x8jdx-lf2Dw видеорассказ], [http://wikispeed.org/the-car/ описание автомобиля], [http://scrumlab.scruminc.com/articles.html/_/open/extreme-manufacturing-r93 eXtreme manufacturing], [http://wikispeed.org/2013/07/tdd-for-hardware/ TDD for hardware]. Главное там было — обеспечить высокую скорость изменений, и указывались примерно те же механизмы, что и в SpaceX (обмен информацией через сеть вместо традиционных control boards, даже была оговорка, что ещё лет пять назад это было бы невозможно по причине недоразвитости сетевых сервисов, а лет десять назад всех этих сервисов вообще не существовало).
 
* производство автомобиля: [http://www.youtube.com/watch?v=x8jdx-lf2Dw видеорассказ], [http://wikispeed.org/the-car/ описание автомобиля], [http://scrumlab.scruminc.com/articles.html/_/open/extreme-manufacturing-r93 eXtreme manufacturing], [http://wikispeed.org/2013/07/tdd-for-hardware/ TDD for hardware]. Главное там было — обеспечить высокую скорость изменений, и указывались примерно те же механизмы, что и в SpaceX (обмен информацией через сеть вместо традиционных control boards, даже была оговорка, что ещё лет пять назад это было бы невозможно по причине недоразвитости сетевых сервисов, а лет десять назад всех этих сервисов вообще не существовало).
* [http://www.lean-systemsengineering.org/downloads-products/lean-enablers-for-systems-engineering/downloads-lean-enabler-for-systems-engineering/ lean systems engineering]. Это всё бесполезно читать, если вы не прочли про «непереводимое» на русский [http://en.wikipedia.org/wiki/Lean_manufacturing lean manufacturing] (наиболее точно тут будет «не делать ничего лишнего»). Но и с прочтённым тоже может быть не просто.
+
* [http://www.lean-systems-engineering.org/downloads-products/lean-enablers-for-systems-engineering/downloads-lean-enabler-for-systems-engineering/ lean systems engineering] – "[[Бережливое производство|бережливая]]" системная инженерия
* Пример связи подходов lean и agile может быть найден в книге [http://www.infoq.com/resource/news/2010/01/kanban-scrumminibook/en/resources/KanbanAndScrum-Russian.pdf «Kanban and Scrum. Making the most of both»] (это для софта, но там довольно популярно изложено несколько идей общего вида. Русский перевод!).
+
* [http://www.infoq.com/resource/news/2010/01/kanban-scrumminibook/en/resources/KanbanAndScrum-Russian.pdf «Kanban and Scrum. Making the most of both»] – пример связи подходов [[Бережливое производство|lean]] и agile.
* [http://incose-ru.livejournal.com/45719.html concurrent engineering] по духу близко к agile. [http://www.myvi.ru/watch/WxsZCtYxMEyyp5QLEIp_Aw2 Впечатляющий пример] – как стадион разбили на 12 секторов, и пока один сектор проектировали, предыдущий строили, а пред-предыдущий отделывали (6й сезон 14й фильм из замечательной [http://en.wikipedia.org/wiki/Extreme_Engineering серии телевизионных документальных фильмов про мастерство инженеров]).
+
* [http://www.myvi.ru/watch/WxsZCtYxMEyyp5QLEIp_Aw2 Впечатляющий пример] – как стадион разбили на 12 секторов, и пока один сектор проектировали, предыдущий строили, а пред-предыдущий отделывали (6й сезон 14й фильм из замечательной [http://en.wikipedia.org/wiki/Extreme_Engineering серии телевизионных документальных фильмов про мастерство инженеров]).
  
 +
== См. также ==
 +
* [[Параллельная инженерия]] - разработка систем, по духу близкая к Agile
 +
* [[Business Agility]] - модель для гибких организаций
  
[[Категория:Практики]]
+
[[Категория:Подходы]]
 +
[[Категория:Модели ЖЦ]]

Текущая версия на 02:40, 27 августа 2019

Agile (на русский обычно не переводится, хотя иногда говорят о “гибких методах”) — серия подходов к разработке программного обеспечения, ориентированных на использование интерактивной разработки, динамическое формирование требований и обеспечение их реализации в результате постоянного взаимодействия внутри самоорганизующихся рабочих групп, состоящих из специалистов различного профиля.

В системной инженерии “железных” систем методы agile пока используются мало, но в последние годы ситуация быстро меняется: разработка определения системы в существенной мере оказывается похожей на разработку программного обеспечения, и в ней для разработки моделей могут быть использованы практики, зарекомендовавшие себя при разработке ПО.

Гибкое моделирование

Метод описания архитектуры программной системы, который следует идее того, что содержимое важнее представления. Это обеспечивает простоту, понятность, достаточную точность и единообразие создаваемых моделей. Простота документа гарантирует активное участие заинтересованных сторон в моделировании артефактов. Более подробно этот подход рассматривается в книге Скотта Амблера «Гибкие технологии: экстремальное программирование и унифицированный процесс разработки» (J. Wiley, ISBN-10: 0471202827, ISBN-13: 978-0471202820; Питер, ISBN 5-94723-545-5, 0-471-20282-7).

Критика

  • При agile-подходе часто пренебрегают созданием плана («дорожной карты») развития продукта, равно как и управлением требованиями, в процессе которого и формируется такая «карта». Гибкий подход к управлению требованиями не подразумевает далеко идущих планов (по сути, управления требованиями просто не существует в данной методологии), а подразумевает возможность заказчика вдруг и неожиданно в конце каждой итерации выставлять новые требования, часто противоречащие архитектуре уже созданного и поставляемого продукта. Такое иногда приводит к катастрофическим «авралам» с массовым рефакторингом и переделками практически на каждой очередной итерации.
  • Считается, что работа в agile мотивирует разработчиков решать все поступившие задачи простейшим и быстрейшим возможным способом, при этом зачастую не обращая внимания на правильность кода с точки зрения требований нижележащей платформы (подход — «работает, и ладно», при этом не учитывается, что может перестать работать при малейшем изменении или же дать тяжёлые к воспроизводству дефекты после реального развёртывания у клиента). Это приводит к снижению качества продукта и накоплению дефектов.

Ссылки

Примеры внедрения agile и других гибких методов в системной инженерии:

См. также