Канареечное тестирование – проверка новой версии приложения или новой функции с реальными пользователями в реальной среде. Это происходит путем распространения некоторых изменений кода приложения среди небольшой группы конечных пользователей, которые обычно не знают об этом.
Поскольку новый код распространяется только на небольшое количество пользователей, его влияние относительно невелико. Более того, изменения можно быстро откатить, если новый код окажется ошибочным или вызовет проблемы у пользователей. Канареечное тестирование также известно как “канареечное развертывание” или “канареечный релиз”.
Содержание:
- Определение канареечного тестирования
- Почему канареечное тестирование эффективно?
- Как работает канареечное тестирование?
- Планирование канареечного развертывания
- Выполнение канареечного развертывания
- Анализ канареечного развертывания
- Преимущества канареечного тестирования
- Недостатки канареечного тестирования
- Другие методы тестирования изменений в ПО
Определение канареечного тестирования
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туторилов, задач по автоматизации и книг по QA.
Слово “канарейка” описывает внедрение программного кода для определенного числа реальных конечных пользователей. Этот термин возник в связи с добычей угля и фразой “канарейка в угольной шахте”. Канарейки обладают меньшей, чем люди, устойчивостью к токсичным газам, поэтому их использовали для оповещения шахтеров, когда эти газы достигали опасного уровня в шахте.
При канареечном тестировании небольшая группа конечных пользователей выступает в качестве тестовой группы. Подобно канарейке в угольной шахте, эти пользователи не знают, какую роль они играют в обнаружении проблем в приложении.
Если изменения в коде вызывают проблемы, программа мониторинга оповещает команду разработчиков, чтобы они могли исправить код до того, как он будет выпущен для более широкой группы пользователей.
Почему канареечное тестирование эффективно?
Канареечный релиз – это хороший способ внедрять изменения в код, которые связаны с добавлением новых функций или созданием новой версии программного обеспечения. Это позволяет команде разработчиков быстро оценить, обеспечивают ли изменения в коде желаемые или ожидаемые результаты.
Канареечное тестирование также позволяет разработчикам попробовать новую функциональность приложения на небольшой группе пользователей. Благодаря тому, что в данном тестировании задействована лишь часть пользователей, влияние потенциальных проблем, связанных с новым функционалом, сводится к минимуму. Разработчикам проще откатить изменения и не допустить влияния ошибок новой версии приложения на всех пользователей.
Как работает канареечное тестирование?
Как и другие виды тестирования программного обеспечения, канареечное тестирование проводится по систематическому, пошаговому принципу. Ниже перечислены шаги, необходимые для проведения канареечного тестирования:
Шаг 1. Команда разработчиков выбирает пользователей в качестве тестовой команды. Эта группа представляет собой небольшое количество пользователей, но достаточное, чтобы получить результаты, позволяющие провести полноценный статистический анализ. Пользователи не знают о том, что они являются частью группы тестирования.
Шаг 2. Команда создает тестовую среду, которая работает параллельно с текущей рабочей средой. Они также настраивают балансировщик нагрузки системы так, чтобы пользовательские запросы направлялись в новую среду.
Шаг 3. Разработчики проводят канареечное тестирование, направляя запросы отобранных пользователей в новую среду. Они также наблюдают за пользователями в течение определенного времени, чтобы убедиться, что новая версия приложения работает в соответствии с ожиданиями.
Шаг 4. Если новая версия соответствует ожиданиям, то новый функционал или версия программного обеспечения может быть выпущена для всех пользователей. Однако если окажется, что новая версия приложения содержит много ошибок, плохо работает или создает другие проблемы для пользователей, то тестировщики возвращаются к исходной версии программного обеспечения.
Шаг 5. Команда устраняет обнаруженные ошибки и затем выпускает приложение для более широкой аудитории.
Планирование канареечного развертывания
Планирование канареечного развертывания включает в себя следующие факторы:
Количество пользователей и этапов. Общее количество пользователей, которые получат канареечное развертывание, и количество этапов – важные факторы, которые необходимо учитывать при планировании канареечного тестирования. Обычно в этом процессе задействовано 5% или 10% от общего числа пользователей. В некоторых случаях команда разработчиков выбирает группу “тестовых” пользователей на основе определенного географического региона.
Сроки/продолжительность. Канареечное тестирование может длиться как несколько минут, так и несколько часов, в зависимости от приложения и тестируемого кода. При планировании канареечного развертывания важно учитывать время, необходимое для всех аспектов тестирования.
Критерии оценки. Как и при любом другом виде тестирования ПО, успех или неуспех канареечного тестирования можно определить только в том случае, если предварительно определены критерии оценки.
Метрики производительности. Для анализа хода тестирования, оценки производительности приложения, определения загрузки процессора и памяти, а также отслеживания ошибок, необходимо собирать метрики.
Выполнение канареечного развертывания
После завершения планирования команда разработчиков выполняет фактическое канареечное развертывание, отправляя новый код выбранной группе пользователей. Разработчики готовят файлы для развертывания и настройки, пишут необходимые части кода и скрипты для тестирования.
Далее команда создает канареечный узел, используя процесс балансировки нагрузки, и делает копию настоящей рабочей среды. Для канареечного тестирования необходимы как минимум две рабочие среды, одна из которых будет представлять собой исходное приложение без изменений в коде.
Анализ канареечного развертывания
Когда новый код с изменениями отправляется к выбранной группе пользователей, это приводит к тому, что трафик идет и на базовые (обычные) узлы, и на тестовые узлы. Это позволяет команде разработчиков сравнить работу обеих версий и определить, соответствует ли тестируемая версия приложения ожиданиям, определенным на этапе планирования.
С помощью анализа логов можно выявить проблемы или ошибки, которые нужно исправить перед тем, как выпустить новую версию приложения для более широкой аудитории пользователей.
Преимущества канареечного тестирования
Канареечное тестирование позволяет легко проверить новую версию программного обеспечения или новую функцию в существующем приложении. Поскольку код с изменениями отправляется только небольшому числу пользователей, это значительно снижает риск ухудшения пользовательского опыта.
Кроме того, изменения или функции могут быть быстро отменены, если обнаружится, что они снижают производительность приложения, содержат ошибки или вызывают негативные отзывы у пользователей.
Канареечное тестирование – это хороший способ собрать полезную обратную связь от реальных пользователей перед важным обновлением в приложении. В некоторых случаях команда QA может быть первой группой, тестирующей новые функции. Они могут проводить тестирование в той же среде, что и конечные пользователи, чтобы найти ошибки, которые, возможно, не были обнаружены или выявлены в процессе тестирования.
Недостатки канареечного тестирования
Несмотря на то, что канареечное тестирование дает множество преимуществ командам разработчиков, оно имеет также и ряд недостатков. Например, сложно проводить канареечное тестирование мобильных приложений, поскольку существует только одна среда – персональное компьютерное устройство пользователя.
Одним из способов борьбы с этим ограничением является использование фича-флагов (feature flags), позволяющих удаленно включить ту или иную функцию только для небольшой группы пользователей.
Также полезно побудить конечных пользователей включить автоматическое обновление приложения, чтобы они получали регулярные обновления, которые позволят разработчикам легко провести канареечное тестирование.
Канареечное тестирование также может быть затруднено при быстром выпуске множества новых функций. Для тестирования всех этих функций потребуется несколько сред, управлять которыми может быть сложно. Фича-флаги – снова хороший способ решить эту проблему.
Канареечное тестирование требует использования нескольких компьютеров или серверов в рабочей среде, что делает процесс более сложным. Мониторинг работы новой системы также может быть трудоемким и требовать много времени, если выполняется вручную. Автоматизация позволяет снизить сложность и время, необходимое для анализа и исправления ошибок.
Средства автоматизированного тестирования также упрощают создание новых тестов и анализ результатов тестирования.
Другие методы тестирования изменений в ПО
Канареечное развертывание – это лишь один из методов обновления программного обеспечения. Существуют и другие методы развертывания обновлений ПО:
Базовая стратегия развертывания (Basic deployment strategy). Эта стратегия, известная также как “re-create”, предусматривает одновременное обновление всех систем новым программным обеспечением. Это самая простая стратегия развертывания, но и самая рискованная. Если обновление содержит ошибки, это затронет всех пользователей.
Стратегия инкрементного или “плавающего” обновления (Incremental or rolling update strategy). Она аналогична базовой стратегии развертывания, но при этом пользователи разбиваются на более мелкие группы, которые получают обновления поэтапно. Это позволяет в случае возникновения проблем приостановить релиз приложения до того, как он затронет всех пользователей.
Сине-зеленое развертывание (Blue-green deployment strategy). Сине-зеленое развертывание предполагает развертывание новой версии программного обеспечения наряду со старой версией. Оно требует вдвое больше ресурсов, чем стратегия инкрементного развертывания, и может привести к простою, в отличие от канареечного тестирования.
Однако этот метод позволяет уменьшить последствия выпуска некачественной версии ПО, так как пользователи могут быть быстро переключены на старую версию ПО. Кроме того, этот метод хорош в тех случаях, когда код был тщательно протестирован и ожидаемый риск неудачи считается низким.
A/B развертывание (A/B testing deployment). Этот метод используется для тестирования конкретных функций путем их развертывания для конкретных пользователей на основе определенных метрик.
Канареечное развертывание важно, но это не единственный правильный выбор для управления стратегиями развертывания. Узнайте больше о том, в каких случаях следует использовать канареечное развертывание, а в каких – синее/зеленое.
Перевод статьи «Сanary testing».