Обложка статьи «Топ-8 программных багов, наделавших шумиху в мире»

Топ-8 программных багов, наделавших шумиху в мире

Сегодня, 9 сентября, в мире отмечают день бага и день тестировщика. По этому случаю мы собрали топ интересных багов в программах, наделавших много шума вокруг себя, а также собрали культовые баги в играх, которые стали фичами и изменили игровой мир.

Самый настоящий баг

Топ багов откроет случай 9 сентября 1945 г. 75 лет назад учёные Гарвардского университета, тестировавшие электромеханический компьютер Mark II Aiken Relay Calculator, нашли мотылька, застрявшего между контактами реле. Он вызывал короткое замыкание, что приводило к неправильной работе машины.

Технический дневник с вклеенной молью

Технический дневник с вклеенной молью

Насекомое было извлечено и вклеено в дневник с сопроводительной подписью «Первый реальный случай обнаружения бага». От этого случая и пошло слово bug, а этот день стал днём бага (и заодно днём тестировщика).

Y2K — проблемы тысячелетия

Проблема Y2K ещё известна как «проблема 2000 года». Разработчики ПО в XX веке часто использовали для обозначения года в датах две последние цифры вместо привычных четырёх. Например, 7 апреля 1994 года представлялось как «07.04.94».

Так информация хранилась более эффективно — ведь в то время каждый байт был на счету, а базы данных могли хранить тысячи дат. В таком случае сокращение было разумным решением. Или нет?

1 января 2000 по всему миру начали происходить локальные конфликты и сбои в системах. В некоторых городах даже начало пропадать электричество, отопление, часть вычислительных центров просто зависала. Всё это произошло из-за сокращения формата года. После 1999 года наступил 2000, но для машин этот год воспринимался как 1900 (у некоторых даже как 19100). Такая ошибка послужила причиной зависаний во многих системах.

Электронное табло, неправильно отображающее год

Электронное табло, неправильно отображающее год

Однако никакой масштабной мировой катастрофы не произошло благодаря тому, что разработчики начали задумываться об этой проблеме заранее. По некоторым оценкам, на подготовку к 2000 году общие мировые затраты составили 300 млрд. долларов.

Ping of Death

Так назывался тип сетевой атаки, распространённый в середине 1990-х годов. Её суть заключалась в том, что компьютер-жертва получал особый эхо-запрос (ping), после которого машина намертво зависала. Эта уязвимость встречалась на многих ОС, включая Windows, Unix, Linux, Mac.

По стандарту протокола IPv4 объём передаваемого пакета не может быть больше 65 535 байт. Превышение этого размера вызывало у принимающего компьютера переполнение сетевого стека.

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

Эта уязвимость в большинстве систем была исправлена в конце 90-х.

Торговля — трудное ремесло

В самом начале на Amazon можно было заказать отрицательное количество товара. В таком случае при покупке деньги не списывались, а зачислялись на карту клиента. Такая глупая ошибка случилась из-за того, что разработчик магазина Джефф Безос старался как можно чаще выпускать обновления для своего сервиса и у него не хватало времени на его отладку.

Офис Amazon в самом начале

Офис Amazon в самом начале

Как отмечает сам разработчик, это одна из его любимых ошибок: «Мы переводили покупателям деньги и, соответственно, ждали, когда этот товар доставят нам».

Примитивные баги в программах случались и в других интернет-магазинах. Иногда можно было выставить в поле «Количество товара» значение 0,01 и тем самым получить скидку на товар в 99%. А в некоторых сервисах персональные данные хранились в файлах cookie. Можно было изменять ID покупателя и совершать покупки от другого лица.

Падение телефонной линии AT&T

Один из 114 коммутаторов AT&T был механически повреждён. Он отправил сообщение о поломке другим АТС, а те, в свою очередь, соседним. Запустилась цепная реакция, которая положила телефонную сеть на 9 часов, из-за чего 60 тыс. человек остались без связи.

падение сети AT&T в топе багов

Причина была в недавнем обновлении ПО для АТС. Теперь, если ломался один из коммутаторов, он посылал об этом сообщения соседним коммутаторам, чтобы те перехватывали его трафик. Тогда другие коммутаторы должны были перезагружаться в новый режим работы и периодически проверять, не заработал ли первый.

Однако из-за бага в коде неисправный коммутатор высылал по два сообщения. Второе сообщение достигало других коммутаторов прямо во время их перезагрузки. Из-за этого они начинали думать, что сами неисправны и рассылали сообщение дальше по цепи. Таким образом, словно домино, упала целая сеть. Общие потери компании составили примерно 60 млн. долларов.

Взрыв ракеты Ariane 5 из-за переполнения переменной

Авария ракеты-носителя «Ариан-5» произошла 4 июня 1996 г. Ракета разрушилась на 40-й секунде полёта из-за неверной работы бортового ПО. Этот баг в системе — самый дорогостоящий в нашем топе багов и вообще в мире — его ущерб оценивается от 360 до 500 млн. долларов. В результате аварии были также потеряны 4 спутника Cluster.

самый дорогой баг в топе масштабных багов

Взрыва ракеты Ariane 5

Во время разработки бортового программного обеспечения некоторые фрагменты кода были взяты из ПО предыдущей удачной Ariane 4. Однако софт так и не протестировали в новом окружении. После старта ракеты её модуль попытался просчитать определённое значение, исходя из горизонтальной скорости ракеты. Так как эта скорость у Ariane 5 была намного выше, чем у предыдущей версии, это вызвало переполнение переменной, что, в свою очередь, повлекло ошибки. На борту была запасная система управления, но т. к. в ней было идентичное ПО, ошибка повторилась.

Работы над строительством ракеты велись на протяжении 10 лет, а на разработку было потрачено 7 млрд. долларов.

Податливый Microsoft Bob

Существовала такая ОС — Microsoft Bob. Это была система с упрощённой графической оболочкой. Представляла она из себя виртуальный дом с вполне обычными комнатами: гостиная или кухня. Некоторые предметы, размещённые в комнатах, соответствовали аналогичным приложениям: ручка с бумагой открывала текстовый редактор, а настенные часы вызывали соответствующее приложение. Одним словом — уют и комфорт.

Интерфейс Microsoft Bob

Интерфейс Microsoft Bob

К сожалению, этот комфорт не распространялся на систему безопасности. После трёх неудачных попыток авторизации система интересовалась, не забыл ли пользователь свой пароль. Если пользователь соглашался, то система попросту предлагала установить новый пароль. Таким образом любой злоумышленник с лёгкостью мог войти в защищённую паролем систему.

Microsoft Bob достаточно сильно критиковался СМИ. В журнале PC World эта ОС получила 7-е место в списке «25 худших продуктов всех времён», а в списке худших продуктов десятилетия от CNET.com она заняла 1-е место.

Шерстяной баг

Топ багов закроет случай с котиком. Однажды один пользователь собрался пообедать в рабочее время. Он заблокировал экран системы и отправился на обед. Но когда он вернулся, то увидел, что его кошка сидела на клавиатуре, а сама система зависла.

топ багов: баг с котиком

На компьютере стоял LightDM — менеджер входа в систему. Именно он появляется при запуске ОС, где предлагает выбрать пользователя и ввести его пароль. Кошка, сев на клавиатуру, зажала какие-то из клавиш. Это и привело к зависанию системы.

Это происшествие не стало бы таким популярным, если бы разработчики не признали этот баг из-за выявления нескольких таких же случаев.