Почему тесты проходят, а на проде всё ломается? 🚀
Бывало у вас такое?
✅ Автотесты зелёные
✅ Регресс пройден
✅ QA говорят, что всё ок
🚀 Катим в прод
А потом… БАЦ! И что-то критично ломается.
Как так? Ведь тесты проходили!🥲
📌Почему так происходит?
❌ Тесты не проверяют реальный сценарий использования
Часто тесты пишутся так, чтобы проверить, что код работает, а не что пользователи смогут им пользоваться. А потом оказывается, что реальный сценарий совсем другой.
❌ Тесты покрывают код, но не логику
Технически всё работает, но какой-то ключевой бизнес-процесс ломается. Например, кнопка работает, но ведёт не туда. Или форму можно отправить, но данные записываются криво.
❌ Тесты проверяют только позитивные сценарии
«Правильный» пользователь с «правильными» данными проходит сценарий без проблем. А вот если попробовать вводить невалидные данные, ломать интерфейс или использовать продукт так, как его не задумывали – всё разваливается.
❌ Не тестируются зависимости и интеграции
Если автотесты проверяют только локальные компоненты, но не учитывают связи между сервисами, можно словить сюрприз. Например, новый микросервис работает идеально, но забыли, что старый API возвращает данные в другом формате.
❌ Отсутствует тестирование в реальных условиях
Тесты проходили на чистом окружении, без нагрузки и реальных данных. В итоге в бою API не выдерживает запросов, база не справляется, а пользователи сталкиваются с багами, которых в тестовой среде не было.
📌Как мы с этим боремся?
✅ Shadow-тестирование или dark launches
Новая версия работает параллельно с боевой, но без воздействия на пользователей: backend уже собирает данные, но UI-фича остаётся выключенной. Это позволяет протестировать функциональность в реальных условиях, отловить критические ошибки и проверить стабильность до релиза.
✅ Добавляем end-to-end тестирование
Важно не просто проверить отдельные модули, но и как они работают вместе. E2E-тесты дают картину целиком и выявляют проблемы в интеграциях.
✅ Катим через feature-флаги
Чтобы не убить весь прод сразу, выкатываем фичи постепенно. Сначала – на небольшую группу пользователей, потом – на всех. Если что-то пошло не так, можно быстро откатить.
✅ Тестируем с учётом боевой нагрузки
Частая проблема: тесты проходят в идеальных условиях, но на проде API просто ложится под реальными запросами. Мы нагружаем тестовые окружения, эмулируем реальную нагрузку, смотрим, где система не выдерживает.
✅ Логируем и мониторим прод
Нельзя надеяться, что тесты поймают всё. Если что-то идёт не так после релиза – мы должны узнать об этом первыми, а не ждать, пока клиенты начнут жаловаться. Метрики, логи, алерты – всё это в обязательном списке.
✅ Контролируем технический долг после релиза
Иногда фичи приходится выкатывать с костылями. Главное – не забывать про них. Мы фиксируем такие места и контролируем их рефакторинг после релиза, чтобы костыль не остался навсегда.
✅ Rollback-план на каждый релиз
Перед каждым релизом у нас есть чёткий план отката, если что-то сломается. Это не просто «откатим, если что», а конкретные шаги: что именно делаем, за сколько минут сможем вернуть всё назад.
📌Что в итоге?
Тесты – это не гарантия, что багов не будет. Это инструмент, который помогает их вовремя выявлять.
Если процесс тестирования выстроен осознанно – критические баги отлавливаются до релиза, а если что-то пойдёт не так на проде, у команды есть чёткий план действий, логирование и возможность быстро выполнить необходимые изменения.
А ещё я пишу посты в
Сетке, так что если вы там – подписывайтесь, буду рад видеть 😉