Комплексная автоматизация тестирования продукта со сложной архитектурой
Заказчик
Продуктовая ИТ-компания (Англия, Великобритания).
Продукт
Система управления запасами и заказами для дистрибьюторов и электронной коммерции, включающая ERP, CRM и систему складского учёта.
Бизнес-вызовы
Сложно масштабируемый продукт с большим количеством функционала и модулей, не покрытый автотестами. Постоянные задержки релизов и возникающие на стадии продакшена баги негативно сказываются на репутации заказчика, в результате чего невозможно расширять клиентскую базу и переходить к сотрудничеству с более крупными компаниями (из-за более высокой цены ошибки). Разработка и поставка продукта происходит напряжённо и в режиме стресса для всех участников процесса.
Технологические особенности проекта
Система имеет большой codebase с нетривиальной, запутанной архитектурой и смешанными слоями кода (бизнес-слой, работа с базой данных, контроллер, UI), что делает её сложно поддерживаемой. Unit-тесты практически отсутствуют, в Definition of Done их нет, как и требований к уровню покрытия кода. Проверка качества продукта осуществляется не системно и только с помощью мануального тестирования. Компоненты системы не изолированы, из-за высокого уровня связанности при малейших изменениях кода возникают баги. Продукт очень сложно масштабировать, внедрять новые функции.
Не внедрены принципы непрерывной интеграции и поставки (CI/CD), сборка продукта и обновление серверов осуществляется вручную, что негативно сказывается на скорости поставки продукта.
Постоянные срывы релизов вызывают недовольство владельцев бизнеса и конечных заказчиков, в ответ на оказываемое давление в команде возникает нервозность, стресс. Ситуация усложняется отсутствием проактивности, технического лидерства у инженеров и накопленным на протяжении многих лет техническим долгом. Инициативам по внедрению новых инженерных практик, приносящим пользу проекту в долгосрочной перспективе, не уделяется должного внимания, из-за чего у разработчиков вырабатывается выученная беспомощность.
Подходы и решения
- Консультирование стейкхолдеров компании-заказчика по улучшению текущей ситуации на проекте. СЕО JazzTeam выступал в качестве медиатора — независимой стороны, способствующей достижению единого мнения между владельцами продукта, имеющими разные точки зрения. Каждый из них осознавал необходимость улучшение процессов, но предлагаемые ими варианты не помогали устранить источник проблемы. В первую очередь необходимо было сместить фокус с достижения краткосрочных бизнес-целей на установление культуры ценностного подхода к разработке.
- Реорганизация процессов.
- Внедрение CI/CD для осуществления автоматической сборки, регулярной проверки качества и автоматизации поставки продукта. Данный процесс был сложным, болезненным и требовал проведения целого ряда исследований для достижения полной автоматизации сборки, в том числе по обеспечению автоматической сборки выполняемых файлов продукта и внедрению Liquibase для версионного контроля на уровне базы данных. Было необходимо преодолеть недоверие со стороны команды, а также настоять на обязательном для всех применении CI/CD.
- Огромный объём и отсутствие культуры управления техническим долгом критически усложнили постоянную работу с ним на протяжении каждого спринта. На первых порах было необходимо заработать доверие команды и небольшими итеративными изменениями продемонстрировать возможность, доказать смысл проработки долга даже в условиях постоянной занятости разработчиков коммерческими задачами. Мы сфокусировались на реализации автоматической сборки выполняемых файлов продукта, и смогли её реализовать малыми затратами, притом конечный эффект позволил нам начать внедрение CI/CD, что было оценено заказчиками. Также, несмотря на некоторое сопротивление, было начато несколько исследований, по которым инженеры продвигались по 1 часу в день. Такой подход позволил не потерять фокус на поставке коммерческих задач, но вместе с тем, мы последовательно продвигались по решению накопившихся технических долгов. Ниже мы приведём несколько показательных примеров проработки критических технических долгов.
- Внедрение лучших практик разработки и порождение ценностной культуры. По согласованию с собственниками бизнеса, было решено усилить роль инженеров на проекте и увеличить степень самоорганизации команды. Для этого использовали лучшие подходы методологии Scrum. Ежедневные стендапы повысили уровень синхронизации географически распределённой команды. Демо нового функционала перед всей командой способствовали достижению общего понимания актуальных статусов на проекте. На регулярных ретроспективах оперативно решались возникающие в команде недопонимания и проблемы. Мнение всех участников проекта было выслушано, владельцы продукта начали учитывать и обрабатывать предложения и замечания инженеров. Налажена системная передача знаний внутри команды — лекции и митапы по технологической или доменной экспертизе. Всё это способствовало улучшению психологического климата и преодолению выученной беспомощности инженеров.
Результаты и достижения
- Благодаря проведённой работе заказчик смог регулярно и своевременно поставлять новый функционал, тем самым развивая и масштабируя сложнейший продукт. Была исключена деградация качества на уровне продакшена. Всё это открывает возможности для укрепления компании на рынке и сотрудничества с более крупными клиентами.
- В команде установлен ценностный подход к разработке. Владельцы продукта начали прислушиваться к предлагаемым командой инициативам, приносящим ценность в долгосрочной перспективе, сменили приоритет с достижения краткосрочных целей на стратегический подход к развитию продукта. Также владельцы продукта начали инвестировать во внедрение необходимых инженерных практик (CI/CD, Unit testing, автоматизацию тестирования). Устранению технических долгов уделяется время на протяжении каждого спринта, порождены долговременные технологические исследования.
- Благодаря внедрению CI/CD процесс сборки и поставки продукта автоматизирован, стал быстрым, прозрачным и безопасным. Это позволило наладить регулярность релизов.
- Сложный codebase приложения покрыт Unit-тестами, благодаря чему удалось стабилизировать качество системы при внесении изменений.
- Комплексная автоматизация тестирования значительно повысила качество продукта, позволила сократить время на разработку и поддержку приложения. Системное покрытие автотестами обеспечило возможность быстрого обнаружения багов при реализации нового функционала. Это обеспечило возможность своевременного развития для сохранения конкурентоспособности продукта.
- Повышен уровень синхронизации между членами распределённой команды и владельцами продукта. У инженеров появилась мотивация к преодолению выученной беспомощности, использованию проактивного подхода в процессе работы над задачами. Улучшен психологический климат в команде, процесс разработки проходит в более спокойной обстановке без ненужного стресса и нервозности.
Применённые технологии

Selenium

Selenide

Pipelines

TestNG

AssertJ

Allure

Jenkins

Groovy

REST-assured

Jenkins 2.0

Jenkins Shared Library
ЗАИНТЕРЕСОВАНЫ В СОТРУДНИЧЕСТВЕ?