Изначально ПО разрабатывалось бессистемно — программисты обычно специально не обучались разработке и основам программной инженерии, но имели отличную математическую подготовку и хорошо разбирались в предметной области. Для программирования использовались отдельные машины, не подключенные к сети, и отсутствовал единый набор принципов и методов. Разработка в то время больше напоминала ремесло, чем инженерную дисциплину.

Со временем родилась дисциплина программной инженерии, установившая для процессов разработки более строгие рамки. В 1970-х, 80-х и начале 90-х годов происходил рост числа программных систем, расширялась область их применения, увеличивалась численность разработчиков. Появилась Всемирная паутина. Проблемы, связанные с инженерией ПО, росли как снежный ком, что заставило сформировать набор принципов, методов, практик и инструментов, облегчающих разработку.

В условиях перехода на сложные процессы, строгие принципы управления проектами, инструменты, методы измерения и ведения документации стали забывать о человеке как главном субъекте процесса разработки. В итоге, в самом конце прошлого века появилась альтернатива господствовавшим тогда сложным методам — методика Agile, предлагавшая упорядоченные, но простые процессы и помещавшая в центр разработки деятельность, опыт и взаимодействие людей [1]. Agile сохраняет строгость инженерных процессов и оптимальных методов, но лучше помогает создавать, развертывать и сопровождать сложное ПО.

Сегодня Agile — крупнейшее направление программной инженерии как с практической, так и с исследовательской точек зрения. Формализованная в «Манифесте Agile-разработки» в виде 4 ценностей и 12 принципов, эта методология стала сегодня предпочтительным стандартом разработки ПО во всем мире.

Agile на практике

Среди организаций, принявших участие в последнем анкетировании State Of Agile (опросе об Agile-разработке, самом масштабном и имеющем самую длительную историю проведения среди ему подобных), в 2018 году скорые методы в той или иной степени применяли 97% компаний и предприятий. Для сравнения, в 2007 году, когда опрос проводился впервые, аналогичный показатель составил 84%. Согласно последнему опросу, в 52% организаций от 50 до 100% групп разработчиков практиковали Agile.

Самым популярным вариантом Agile остается Scrum: в 2007 году им пользовались 40% респондентов, тогда как в 2018 году 56% применяли его отдельно, а 70% — в сочетании с другими методами. Методы экстремального программирования (Extreme Programming, XP), в 2007 году занимавшие второе место (23%), в 2018 году получили лишь 6% в сочетании со Scrum. Kanban, применяемый отдельно (5%) и в сочетании со Scrum (Scrumban, 8%), вытеснил с третьего места метод разработки динамических систем (dynamic systems development method, DSDM), который получил 8%. Еще один результат 2018 года: в 71% организаций сообщили, что планируют вложиться в проекты DevOps или уже инвестировали в них.

Среди проблем, упоминавшихся участниками самого первого опроса, — отсутствие предварительного планирования, документации и предсказуемости процесса разработки, а также потеря руководителями контроля над проектами. В 2018 году главные сложности уже касались перехода на организационную культуру Agile и были вызваны сопротивлением переменам и недостаточной поддержкой со стороны руководства.

Одним из примечательных результатов последнего опроса стало то, что в 84% организаций процессы Agile все еще не достигли стадии зрелости, а значит, по-прежнему существует пространство для исследований в области освоения и использования Agile.

Исследования в области Agile

В течение последних двух десятков лет методология Agile показала феноменальный рост применения и стала важным объектом исследований в области программной инженерии. Основные направления исследований: внедрение, методы, практики, кадровые и социальные аспекты, Agile и инженерия ПО во всем мире, Agile и удобство использования, Agile и набор моделей CMMI (Capability Maturity Model Integration), организационная гибкость, Agile и встроенные системы, проектирование продуктовых линеек.

Наиболее активно изучаются практики Agile. В этой области представлено семь систематических обзоров по таким темам, как разработка через тестирование, метрики, оценка объема усилий и требования. Много обзоров посвящено направлению «Agile и удобство использования», одна из основных тем которых — интеграция пользовательского опыта в Agile-процессы, что неудивительно, с учетом важности принципа ориентации на человека при разработке по этой методологии. Следующее по важности направление — «Agile и глобальные группы разработки ПО».

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

Эволюция Agile

Судя по анализу отрасли, консенсуса относительно сроков появления конкретных тенденций в области Agile нет, однако можно проследить даты выхода первых исследовательских докладов по соответствующим темам. На основании этих сведений была составлена хронология появления и развития Agile-разработки (см. рисунок) [1–3].

Взлет и эволюция Agile-разработки

Хронология появления различных тенденций в области Agile-разработки (источники: IEEE и ACM)

На ранних этапах исследовались фундаментальные основы: методы, внедрение, практики, гуманитарный и социальный аспекты, обозначенные на рисунке как «Закладка основ». Поскольку в большинстве организаций процессы Agile все еще не достигли зрелости, многие из фундаментальных тем по-прежнему актуальны. Кроме того, сами участники исследовательского сообщества продолжают призывать к созданию более прочных теоретических основ Agile.

Тенденция интеграции с программной инженерией, появившаяся в начале-середине 2000-х годов, касалась взаимоотношений Agile с традиционными разделами программной инженерии, такими как удобство использования, разработка требований, глобальная разработка, проектирование архитектуры ПО и проектирование систем, критичных к безопасности. Позднее возникли похожие тенденции, в том числе интеграция Agile c CMMI (конец 2000-х годов) и применение Agile для разработки игр. Большинство из них по-прежнему актуальны, причем на фоне активного развития блокчейнов и криптовалют наблюдается всплеск интереса к проблемам безопасности и разработки систем, критичных к безопасности.

Изначально главными плюсами Agile считали компактные, работающие в одном месте группы, близость к заказчику, акцент на программировании и раннем тестировании, а также быстрое получение откликов по каждой итерации выпущенного ПО. Однако в середине 2000-х годов произошел «выход из зоны комфорта»: начался переход от малых групп к крупномасштабным и к применению гибридного подхода — Agile на уровне индивидуальных групп и традиционные методы разработки и планирования на уровне организации в целом.

В середине 2010-х годов Agile начинают применять не только в разработке, возникла необходимость в обеспечении взаимодействия между процессами разработки и эксплуатации в рамках методов DevOps, в которые отлично укладываются принципы непрерывной поставки и обратной связи пользователей с разработчиками. Вместе с тем появляется ряд вопросов технического, социально-технологического и организационного характера. Например, когда и как нужно собирать отклики клиентов и реагировать на них, когда вносить изменения; как поступать, если ПО развернуто в нескольких организациях с разными требованиями пользователей; как эффективно тестировать непрерывно выпускаемое ПО в случае серьезных изменений инфраструктуры; как изменения в DevOps влияют на Agile-практики.

Еще одна важная тенденция — применение Agile с начала этого века за рамками разработки ПО, в смежных областях, в том числе в сфере управления знаниями и информационных системах. Благодаря принципу ориентации на человека, Agile удалось значительно сблизить дисциплины программной инженерии и информационных систем. Первая позаимствовала у второй немало фундаментальных теоретических основ, а та, в свою очередь, получила пользу от практических исследований, касающихся применения Agile в программной инженерии.

Кроме того, начиная с середины нулевых годов методы Agile получили распространение в сфере встроенных систем, а с середины 2010-х годов — в сфере проектирования продуктовых линеек. При этом в обоих случаях имелись свои собственные устоявшиеся процессы, практические методы, принципы измерения и культура взаимодействия. В частности, в мире встроенных систем инженеры чаще всего применяли каскадный метод, опирающийся на планирование, документацию, измерения и инструменты проектирования на основе моделей.

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

Конец нынешнего десятилетия ознаменовался интересом к применению Agile в разработке микросервисов, полностью меняющих принципы компоновки ПО, что влияет на проектирование архитектуры и развертывание программных продуктов, заставляя ставить новые вопросы — например, как обеспечить баланс между практиками Agile и микросервисными архитектурами, создание которых требует определенного объема предварительного планирования.

Agile в будущем

Сегодня Agile развивается в контексте разработки новых технологий Интернета вещей, аналитики больших данных, создания систем дополненной и виртуальной реальности, появления интеллектуальных решений. Кроме того, на пороге нового десятилетия в разработке ПО начинают использоваться возможности на основе искусственного интеллекта и возобновляется интерес к принципу разработки силами конечного пользователя. Можно ожидать, что в рамках исследований будет изучаться целый ряд новых вопросов.

Как использовать Agile в рамках процессов инженерии ПО, основанных на искусственном интеллекте? К сегодняшнему дню существенно выросло число публикаций о программных инструментах, опирающихся на средства искусственного интеллекта, и, наоборот, о применении искусственного интеллекта для оптимизации Agile-разработки.

Может ли Agile усовершенствовать процессы исследования данных (data science) и аналитики так же, как была усовершенствована программная инженерия? В какой степени методы Agile способны повлиять на индустрию Интернета вещей? Как обеспечить эффективность работы проектировщиков пользовательских интерфейсов всевозможных устройств в рамках групп Agile-разработки и можно ли проектировать аппаратное обеспечение «вещей» с помощью методов Agile?

Безопасность как неизменно важная проблема для разработчиков и пользователей. С одной стороны, практики Agile и непрерывной доставки ПО можно использовать для быстрого исправления проблем безопасности, с другой, становится все актуальнее потребность в более тщательном тестировании на защищенность перед развертыванием приложений. Вместе с тем тестирование не предотвратит угрозы «нулевого дня», а исправление по принципу Agile во многих обстоятельствах будет неприемлемо. Как обеспечить гарантированное выполнение требований безопасности с помощью методов Agile?

Как с помощью процессов Agile обеспечить поддержку разработки критичных к безопасности систем, в том числе для программно-конфигурируемых систем, беспилотных транспортных средств и робототехнических комплексов?

Все шире будет применяться практика разработки сложного ПО силами конечных пользователей, в том числе путем программирования, настройки, компоновки или сочетания этих методов. Способны ли Agile-практики помочь неспециалистам быстро и эффективно совершенствовать и развертывать компоненты используемых ими программных систем? Сотрутся ли границы между профессиональными группами Agile-разработки и разработчиками — конечными пользователями?

Как обеспечить успех применения Agile и DevOps в новых предметных областях, в том числе для разработки интеллектуальных систем, работающих с большими объемами данных?

***

Зародившись в конце 1990-х годов, сегодня методы Agile стали господствовать в мире программной инженерии, пройдя путь от формирования основ и интеграции с традиционными элементами разработки до применения с инструментами на основе искусственного интеллекта и средствами создания ПО силами конечных пользователей.

Основная область исследований сегодня — практическое применение Agile совместно с устоявшимися парадигмами программной инженерии. Должны быть изучены барьеры, локализованы зоны конфликтов и синергии, выработаны стратегии развития и намечены обходные пути решения проблем. Выйдя за рамки первоначальных компактных групп, Agile сегодня применяется совместно с DevOps в проектах масштаба корпораций.

Несмотря на то что история применения методологии насчитывает уже два десятка лет, в организациях все еще не пришли к нужной стадии зрелости процессов внедрения, оптимизации и адаптации Agile-практик. Одним из объектов исследований является фундаментальная проблема управления изменениями в рамках процесса, требующего как можно более быстрых перемен. Но, несмотря на неуверенность в уровне зрелости Agile-процессов, инженеров ПО сегодня воспринимают как экспертов по Agile в смежных областях, таких как встроенные системы и проектирование продуктовых линеек. Специалисты с практическим опытом в области Agile могут помогать во внедрении скорых методов вне разработки ПО, в том числе в управлении персоналом, в логистике и маркетинге, управлении проектами, исследованиях и разработке, применяя уроки, усвоенные в «родной» сфере и адаптируя их для новых условий.

Заглядывая в будущее, можно предвидеть взаимное полезное влияние Agile, технологий Интернета вещей, сервисов обработки больших данных, искусственного интеллекта и методов разработки силами конечных пользователей.

Литература

  1. 12th Annual State of Agile Survey Report, VersionOne, 2018. URL: http://stateofagile.versionone.com (дата обращения: 21.11.2018).
  2. M. Fowler, J. Highsmith. The Agile Manifesto. Software Development.— 2001. Vol. 9, N. 8. — P. 28–35. URL: http://agilemanifesto.org (дата обращения: 21.11.2018).
  3. Survey: The State of Agile Development. VersionOne, 2007. URL: http://stateofagile.versionone.com (дата обращения: 21.11.2018).

Рашина Хода (r.hoda@auckland.ac.nz) — профессор, Оклендский университет, Норсарема Саллех (norsaremah@iium.edu.my) — профессор, Международный исламский университет Малайзии, Джон Гранди (john.grundy@monash.edu) — старший заместитель декана факультета ИТ, Университет Монаша.

Rashina Hoda, Norsaremah Salleh, John Grundy, The Rise and Evolution of Agile Software Development. IEEE Software, September/October 2018, IEEE Computer Society. All rights reserved. Reprinted with permission.