Канареечное тестирование

Что это

Тестирование новой версии/функции у небольшого количества пользователей в реальном окружении.

Канареечное тестирование проверяет новые функции в приложении, не оказывая при этом влияния на user experience или сводя это влияние к минимуму.

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

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

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

Канареечное тестирование присутствия угарного газа
Канареечное тестирование присутствия угарного газа. Устройство для оживления канарейки. Источник — Музей Английской Промышленности

Сверху кислородный баллон — да, канареек не использовали как расходный материал, вопреки расхожему мнению, им даже подавали кислород, по крайней мере в Англии. По рекомендациям ученых шахтеры пробовали брать с собой и других мелких, активно двигающихся (то есть активно потребляющих кислород) животных, тонко чувствующих газовый состав воздуха, типа мышей. Но прижились исключительно канарейки. Может быть также и потому что громко и весело щебетали и радовали суровых горняков, работающих в тяжелейших условиях. Вплоть до 1986 года в Великобритании канарейки работали живыми датчиками газов.

Аналогичным образом, канареечное тестирование программного обеспечения позволяет выявить дефекты на ранних стадиях релиза minor-функций (канареечный релиз — о нем отдельно в конце), и этим помогает предотвратить серьезные дефекты для всех пользователей.

Кто и как выполняет

Разработчики. Они проводят канареечное тестирование, развертывая определенную функцию или версию для очень небольшого количества пользователей. Цель: проверить, нет ли проблем в новом коде, прежде чем релизить его для всех пользователей. Такой подход, ограничивающий релиз небольшой группой конечных пользователей, позволяет команде проверить и оценить новую функцию, прежде чем делать ее доступной для всех (тем самым рискуя). Обычно выбирают 5-10% от общего числа пользователей.

Feature Flags

 feature-флаги (точки) в canary releases
Канареечное тестирование — feature-флаги (точки)

Канареечное тестирование часто проводится с применением так называемых feature flags, когда код релизят, но не активируют функции автоматически. Разработчики удаленно активируют эти функции у части пользователей. Метод feature-flags позволяет таргетировать приложение например на 1% пользователей, при этом мониторят метрики (количество ошибок, латентность, влияние активированной функции на бизнес-показатели). Таким образом избегают негативных последствий для всех пользователей, если что-то пойдет не так с этим апдейтом. 

И, обратно, можно легко деактивировать апдейт, переключив feature flag и отказавшись от апдейта, если пользователи не одобряют, или возникли технические сложности. Все можно делать постепенно, инкрементально, то есть поэтапно «раскрывая» функциональность пользователям. 

Полезности

Уменьшение общей проблемности кода и улучшение user experience; внедрение апдейтов на проде с минимальными проблемами для юзабилити, или вообще без каких-либо заметных осложнений для 90-99% пользовательской базы. А также:

  • Простота метода. Новые функции обычно небольшие «по коду», активированы для немногих пользователей от которых проще собрать фидбек — все просто и быстро.
  • Легко откатить изменения, если канареечный тест оказался неудачным, пользователи раздражены.
  • Low-maintenance-процесс: разработчики сосредотачиваются на небольшой части кода, запускают ее на прод, анализируют результаты, и если все ОК, переходят к следующей функции.
  • Не нужно переводить систему в downtime-состояние для релиза
  • Не нужна большая-сложная инфраструктура, все делается дешево и сердито, стоимость багфикса также небольшая.
  • Разработчики учатся экспериментировать с кодом и делают это безопасно.
  • Пользователей можно сделать бета-тестерами, они будут давать более-менее годный фидбек, а главное своевременный.

Челенджи

Помимо всяческих полезностей, метод обладает и недостатками (впрочем не очень существенными):

  • В первую очередь, риск проблем, даже для того небольшого числа пользователей
  • Не будучи должным образом автоматизированным и интегрированным в пайплайн, такое тестирование может превратиться в достаточно трудоемкий процесс, уязвимый к мелким досадным ошибкам. Впрочем грамотные DevOps’ы знают как это решать, налаживая анализ логов и работу с полученными данными.
  • Канареечное вряд ли идеально для standalone-приложений, разворачиваемых на пользовательских лэптопах, смартфонах и ПК (огромный парк устройств).
  • А если у нескольких миллионов пользователей уже, скажем, несколько десятков версий одного приложения, процесс становится ощутимо сложным.

В каких ситуациях подходит хорошо

Стандартное применение: перед релизом новых версий, для оценки «как оно вообще». Подразумевается, что код перед этим прошел тщательнейшее модульное и интеграционное тестирование, во избежание проблем с деплоем и других подобных «производственных», что позволит сосредоточиться на user experience. Вообще, канареечное тестирование можно считать хорошей практикой, позволяющей видеть код «in action» и получить фидбек реальных пользователей, прежде чем решать, годен ли код к релизу. Особенно для команд, работающих в режиме непрерывной интеграции и деплоя (ну то есть практически всех).

Еще кейс, когда такой процесс является правильным выбором — когда тестовое окружение по каким-то причинам нельзя максимально «приблизить» по условиям к прод-окружению. В таких ситуациях (очень частых) проведение канареечных тестов с небольшой группой конечных пользователей — отличный способ быстро обнаружить проблемы в live-окружении.

Что такое канареечный релиз

Как нетрудно понять из вышеизложенного, канареечный релиз (canary release) — это новая версия/функция, которую разработчики делают доступной для некоторого количества пользователей. Этот «свежий код» и называется канареечным релизом; по завершении разработки функции канареечный релиз деплоится в реальное окружение. Затем для какого-то процента пользователей новая функция активируется («флагами», о которых шла речь выше), ну и разработчики ждут отзывов (фидбека) и анализируют логи и полученные данные, а также отслеживают например, не пострадала ли производительность, и устраняют возникающие проблемы и ошибки. И поскольку канареечный релиз затрагивает лишь небольшой процент пользовательской базы, то локализация, обнаружение и устранение проблем — не требует времени, усилий, и денег. 

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

Подробнее о canary release

Мы уже знаем, что canary release — это стратегия деплоя, когда новая функция делается доступной только для ограниченного числа пользователей. Все части приложения, получившие обновления, постоянно мониторятся на предмет возникающих проблем; а также, разумеется, отслеживаются бизнес-показатели. Далее разработчики и стейкхолдеры принимают решение о внедрении новой функции для всей клиентской базы, с учетом результатов, полученных в ходе канареечного тестирования. Если при «пробах» новой функциональности не возникло никаких отрицательных явлений (особенно в сфере безопасности и производительности), то можно постепенно выкатывать обновление для остальных пользователей.

Canary-релизы различаются для веб-приложений и для мобильных. В первом случае канареечный релиз можно реализовать через две веб-версии; например расширение для Chrome можно сделать доступным только для части пользователей и проверить результат; а далее зарелизить глобально. 

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

Что с автотестами

Перед проведением канареечного тестирования следует выполнить необходимые автоматизированные тесты; это позволит убедиться, что часть кода, которая «ушла в live» выбранным пользователям, не содержит грубых багов, обладает определенным уровнем надежности. Обычно этот процесс налажен в командах; используется А/В-тестирование, полагаются на мощь современных методик DevOps, которые позволяют «в конвейерном режиме» разрабатывать, тестить, и разворачивать любые модификации кода.

Саммари и FAQ

Кратко плюсы canary-подхода: кроме подробно перечисленных выше (тихая безопасная проверка новой функции в live-окружении), также например A/B-тестирование без «даунтайма». А также плавность, постепенность введения новых функций, особенно важно если пользовательская база огромна и ошибки недопустимы.

Почему канареечный релиз и канареечное тестирование: как когда-то шахтеры брали с собой в шахту клетку с канарейкой, чтобы она сигнализировала им об опасности задохнуться — так и программисты теперь взяли в привычку тестировать свой софт сначала на небольшой части своих пользователей.


Источники: 1,2

Какой была ваша первая зарплата в QA и как вы искали первую работу?

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

1 КОММЕНТАРИЙ

Подписаться
Уведомить о
guest

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Алекс
Алекс
5 месяцев назад

Годная статья

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас