TGViewer
FAANG Master FAANG Master @faangmaster · 2.94K subscribers
Post #1115 2.12K
Предотвращают ли тесты баги в проде?

Краткий ответ: нет.

Даже со 100% покрытием кода тестами мы не можем гарантировать, что багов в проде не будет. Тесты лишь фиксируют текущее понимание разработчиком того, как код должен и может работать. Если это понимание не верно, то тесты не предотвратят баги. Более того, источником багов часто становятся различные конфигурационные изменения (конфигурация сети, базы, изменение бизнес правил и настроек), изменения в API зависимостей, которые вы используете, очень редкие race conditions и т.д.

Если тесты не предотвращают все баги, то и нет смысла их вообще писать?

Тесты писать смысл есть, в том числе и для предотвращения багов.

Польза тестов:

1) Проверяют, что код работает так, как ты ожидаешь (хоть это ожидание может быть и не верным). Позволяет убедиться, что написанный код как-то работает и предотвращает кучу глупых багов.
2) Документирует код. Тесты - это лучшая документация к коду, которую можно придумать. Она актуальна. Т.к. если код изменился, то тесты перестанут работать. Так же разработчику проще понять как передать параметры, как вызвать этот код, как распарсить результат на примерах, чем прочитав сотни слов об этом. В Amazon часто приходилось интегрироваться с другими компонентами, и проще всего это было сделать — посмотреть интеграционные/e2e тесты, скопировать код теста к себе и поменять вызов и парсинг результата под свои нужды.
3) Можно спокойно делать рефакторинг кода. Если у вас хорошее покрытие тестами, то если при рефакторинге у вас начинают падать тесты, значит вы что-то сломали, или вам надо поправить сигнатуры вызовов в тестах. Вы можете с большой уверенностью гарантировать, что вы ничего своим рефакторингом не сломали. Если у вас нет хорошего покрытия тестами, то делать рефакторинг опасно.
4) Предотвращает регрессию. Вы делаете новое изменение в коде, добавляете тест и он работает. Но при этом этот код может поламать другой функционал и без хорошего покрытия вы об этом не узнаете.
5) Проверка, насколько удобен ваш код для клиента. Во время написания теста можно понять насколько просто или сложно ваш код использовать. Если тест писать сложно, то и использовать ваш код будет не просто.

Хоть тесты и хорошее покрытие не предотвращают все баги в проде, они имеют много другой пользы. В Amazon, в нашей организации покрытие тестами было 95-97%. Тем не менее, баги и аутэджи случались. Но чаще они были связаны с конфигурациями, версиями API, неправильным пониманием бизнес-логики или очень редкими стечениями многих факторов, которые трудно воспроизвести в тесте.

Ещё одно наблюдение из моего 18-летнего опыта: на количество багов в проде больше влияет не процент покрытия тестами, а качество разработчиков. В Meta покрытие тестами сильно меньше, но число багов очень маленькое.
  • ❤ 15
  • 👍 15
  • 💯 2
More from @faangmaster
  1. Sep 13, 2026Навье-Стоксгейт 8 сентября OpenAI заявила, что её невыпущенная модель решила одну из семи…
  2. Sep 3, 2026Uber совместно с британским стартапом Wayve запускает роботакси в Лондоне Пришла нотификац…
  3. Aug 20, 2026Новый HTTP метод QUERY Этим летом в спецификацию HTTP добавили новый метод - QUERY. Добавл…
  4. Aug 15, 2026IOI 2026 В Ташкенте прошел межнар школьников по информатике. Результаты: https://stats.ioi…
  5. Jul 30, 2026В свое время я закончил МФТИ. Относительно непростой вуз для обучения. Закончил неплохо. З…
  6. Jul 18, 2026Документалка про Java В продолжение темы документалок, вышла документалка про Java. Трейле…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →