En

JazzTeam Software Development Company

Agile Java Development

Консалтинг по стабилизации процесса разработки программного продукта с целью улучшения его качества

ScrumВведение

В современном мире очень плотно укрепилось такое явление как “аутсорсинг”. Под аутсорсингом понимается процесс передачи компанией части своих функций другой компании (аутсорсеру). Обычно аутсорсер является экспертом в данной области. В результате компании могут высвобождать свои ресурсы и время. Это позволяет лучше сконцентрироваться на стратегических процессах.

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

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

Заказчик уже инвестировал в разработку программного продукта достаточное количество средств и вариант смены подрядчика был крайне нежелателен. Учитывая этот факт, было принято решение о привлечении команды консультантов, которые должны были исправить сложившуюся ситуацию и наладить процессы разработки данного программного продукта на стороне подрядчика. Одним из участников международной команды в качестве agile-консультанта выступил СЕО компании JazzTeam Дмитрий Горячко.

Описание проблемы

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

Перед командой консультантов стала непростая задача – необходимо было найти те баги, которые являлись узким горлышком (bottle neck), и исправление которых позволило бы стабилизировать работу ПО.

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

Решение проблемы

План по стабилизации процесса включал в себя поэтапное внедрение следующих практик:

  1. Внедрение парного программирования.
  2. Внедрение Scrum и Kanban.
  3. Внедрение юнит-тестирования и DDT.
  4. Внедрение CI/CD.

Первым делом команда консультантов создала дорожную карта проекта (road map), содержащую основные вехи с указанием скоупа работ, который должен быть выполнен к определенной дате. Каждая веха представляла собой контрольную точку. В итоге всем стало понятно какие задачи должны быть решены в заданный промежуток времени.

Дорожная карта

Рисунок. Дорожная карта.

Внедрение парного программирования

Техника парного программирования представляет собой процесс написания кода ПО двумя разработчиками одновременно. Один разработчик непосредственно решает задачу – детально пишет код, а другой – следит за процессом, наблюдая за картиной создания кода со стороны. Периодически (обычно каждые 30 мин – 1час) программисты меняются ролями.

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

Внедрение Scrum / Kanban

Команда консультантов принялась настраивать процесс контроля выполнения задач в соответствии с agile-методологиями Scrum и Kanban. Scrum – фреймворк управления проектами (в первую очередь, связанных с разработкой ПО) позволяющий в жёстко фиксированные и небольшие по времени итерации, называемые спринтами (sprints), предоставлять заказчику работающий продукт (инкремент продукта) с новыми бизнес-возможностями, для которых определён наибольший приоритет. Это позволило спланировать процесс разработки таким образом, что в работу на конкретный спринт брались самые приоритетные задачи из бэклога продукта, что позволило существенно продвинуться вперед, как с точки зрения разработки, так и с точки зрения развития бизнеса.

Kanban – фреймворк управления проектами, позволяющий команде разработки реализовывать принцип “точно в срок” (Just In Time). Этот метод позволяет визуализировать процесс разработки задач и ограничивать объем незавершенной работы для повышения максимальной эффективности. Kanban отлично подошел команде в процессе багфиксинга, когда поступало множество запросов, различающихся по важности и объему работы. Kanban позволил адаптироваться к изменениям на проекте.

Немаловажным моментом всего процесса консалтинга стало введение практики обязательных стендапов внутри команды разработки. Стендап – это ежедневное собрание всей команды. На стендапе каждый участник команды рассказывает про свой прогресс за прошлый рабочий день, с какими трудностями столкнулся, какой план работы у него на текущий (следующий день). Стендапы позволили оперативно выявлять проблемы на проекте, и команда смогла оперативно эти проблемы решать. Стендапы тесно связаны с одним из самых важных артефактов Scrum – Scrum доской. Это удобный инструмент для визуализации процесса разработки ПО, отражающий на каком конкретном этапе жизненного цикла разработки находится та, или иная задача. Дополнительно, с правилами проведения стендапов и SCRUM доской можно ознакомиться в нашей статье.

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

Команда разработки была обучена и поняла, как устроена работа по Scrum и Kanban, а также высоко оценила их внедрение в процесс разработки ПО.

Работа по Scrum и Kanban

Рисунок. Реализация Scrum и Kanban.

Таким образом менеджеры и непосредственно сам заказчик начали контролировать эволюцию проекта и понимать на каком этапе находится разработка программного продукта.

Внедрение Data Driven Testing

На следующем этапе команда консультантов принялась за стабилизацию работы программного продукта, выстраивание полноценного процесса тестирования и повышение качества кода. Дело в том, что после добавления новой функциональности, продукт начинал работать некорректно. Поиск багов занимал достаточно много времени и не всегда приводил к успеху. Поэтому на проекте ввели стандарт – после написания своей части кода, каждый разработчик писал Unit-тесты. А впоследствии это позволило внедрить практику подхода к автоматизированному тестированию ПО Data Driven Testing (DDT). При данном подходе тест умеет принимать набор входных параметров, и эталонный результат или эталонное состояние, с которым он должен сравнить результат, полученный в ходе прогонки входных параметров. После внесения изменений в коде, тесты запускались в автоматическом режиме и результаты просто сравнивались с эталонными. Это позволило сузить круг поиска багов, тем самым сократив время на ручное тестирование. Стало понятно какие изменения (в какой части ПО) вызывали конкретные баги.

Data Driven Testing Implementation

Рисунок. Внедрение Data Driven Testing.

Благодаря этому удалось отыскать и исправить критические баги, стабилизировать работу программного продукта и в дальнейшем быстро обнаруживать возникающие ошибки в приложении и оперативно их устранять. Подробнее с подходом Data Driven Testing можно ознакомиться в статье CEO компании JazzTeam, с примерами использования подхода.

Внедрение CI/CD

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

Было принято решение автоматизировать данный процесс путем внедрения CI/CD (Continuous Integration, Continuous delivery). Благодаря этому, удалось настроить автоматическое выполнение сборки, тестирование и релиза продукта, что позволило оперативно выявлять ошибки в продукте за счет более частных мелких обновлений. Это позволило сократить стоимость разработки и минимизировать риски выпуска продукта с критическими ошибками.

Более подробно с практиками внедрения CI/CD и применения Jenkins на проектах можно ознакомиться в нашей статье.

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

Технологии, которые были привнесены: JUnit, Maven, Jenkins, Spring, Scrum, Kanban, CI/CD.

Особенности проекта:

Результат проекта:

Достижения компании на проекте: