Файл: Гибкая модель разработки программного обеспечения Agile.pdf
Добавлен: 29.06.2023
Просмотров: 187
Скачиваний: 4
СОДЕРЖАНИЕ
Глава 1 Теоретические основы гибкой методологии разработки Agile
Понятие гибкой методологии разработки Agile
1.2 История выпуска Agile манифеста
Глава 2 Плюсы и минусы методологий гибкой разработки Agile
2.1 Разновидности методологий гибкой разработки Agile
2.2 Секрет успеха и Agile-провалы больших компаний
Глава 3 Решение по управлению Agile проектами на примере методологии Scrum
Глава 2 Плюсы и минусы методологий гибкой разработки Agile
2.1 Разновидности методологий гибкой разработки Agile
На основании ценностей и принципов, определенных в Agile Manifesto были сформированы следующие гибкие методологии разработки[5]:
- Agile Modeling (AM) - данный подход в основе своей определяет процедуры моделирования (в т.ч. проверка модели кодом) и документирования в рамках разработки программного обеспечения. В меньшей степени описаны процедуры проектирования и построения диаграмм на UML. также не затронуты области разработки, тестирования, управления проектом, развертывания и сопровождения.
- Agile Unified Process (AUP) - унифицированная версия методологии RUP (IBM Rational Unified Process), которая была сформирована Скоттом Амблером. AUP определяет модель создания программного обеспечения в рамках бизнес-приложений.
- Agile Data Method (ADM) — набор итеративных методик гибкой разработки программного обеспечения, в рамках которых делается упор на формирование требований и решений посредством сотрудничества различных кросс-функциональных команд.
- Dynamic Systems Development Method (DSDM) - итеративный и инкрементный подход, базирующийся концепции быстрой разработки приложений - Rapid Application Development (RAD), упор в котором делается на максимальное привлечение конечного пользователя к разработке программного продукта.
- Essential Unified Process (EssUP) - подход, разработанный Иваром Якобсоном (Ivar Jacobson), содержит в себе методы итеративной разработки программного обеспечения, с упором на архитектуру продукта и наработанные практики команды (по сути заимствованные из RUP, CMMI и Agile Development). Идея заключается в том, что вы используете только те практики и методы, которые применимы в конкретной ситуации. На основе выбранных методов и практик определяется целевой процесс. В отличие от RUP, где все практики и методы взаимосвязаны, в данном случае появляется гибкость и возможность вычленить из всего доступного объема именно необходимые элементы (методы и практики).
- Extreme programming (XP) - идея экстремального программирования заключается в том, чтобы использовать уже имеющиеся лучшие практики в области разработки программного обеспечения, подняв их на новый (экстремальный) уровень. Например в отличие от обычной практики, когда один программист последовательно проверяет написанный код за своим коллегой, в экстремальном программировании данная проверка осуществляется параллельно, что увеличивает скорость выпуска продукта, но и риски тоже.
- Feature driven development (FDD) - основное ограничение, которое накладывается в рамках данного подхода, это "каждая функция должна быть реализована не более, чем за две недели". Т.е. если реально разработать функцию за один присест, то это хорошо, в противном случае данная функция должна разбиться на несколько и реализовываться постепенно.
- Getting Real (GR) - в рамках данного подхода исключены процедуры функциональных спецификаций, использующийся для веб-приложений. Разработка начинается от обратного, изначально разрабатывается интерфейс и дизайн, а потом сама функциональность.
- OpenUP (OUP) - данный подход определяет итеративно-инкрементальный метод разработки программного обеспечения. Разработан на основе RUP. В рамках данного метода определен жизненный цикл разработки (фаза запуска, фаза уточнения, фаза разработки и передачи заказчику). Благодаря определенной этапности и контрольных точек, повышается эффективность контроля и мониторинга хода реализации проекта, как следствие своевременное принятие решений по проекту.
- lean software development - данный подход основан на концепции бережливого управления производственным предприятием (lean production, lean manufacturing).
- Scrum - один из самых распространенных подходов гибкой разработки программного обеспечения, определяет правила управления процессом разработки с применением существующих практик разработки. Упор осуществляется на вовлеченность Заказчика в процесс (возможность после каждого этапа менять или уточнять требования к создаваемому продукту), что позволяет вовремя определить отклонения и внести необходимые изменения.
2.2 Секрет успеха и Agile-провалы больших компаний
Agile — это действительно передовая и эффективная методология. Но, как говорится, что русскому хорошо, то немцу смерть. Так и Agile. В течение одного года было проконсультировано три стартапа, разрабатывающих ПО в различных областях - от прогрессивной файловой системы до платформы для интернет магазинов. Всем им было достаточно двух-трех недель массированного обучения принципам Agile для того, чтобы перевести процесс разработки на новый лад и выпускать версию раз в две недели.
Совсем по-другому обстояло дело у глобального поставщика телекоммуникационных систем. Компания была на грани срыва поставки нескольких проектов обновления ПО общей стоимостью более $1 миллиона. Причина проста - перевод нескольких компонентов на систему постоянной интеграции. До запуска интеграционных тестов с реальной базой данных все работало хорошо, и, конечно же, все полетело, когда данные были обновлены.
Это не случайность - Agile отлично работает в стартапах, маленьких командах, но на больших проектах, как правило, приводит к большим проблемам: отсрочкам запуска на месяцы и даже полному провалу
Почему это происходит? При разработке по Agile все делается двухнедельными спринтами - в продакшн отправляются небольшие изменения. По статистике, собранной и опубликованной Puppet, лидером управления конфигураций, багов в таких обновлениях содержится в три раза меньше.
На первый взгляд, отлично, однако на самом деле работы у Quality Assurance реально прибавляется, так как при уменьшении количества проблем в три раза скорость поставки увеличивается в 200 раз. Простая математика, и результат не такой уж обнадеживающий - общее количество проблем увеличивается более чем в 60 раз. Очевидно, что при такой нагрузке служба не справляется с тестированием - пропускает серьезные ошибки, не успевает проверить работу системы в целом и прочее.
Один из принципов Agile стоит на личной ответственности человека, а не на отлаживании внутренних процессов[6]. И в этом заключается еще один «большой секрет для маленькой компании» - некоторые стартапы и большие ИТ-компании (преимущественно из Кремниевой долины) могут позволить себе нанимать крутых специалистов. И это еще одна причина, почему у них все работает хорошо. Возможно, будь у этих людей в распоряжении просто лопата, а не самая модная методология, они бы все равно сделали все очень круто.
В больших же компаниях работает много людей, и большинство из них - это средние специалисты. Конечно, каждый работодатель стремится к тому, чтобы брать к себе лучших, и HR-служба действительно старается. Однако статистика - штука строгая, но справедливая - все лучшие очень быстро делятся на хороших, средних и не очень хороших. И в конце концов все работают как среднестатистические специалисты. В этом случае проекты будут работать хорошо, только если сама методология это позволяет. Потому что при таком раскладе уже нельзя полностью полагаться на хорошую работу сотрудников.
Да, вышеупомянутые Google, Facebook и Uber - это большие компании. И да, они тоже подвержены «болезням» Agile - время от времени все мы это видим сами или читаем жалобы других пользователей - вчера сервис не работал полдня, сегодня был недоступен полчаса и так далее. Но в этих компаниях цепочки работают почти безупречно, и в случае возникновения проблем команда устраняет их очень быстро. Хотя сейчас проблем становится все больше, и даже в условиях четко отлаженной коммуникации сроки их устранения увеличиваются.
Но все ли могут работать так, как Google? Наверное, банки и другие организации, деятельность которых регламентируется законом, должны всё-таки выстраивать процессы и создавать такую систему, которая сделает эффективной работу любого человека и не допустит серьезных ошибок.
Рассмотрим Agile-провалы больших компаний.
Agile очень привлекателен, и перед ним не смогли устоять не только российские банки, но и многие крупные мировые бренды. И почти все они потерпели неудачу или даже хуже.
Например, в июле 2015 года торги на Нью-Йоркской фондовой бирже были остановлены на четыре часа. Первоначальная версия сбоя основывалась на кибератаке, но проблема оказалась всего-навсего в баге во время очередного обновления. Сложно даже представить, во сколько миллиардов обошлись эти четыре часа простоя центра мировой торговли.
Ладно брокеры - сейчас потеряли миллиард, потом заработали два. Но у авиакомпаний совсем другая история. Примерно так же после банального обновления ПО авиакомпании «Дельта» информация перестала поступать в диспетчерскую систему, и все рейсы пришлось отменить. И здесь, кроме прямых убытков, у авиакомпании возникли репутационные проблемы.
Наверное, один из самых громких провалов применения Agile - это запуск известной американской системы медицинского страхования Obama Care
Для тех, кто не знает, поясню, что суть этой программы заключалась в предоставлении бесплатных страховых полисов для определенных категорий граждан США.
Чтобы получить право на этот полис, нужно заполнить анкету на сайте и дождаться решения от соответствующих служб. Естественно, сразу после запуска на сайт повалили тысячи и тысячи желающих бесплатной медицины, которые заполняли и заполняли анкеты. Но вот беда - они анкеты заполняли (а анкета там «ого-го»- кто подавал на получение американской визы, думаю, может себе представить), но не могли их отправить - падал сервер.
Obama Care «полетела» примерно через полгода после запуска. Для того, чтобы все заработало, пришлось пригласить внешнего специалиста-консультанта, который смог оценить картину целиком и, начав с конца - с продакшена, постепенно собирал части системы воедино и все-таки добился слаженной работы.
Agile плохо описывает процессы управления требованиями, можно сказать, что такое понятие просто отсутствует т.к. гибкая методология разработки не подразумевает под собой долгосрочного планирования (планирование осуществляется на краткосрочную перспективу), как следствие пропущен шаг формирования плана развития продукта или другими словами дорожной карты продукта[7]. Т.к. планирование краткосрочное (на ближайшую итерацию разработки), а Заказчик по окончанию каждой итерации принимает продукт и выставляет новые требования, сам продукт может поменяться в корни, а выставляемые новые требования зачастую противоречат структуре и архитектуре продукта уже поставляемого клиентам. По большому счету, в случае, если Заказчик не до конца понимает, что хочет увидеть в итоге (конечный продукт), а понимание приходит во время разработки (это случается в 90% случаев), процесс разработки превращается в формализованную и легализованную бюрократию т.е. продукт дорабатывается бесконечно, пока не кончаются деньги, или заказчик не переключается на другой продукт. Справедливости ради, необходимо заметить, что Заказчик знает на что идет и сам решает, платить за разработку продукта или нет, по большому счету команда разработчиков просто выполняет требования заказчика. Однако, реально, в работе это приводит к хаосу, срыву сроков и авралам, что порождает новые требования, которые меняют не в лучшую сторону продукт. Более того, снижается качество разрабатываемого продукта, т.к. Agile определяет подход к разработке, в рамках которого необходимо быстро тушить пожары, наиболее простым и быстрым способом. Код пишется не соблюдая требований платформы, на которой разрабатывается продукт, появляется множество обходных решений и дефектов, а такая конструкция не очень устойчива и не безопасна, растет негодование клиентов от частых сбоев в работе программного обеспечения. Бизнес на выходе получает потери, падает качество планирования.
Некоторые эксперты Agile ассоциируют больше с подходом по совершенствованию уже готового продукта, нежели разработки нового. Сторонников много у гибкой методологии разработки, ровно, как и противников. Последние в свое время даже выпустили Anti Agile Manifesto. Далее в ознакомительных целях, мы приводим содержание двух, наиболее популярных манифестов, противоречащих основному манифесу Agileэ
Глава 3 Решение по управлению Agile проектами на примере методологии Scrum
Следуя основным принципам гибкой разработки (Agile) мы постарались сделать систему управления Agile проектами Devprom AgileTeam инструментом, который сможет по-настоящему упростить работу проектной команды, при этом оставаясь максимально гибким и простым в установке и использовании.
В зависимости от особенностей вашего проекта, размера и возможностей команды вы можете отключить лишние для вас элементы процесса разработки (например, сбор требований, описание тестовых сценариев), не следовать формальным процедурам и получать максимум преимуществ от итерационной разработки с непрерывным и частым выпуском работающих продуктов. Далее описывается реализация основных инструментов гибкой разработки в Devprom AgileTeam, на примере методологии Scrum.
1. Истории пользователей (User stories, Пожелания) (рис.1)
- Пожелания или истории пользователей являются одними из самых базовых инструментов гибкой разработки; они относительно небольшие, удобные для составления, обсуждения, планирования, оценки и последующей работы над ними.
- Каждое пожелание, в зависимости от размера и сложности реализации, в процессе работы команды над ним может как превратиться в полноценное описание требования к системе, так и просто быть декомпозированным на набор задач в итерации.
- Возможности приоритезации позволяют вашей команде сконцентрироваться на наиболее значимых и важных историях пользователей. Оценка трудоемкости каждой истории позволяет планировать сроки ее реализации, тем самым управляя ожиданиями заказчика.
Рисунок 1 - Истории пользователей (User stories, Пожелания)
2. Журналы пожеланий (Product Backlog, Release backlog)
- В журнале пожеланий продукта содержатся все истории пользователей, существующие по продукту, с возможностью быстрой фильтрации по дате добавления, типу, приоритету, состоянию разработки и другим параметрам. Представление в виде простого списка с детализацией позволяет максимально эффективно управлять всем бэклогом продукта.
- Журнал пожеланий релиза предназначен для формирования правильных ожиданий владельца продукта, команды и заказчика за счет простого и удобного механизма управления релизами и переноса пожеланий между ними.
- Группировка пожеланий по компонентам, целям, ожиданиям и другим критериям осуществляется за счет простого механизма тэгов, образующих специализированные "срезы" журнала пожеланий продукта.