TGViewer
Граничные Эквивалентности Граничные Эквивалентности @qa_hub_2gis · 1.03K subscribers
Post #499 346
Эффект бабочки в программировании. Делимся историями, где, казалось бы, небольшая ошибка в коде привела к масштабным последствиям.

1️⃣ Ариан-5. 64-битное число, которое не влезло в 16 битную переменную.
64-битное значение горизонтальной скорости с плавающей запятой переполняло 16-битную переменную. В Ариан-4 такой скорости никогда не было и ошибка перетекла в Ариан-5. По итогу в программном обеспечении ракеты произошло целочисленное переполнение.
Из-за ошибки ракета-носитель была подорвана на 34-й секунде полёта, что стало одной из самых дорогостоящих компьютерных ошибок в истории.

Вывод: даже если в новой системе используется работающий код из старой, его всё-равно необходимо тщательно проверять

2️⃣ Cloudflare: регулярное выражение, которое съело все CPU
Инженер Cloudflare написал правило для WAF (Web Application Firewall). В нём было неудачное регулярное выражение, которое на определённых входных данных вызывало катастрофический возврат (catastrophic backtracking) — время выполнения росло экспоненциально На сложных запросах движок начинал перебирать миллиарды вариантов вместо одной проверки.
Последствия: 2 июля 2019 года CPU всех серверов Cloudflare по всему миру встали на 100%. 27 минут половина сайтов на Cloudflare возвращали ошибку 502. А защита от превышения CPU была случайно удалена за несколько недель до этого

Вывод: регулярки стоит тестировать в том числе на производительность, на длинных и сложных строках, а не только на валидных данных.

3️⃣ Knight Capital: старый тестовый код, который ожил Разработчики обновляли торговую систему SMARS. В одном из серверов случайно остался старый тестовый код Power Peg, написанный ещё в 2003 году. Этот код должен был проверять работу алгоритма, но никогда не использовался в реальной торговле. Ошибка в деплое: одна из восьми машин не получила новую версию и продолжила работать со старым кодом. А в старом коде была функция, которая не распознавала, когда заявки уже исполнены, и продолжала отправлять их снова и снова.
В результате 1 августа 2012 года, в 9:30 утра, бот отправлял заявки (скупал акции) быстрее, чем они исполнялись, и не видел, что они уже исполнены. За 28 минут Knight Capital потеряла $440 млн. Инженерам пришлось топорами выдергивать сетевые модули серверов в дата-центре, чтобы остановить алгоритм. Компания потеряла 53% капитализации и вскоре обанкротилась.

Вывод: Мёртвый тестовый код, оставленный в продакшене, — это бомба замедленного действия. Тщательно проверяйте, что именно уходит в деплой, и не храните старые версии там, где они могут случайно запуститься.
  • 🤯 4
  • 😱 3
  • ❤ 2
More from @qa_hub_2gis
  1. Sep 25, 2026➡️ Lightpanda: headless-браузер на Zig вместо Chromium Обычно, когда нужен headless-браузе…
  2. Sep 21, 2026💻 pip или uv? С Python-зависимостями часто одна и та же история: код меняется быстро, а о…
  3. Sep 13, 2026Сегодня День программиста! Поэтому на минутку забываем про «а у меня не работает» и поздра…
  4. Sep 9, 2026Post #497
  5. Sep 7, 2026💚 Дайджест свежих релизов: август ➡️ Python Документация Python официально на русском. Пе…
  6. Sep 3, 2026🤩Рубрика «Нетипичный QA», в которой мы рассказываем истории инженеров, чей путь в тестиро…
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 →