Как Организовать Тестирование Для Ускорения И Стабилизации Релизов Продуктов. Часть 1

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

Результатом будут постоянные срывы, конфликты и снижение темпа работы.

Быстрые и предсказуемые релизы в таких условиях будут недостижимы.

Меня зовут Виктория Дежкина, я занимаюсь тестированием в отделе разработки и поддержки продуктов больших данных X5 Retail Group. Расскажу, как мы изменили процесс тестирования в одной из наших продуктовых команд, чтобы ускорить подготовку релизов почти вдвое и избавить команду от стресса.

Сейчас мы реализуем такой подход к тестированию в других продуктах компании.



Как организовать тестирование для ускорения и стабилизации релизов продуктов.
</p><p>
 Часть 1

В дирекции больших данных X5 Retail Group сейчас разрабатывается 13 продуктов, 4 из которых находятся в отделе монетизации, где продукты ориентированы на внешний рынок, и любая ошибка, будь то дефект продукта или поздно выпущенная функция, имеет экономический эффект и приводит к потере клиентов.

По сути, это внутренние команды, которые зарабатывают деньги на внешнем рынке и играют по правилам малого бизнеса внутри крупной компании.

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

другие на время отпуска.

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

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

Не уведомляя друг друга, они делают это одновременно и в итоге получают ложные результаты, потому что СУБД «спустилась», причем непонятно из-за кого.

Мы хотели сэкономить время на переговорах, но в итоге потратили кучу времени без каких-либо результатов.

Также возможна потеря данных.

Допустим, один из продуктов занимает бесплатный тестовый сервер, никого об этом не предупреждая.

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

Это, конечно, не пользовательские данные, а всего лишь тестовые данные, но все равно довольно неприятный случай.

Работников может просто не хватить, если работы не планируются заранее.

Например, сейчас нагрузочное тестирование в нашей Дирекции работает в сервисном формате, то есть мы выделяем в команды соответствующего специалиста по запросу.

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

Думается, что самый простой выход в этой ситуации — установить единые правила взаимодействия для всех продуктов.

Но проблема в том, что все продукты разные.

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

Другая часть разработана для внешних пользователей — например, для поставщиков.

У этих изделий совершенно другая логика архитектурных решений и критерии качества.

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

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

Эти два фактора – совместная работа на одной территории и уникальные особенности продукта – поставили нас перед задача: разработать правила, которые позволят командам не мешать друг другу, но в то же время не будут связывать тестировщиков и разработчиков по рукам и ногам и не будет сводить разработку разных продуктов к одному шаблону, отсекая все преимущества agile и продуктового подхода на корню.

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

Дело в том, что в силу специфики нашей работы мы видим продукт целиком, тогда как разработчики обычно сосредоточены на одном небольшом участке.

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

Мы уже писали, Как происходит эта коллективная работа? : на начальном этапе нам буквально приходится составлять единый словарь, чтобы не путаться в терминах.

Но это только начало.

Дальше нам предстоит согласовать массу разных нюансов.

Расскажу, как это произошло, на примере одного из наших продуктов — системы автоматизации закупок для торговых сетей.

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



Какие процессы изменились в нашем продукте?

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

минута.

Что-то нужно было изменить.

Важно отметить, что изменения являются общей причиной.

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

Любые изменения должны обсуждаться всей командой, чтобы собрать как можно больше идей и не упустить возможные риски.

Менеджер по доставке и продукту нашего продукта до меня систематически работал над улучшением процессов как с технической, так и с продуктовой стороны.

Когда я присоединился к команде, я посмотрел на процесс с точки зрения тестирования, и вместе мы разработали согласованную «стратегию изменений».

Первым пунктом в нем было изменение вёрстки кода.



Порядок расположения кода

Порядок расположения — одна из главных «болей» разработки команды, и проблемы здесь могут быть самые разные.

Например, у команды есть только одна ветка кода, и исправления ошибок продолжаются там.

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

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

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

Проще всего было бы разделить процесс на две ветки с «чистым» и «грязным» кодом.

Но нам нужно было выполнить множество условий:

  • Избегайте исправления одного и того же дефекта в разных задачах.

  • Запретить выпуск непроверенных задач в производство при развертывании уже проверенных
  • Получите возможность проверять задачи как «по одному», так и всю «сборку релиза»
  • Организовать параллельный процесс тестирования и разработки.

  • Возможность в любой момент увидеть, какие задачи готовы к развертыванию и какие задачи находятся в разных тестовых средах.

  • Предоставьте разработчикам серверной и внешней части доступ к совместной разработке.

Мы потратили 2 часа на обсуждение новой схемы работы и пришли к следующему: создаем три ветки, две из них (релиз и мастер) будут с чистым кодом.

«Основная версия» содержит текущую версию продукта, а «релиз» содержит функции, готовые к развертыванию.

Тестирование происходит в Dev, здесь находятся готовые к тестированию задачи, разработка происходит локально.

Развертывание в каждую ветку происходит по согласованию с тестировщиком.

Так:

Как организовать тестирование для ускорения и стабилизации релизов продуктов.
</p><p>
 Часть 1

Что это дало нам с точки зрения тестирования:

  • Время, необходимое для тестирования каждой задачи в отдельности, сократилось на 20%.

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

  • К запланированному дню совершения релиза непроверенными остались 1-2 задачи вместо 4 (то есть время на их проверку сократилось вдвое).

  • Время интеграционного тестирования и тестирования релиз-кандидатов сокращено с 6 часов до 2 (включая повторное тестирование).

  • Уменьшилось количество дефектов, обнаруживаемых на стадии релиза.

    Раньше в первой версии релиза мы находили их более 10, а теперь не более 4. Время повторного тестирования сократилось на 2 часа.

  • Появилась возможность продолжать разработку параллельно с тестированием.

Общее время, потраченное нами на тестирование, затянувшее выкатку на продакшен, сократилось на 8 часов.

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

Неплохо? Но проблемы остались.

  • Разработчики потратили время на уведомление тестировщика о готовности задачи, отвлеклись и потеряли контекст задачи, когда нужно было выкатить ее на тестирование.

  • На релиз-кандидате продолжали появляться ошибки, связанные с неравным развертыванием для тестирования, релиза и так далее.

  • При таком подходе исправления в рабочей среде были возможны только сразу после развертывания.

  • Не было понимания, когда и где проводить нагрузочное тестирование.

Итог: мы продолжали работать допоздна в день релиза.

Мы снова собрались.

Некоторые проблемы были решены за счет уточнения процесса разработки и добавления CI:

Как организовать тестирование для ускорения и стабилизации релизов продуктов.
</p><p>
 Часть 1

Автоматический развертывание на все среды мы настраивали почти месяц, но это дало ускорение времени почти на 2 рабочих дня.

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

Автоматический развертывание либо нарушал главный принцип тестирования «в любой момент времени тестировщик должен знать, что есть в каждой среде», либо тормозил разработчиков, которые не могли завершить разработку задачи без разрешения на выкатку на тест. Это трудная дилемма.

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

Например, если дефект исправляется совместно с «чистой задачей», то при выкатке исправленной задачи она обязательно отловит дефектную.

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

Поэтому проблему с оставшимися ошибками мы решили другим способом – особым подходом к планировке, а затем добавлением еще одного стенда.



Планирование разработки и тестирования

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

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

В результате, когда эти случаи возникали в процессе тестирования, они добавлялись в отдельную задачу, требовали времени на проработку и увеличивали объём релиза, а иногда даже обнаруживались только в релиз-кандидате, на этапе совместное тестирование задач, перенос развертывания на неопределенный срок.

Мы собрали трёх человек — тестировщика, доставки и продукта — и придумали новую схему взаимодействия.

Теперь мы проговариваем все возможные ошибки до начала разработки.

Пришлось стать скучным отличником, который на этапе планирования спрашивает обо всем и вся: «Что будет, если отвалится сторонний сервисЭ», «А что, если вместо 0 мы получим nullЭ», «А что если мы не получаем все данные? «А вдруг печенеги нападутЭ» и так далее, но теперь мы были готовы ко всему.

Также мы начали обсуждать, как именно мы будем реализовывать ту или иную задачу и как будем ее тестировать.

Это позволило сократить самодеятельность (изобретение всяких велосипедов, например) и дало каждому участнику команды понимание того, чем занимаются его коллеги.

Это, кстати, позволило отказаться от критериев приемки (АК).

Чтобы дискуссии в новом формате не стали слишком громоздкими, мы стали делать это не за 2 недели, а за неделю.

Новый порядок размещения кода и планирования задач был лишь первыми шагами.

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

  • Формат постановки и принятия задач и дефектов: Мы отошли от пользовательских историй к более удобному для нас гибриду «вариант использования + техническая проблема».

  • Тестовый момент: Мы установили 5 точек в цикле релиза, на которых тестировщики активно контролируют процесс создания продукта.

  • Правила взаимодействия связки «бэкенд — тестирование — фронтенд»: Мы разработали схему, которая позволяла проверять все данные, которые передаются между бэкендом и фронтендом.

  • Ускорение работ по исправлению дефектов: установленные правила о том, как расставлять приоритеты задач отладки, чтобы не отвлекать разработчиков без надобности.

Эти меры позволили нам сократить цикл выпуска от 2,5 недель до 1. Прирост скорости может показаться небольшим, но главным достижением стало то, что наши релизы стали более стабильными и предсказуемыми — мы получили возможность выкатывать релизы «по команде»: мы можем собраться в любой день, выкатить задачи, и по вечером все будет готово и отлажено.

Теги: #Управление проектами #инфраструктура #продукты #разработка #Большие данные #Управление продуктом #тестирование #тестирование ИТ-систем #автоматизация #продуктовое мышление #монетизация #большие данные #закупки #продукты #заказ загрузки #торговая сеть

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.