Пейджер

🌍 Вітаю! 🇧🇾

TL;DR
  • Гейзенбаг — баг, исчезающий при отладке
  • Не воспроизводится локально, живёт только на проде
  • Причины: race conditions, тайминги, побочные эффекты логирования
  • Другие виды багов: Bohrbug, Mandelbug, Schroedinbug
  • Методы борьбы: tracing, метрики, сравнение конфигураций
🌍 Вітаю! 🇧🇾

Недавно из бэклога взял задачу на исправление бага 🪲. Читая заголовок, в скобочках, я увидел слово inconsistent, внутренне я сразу понял, что ничего хорошего в этом нет, так как есть опыт надевания перчаток по локоть и погружения в интересную субстанцию 💩.

И все бы ничего, но я начал читать описание проблемы и понял, да оно стреляет только на проде, от этого улыбка стала еще шире не стала.

Я вертел и крутил код, смотрел группы, пермишены, состояния, колотил ногами базу, сверял метрики и логи, но ничего не направляло в нужном направлении 🤷‍♀️

Спойлер: Причину я пока так и не нашёл. В планах обложить всё логами, сесть в кусты и ждать. Я почти уверен, что там что-то с инфрой: что-то упало, утомилось, оборвалось… или на AWS заменили ещё одного разработчика на агента (возможно даже двух).

И вот тут товарищ мне говорит 🙌:
— Так у тебя же чистейший гейзенбаг.

Я уверенно кивнул, сделал вид, что шарю, и пошёл гуглить .

Не хотите быть как я =) тогда читайте и будьте более подкованными в IT-сленге🤘.

Что такое гейзенбаг

Это баг, который:

🟠исчезает, когда ты пытаешься его отладить,
🟠меняет поведение при добавлении логов,
🟠не воспроизводится локально,
🟠живёт только на проде,
🟠и ведёт себя как живое существо =).

Само название это отсылка к принципу неопределённости Гейзенберга из квантовой физики:
само наблюдение за системой меняет её поведение.


В нашем случае:

➡️ добавил лог → баг исчез,
➡️ включил дебаг → всё работает,
➡️ убрал лог → снова падает.

Понятие о Heisenbug появилось в конце 80-х — начале 90-х и активно использовалось в инженерной среде IBM и Unix-сообществе.
Термин официально закреплен в книге 📘 The New Hacker’s Dictionary

🔥 Причины возникновения

🟠race conditions,
🟠проблемы с таймингами,
🟠неинициализированная память,
🟠 побочные эффекты логирования,
🟠разные конфигурации prod vs local,
🟠GC, JIT, кеши, lazy loading,

🐛 А какие ещё бывают баги?

оказывается IT-сленг вообще богат на багопарк:

✔️ Bohrbug (Борбаг)

Стабильно воспроизводится и стабильно что-то ломает а еще стабильно чинится.

✔️ Mandelbug (Мандельбаг)

Сложный, хаотичный, нелинейный баг, где причина и следствие не очевидны. Часто связан с архитектурой.

✔️ Schroedinbug (Шрёдинбаг)

Баг, который вроде бы есть, а вроде бы нет, пока не посмотришь код не узнаешь.

🧯 Что делать с гейзенбагами? -
Терпеть

🟠логировать аккуратно и выборочно,
🟠использовать tracing,
🟠писать метрики,
🟠сравнивать prod/stage,
🟠фиксировать версии,
🟠и не верить, что “раз не воспроизводится — значит нет”.

✏️ Мысли

✍️ Плавающие баги есть в любой программе, просто некоторые из них вы еще ни разу не встречали. А еще с приходом AI в нашу жизни их будет только больше, кстати про один такой недавний кейс я расскажу в следующем посте, подписываееемся и следим!

✍️ Пока ресерчил тему, увидел что для тестировщиков постоянно проводится конференция с названием heisenbug полистал старые доклады, есть очень интересные, кстати организатор тот же что и на holyjs.

P.S. Если у вас был гейзенбаг значит вы уже взрослый разработчик. 🤣

💬 Делитесь мнением в комментариях👇 Если пост зашёл — не забудьте поставить лайк 👍

#BUG
Медиа 1
Хотите больше таких постов?
Подпишитесь на канал и читайте продолжение в Telegram.
Подписаться на @ivanchikovitclub Открыть пост в Telegram