Зачем Тестировать в Продакшене?

В предыдущем уроке вы узнали о shift-left тестировании — начале активностей по качеству раньше. Shift-right тестирование — его дополнение: расширение активностей по качеству в продакшен-среду.

Зачем? Потому что ни одно тестовое окружение не может идеально воспроизвести продакшен:

  • Реальные паттерны трафика непредсказуемы и разнообразны
  • Реальные данные имеют граничные случаи, которые вы никогда не представляли
  • Реальная инфраструктура ведёт себя иначе под нагрузкой
  • Реальные пользователи взаимодействуют с вашим ПО неожиданными способами

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

Важно: Shift-right НЕ означает пропуск тестирования до продакшена. Это дополнение тщательного тестирования валидацией на уровне продакшена.

Техники Shift-Right

1. Canary Deployments

Canary deployment выпускает новую версию для небольшого процента пользователей перед развёртыванием для всех.

graph LR subgraph Canary Deployment LB[Load Balancer] -->|95%| V1[Версия 1.0
Стабильная] LB -->|5%| V2[Версия 1.1
Canary] end V2 -->|Метрики ОК?| EXPAND[Расширить до 25% → 50% → 100%] V2 -->|Метрики плохие?| ROLLBACK[Откат на 1.0] style V1 fill:#4CAF50,color:#fff style V2 fill:#FF9800,color:#fff style ROLLBACK fill:#F44336,color:#fff

Как это работает:

  1. Деплой версии 1.1 на 5% серверов/пользователей
  2. Мониторинг ключевых метрик: процент ошибок, задержка, конверсия
  3. Если метрики здоровы через 15-30 минут, расширить до 25%
  4. Продолжить расширение до 100%
  5. Если любая метрика деградирует, мгновенный откат на версию 1.0

Роль QA:

  • Определение метрик для мониторинга
  • Установка порогов для автоматического отката (например, ошибки > 1%)
  • Ревью результатов canary перед одобрением полного развёртывания
  • Проектирование тестовых сценариев для canary

2. Feature Flags

Feature flags позволяют включать или отключать функциональность без деплоя нового кода.

if feature_flag.is_enabled("new_checkout_flow", user):
    show_new_checkout()
else:
    show_old_checkout()

Применение в тестировании:

  • Постепенное развёртывание: Включить для 10%, затем 25%, 50%, 100%
  • Бета-тестирование: Включить для определённых групп
  • Kill switch: Мгновенное отключение проблемной функции
  • A/B тестирование: Сравнение версий с разными группами

Роль QA:

  • Тестирование обоих состояний флага (вкл и выкл)
  • Проверка, что изменение флага не требует деплоя
  • Тестирование kill switch — возможность быстрого отключения
  • Планирование стратегии тестирования для каждого процента развёртывания

3. A/B Тестирование

A/B тестирование делит пользователей на группы, видящие разные версии, и измеряет, какая работает лучше.

АспектГруппа A (Контроль)Группа B (Вариант)
Пользователи50% трафика50% трафика
ФункцияОригинальный checkoutНовый дизайн checkout
МетрикаКонверсияКонверсия
Длительность2 недели2 недели

Роль QA:

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

4. Blue-Green Deployments

Два идентичных продакшен-окружения (Blue и Green) переключают трафик между собой:

graph LR LB[Load Balancer] -->|LIVE| BLUE[Окружение Blue
v1.0 - Текущее] LB -.->|STANDBY| GREEN[Окружение Green
v1.1 - Новое] GREEN -->|Переключить| LB style BLUE fill:#2196F3,color:#fff style GREEN fill:#4CAF50,color:#fff

Как это работает:

  1. Blue обслуживает весь трафик
  2. Деплой v1.1 на Green
  3. Тестирование v1.1 на Green (с данными, приближенными к продакшену)
  4. Переключение трафика с Blue на Green
  5. При проблемах мгновенный откат на Blue

5. Мониторинг и Наблюдаемость

В shift-right мониторинг — ваш важнейший инструмент качества.

Что мониторить:

  • Процент ошибок: HTTP 4xx и 5xx, необработанные исключения
  • Задержка: Время отклика P50, P95, P99
  • Бизнес-метрики: Конверсия, регистрации, транзакции
  • Инфраструктура: CPU, память, диск, сеть
  • Пользовательский опыт: Core Web Vitals, клиентские ошибки

6. Chaos Engineering

Chaos engineering намеренно вводит сбои в продакшен для проверки устойчивости системы.

Типичные эксперименты:

  • Убить экземпляр сервера — произойдёт ли failover?
  • Добавить 500мс сетевой задержки — работают ли таймауты?
  • Заполнить диск на 100% — обработает ли приложение?
  • Разорвать соединение с базой данных — работает ли логика повторных попыток?
  • Отключить зону доступности — устойчива ли система?

Когда Shift-Right Уместен?

СценарийПочему Shift-Right Помогает
Высокая вариабельность трафикаТестовое окружение не может симулировать реальные паттерны
Сложные интеграцииСторонние сервисы ведут себя иначе в продакшене
Производительность в масштабеРеальная производительность требует нагрузки продакшена
Неопределённость поведения пользователейРеальные пользователи взаимодействуют иначе
Сложная инфраструктураМикросервисы, CDN, кеширование работают правильно только в продакшене

Shift-right НЕ уместен когда:

  • Нет мониторинга и алертинга
  • Нет возможности отката
  • Команда не может быстро реагировать на инциденты
  • Регуляторные требования запрещают тестирование в продакшене
  • Функция работает с чувствительными данными без надлежащих мер защиты

Риски и Меры Безопасности

Меры Безопасности

  1. Feature flags: Всегда деплоить за флагом с kill switch
  2. Canary deployments: Никогда не деплоить сразу на 100%
  3. Автоматический откат: Установить пороги метрик для автоотката
  4. Мониторинг: Иметь дашборды и алерты до деплоя
  5. Runbooks: Документировать пошаговые процедуры для сценариев сбоев
  6. Ограничение радиуса поражения: Ограничить число затронутых пользователей
  7. Защита данных: Никогда не использовать тестирование для манипуляции реальными данными

Упражнение: Спроектировать Shift-Right Стратегию для Веб-Приложения

Вы — QA-лид платформы социальных сетей с 2 миллионами ежедневных активных пользователей. Команда запускает масштабный редизайн функции обмена сообщениями. Новая система:

  • Использует WebSocket для обмена сообщениями в реальном времени
  • Включает обмен файлами (изображения, документы до 25МБ)
  • Имеет новую систему уведомлений
  • Интегрируется со сторонним API перевода для автоперевода сообщений

Ваша задача:

Спроектируйте стратегию shift-right, включающую:

  1. Подход к деплою (canary, blue-green или гибрид)
  2. Стратегию feature flags (какие флаги, группы, график развёртывания)
  3. План мониторинга (метрики, пороги, дашборды)
  4. Эксперименты chaos engineering после запуска
  5. План отката для каждого компонента
Подсказка

Учтите:

  • WebSocket-соединения stateful — canary сложнее, чем со stateless HTTP
  • Лимиты rate API перевода требуют постепенного тестирования в масштабе
  • Загрузки 25МБ могут повлиять на хранилище и пропускную способность
  • Обновления мобильных приложений нельзя откатить так же легко, как веб-деплои
Пример решения

Стратегия Shift-Right для Редизайна Мессенджера

1. Подход: Гибрид Canary + Feature Flags

Поэтапное развёртывание:

  • Фаза 1 (День 1): 2% пользователей (внутренние сотрудники) — все функции
  • Фаза 2 (День 3): 5% — базовая переписка (без перевода, без файлов)
  • Фаза 3 (Неделя 1): 20% — переписка + файлы
  • Фаза 4 (Неделя 2): 50% — все функции включая перевод
  • Фаза 5 (Неделя 3): 100% — полное развёртывание

2. Feature Flags:

ФлагОписаниеНачальное Состояние
new_messaging_uiНовый интерфейсOFF
file_sharingЗагрузка/скачивание файловOFF
auto_translateАвтопереводOFF
websocket_v2Новый формат WebSocketOFF

3. Мониторинг:

МетрикаПорогУровень Алерта
Ошибки WebSocket-соединений> 0.5%Критический
Задержка доставки P95> 500мсПредупреждение
Процент сбоев загрузки файлов> 2%Предупреждение
Rate limit API перевода> 10/минКритический

4. Chaos Engineering (Неделя 4-6):

ЭкспериментОжидаемое Поведение
Убить 1 WebSocket-серверПереподключение за < 5с, без потери сообщений
Таймаут API переводаGraceful degradation, сообщения без перевода
Заполнить хранилище до 95%Загрузка отклонена с понятной ошибкой
Пик трафика 10xАвтомасштабирование справляется

5. Откат:

КомпонентМетодВремяВлияние на Данные
Веб-фронтендОтключить флаг< 1 минНет
WebSocket-бэкендCanary-откат< 5 минСообщения в пути могут потребовать повторной доставки
ФайлыОтключить флаг< 1 минЗагруженные файлы остаются доступными
ПереводОтключить флаг< 1 минСообщения показываются без перевода

Модель Shift-Left + Shift-Right

Shift-left и shift-right — не противоположности, а дополнения:

graph LR SL[Shift-Left
Тестировать рано] --> CT[Основное Тестирование
До продакшена] --> SR[Shift-Right
Тестировать в продакшене] style SL fill:#4CAF50,color:#fff style CT fill:#2196F3,color:#fff style SR fill:#FF9800,color:#fff
  • Shift-left ловит 80% дефектов рано и дёшево
  • Основное тестирование валидирует интегрированную систему до релиза
  • Shift-right ловит оставшиеся дефекты, проявляющиеся только в продакшене

Профессиональные Советы по Shift-Right

  1. Мониторинг в первую очередь, фичи во вторую. Перед запуском любой shift-right стратегии обеспечьте комплексный мониторинг. Нельзя тестировать то, что нельзя наблюдать.

  2. Начните с feature flags. Самая безопасная shift-right техника — нулевой риск при мгновенном отключении.

  3. Практикуйте откаты регулярно. План отката, который никогда не тестировался — это не план, а надежда.

  4. Рассматривайте инциденты как результаты тестов. Каждый баг в продакшене — это тест-кейс, который ваше тестирование пропустило. Добавьте его в регрессионный набор.

  5. Коммуницируйте со стейкхолдерами. Shift-right может тревожить людей, не знакомых с подходом. Объясните меры безопасности перед экспериментами в продакшене.