9 сентября 1945 года официально был зарегистрирован первый в истории баг. Именно в этот день ученые Гарвардского университета, тестировавшие вычислительную машину Mark II Aiken Relay Calculator, нашли мотылька, застрявшего между контактами электромеханического реле. Грейс Мюррей Хоппер (американская ученая-компьютерщица и контр-адмирал ВМС США) записывает в журнал — «Первый реальный случай обнаружения ошибки (бага, жучка)».
Не допустить ошибок при создании программ чрезвычайно сложно. К счастью, не все ошибки обходятся дорого и не все становятся достоянием публики. Однако некоторые наносят большие убытки. В этом списке — некоторые самые известные или дорогие ошибки в программном обеспечении.
Взрыв Ariane 5
4 июня 1996 года ракета Ariane 5, запущенная Европейским космическим агентством (ESA), взорвалась всего через сорок секунд после запуска из Куру во Французской Гвиане. Ракета осуществляла первый полет после десятилетия разработки, стоившего 8 миллиардов долларов, а результатом этой ошибки стала потеря в 370 миллионов долларов.
Причиной отказа было целочисленное переполнение, которое является широко распространенной ошибкой в компьютерном программировании. В этом случае была предпринята попытка уместить 64-битное число в 16-битной переменной.
PayPal подарил пользователю 92 квадриллиона долларов
Когда Крис Рейнольдс открыл свой PayPal, остаток на счету торговца из Пенсильвании составлял 92 233 720 368 547 800 долларов. И на короткое время Рейнольдс стал самым богатым человеком в мире.
Ошибка была быстро обнаружена, и к тому времени, как он вошел в систему второй раз, его учетная запись уже обнулилась.
PayPal предложил выплатить неопределенную сумму денег на благотворительность по выбору Рейнольдса.
Ошибка калькулятора Windows
Эта ошибка существует в большинстве версий Windows (кроме Windows 10), включая Windows XP, Windows 7, Windows Vista и Windows 8. Вы можете проверить баг в своей ОС, если у вас есть одна из этих версий.
Откройте калькулятор Windows, введите 4 и извлеките квадратный корень, вы получите два, а затем вычтите из него два. Вместо нулевого результата вы увидите разные результаты в разных версиях Windows.
Причина ошибки заключается в том, как калькулятор обрабатывает операции извлечения корня. естественно, что результаты сохраняются как числа с плавающей запятой, а не как целые, и ошибки в точности, когда дело доходит до вычислений с плавающей запятой, являются тем, что вы видите.
Microsoft признала эту ошибку в приложении калькулятора и исправила ее в Windows 10 Build 17639.
Метрическая система и марсианский климатический спутник НАСА
Марсианский климатический орбитальный аппарат, построенный за 125 миллионов долларов, представлял из себя 338-килограммового космического робота, он был запущен 11 декабря 1998 года для изучения марсианской атмосферы и работы в качестве ретранслятора связи для марсохода в программе Mars Surveyor ’98.
Когда робот собирался выйти на орбиту планеты, связь прервалась. Орбитальный аппарат вошел в атмосферу Марса под неправильным углом, а не вышел на орбиту планеты. Причина заключалась в том, что навигационная группа в Лаборатории реактивного движения (JPL) использовала метрическую систему в своих расчетах, а Lockheed Martin в Денвере предоставил важные данные об ускорении в имперской системе — различные метрики вступили в конфликт друг с другом и уронили спутник.
Ошибка Pentium FDIV
Ошибка была обнаружена профессором математики Томасом Найсли в 1994 году. Эта ошибка является аппаратной ошибкой, затрагивающей модуль операций с плавающей запятой первых процессоров Intel Pentium. Из-за ошибки процессор может возвращать неверные результаты при делении чисел. Intel объяснил сбой отсутствием записей в справочной таблице, используемой схемами деления с плавающей запятой.
Не все процессоры имели этот сбой, но было обнаружено около 5 миллионов дефектных чипов. Intel вначале согласился заменить чип только в том случае, если клиенты смогут доказать, что на них повлияли результаты неправильных вычислений. Однако позже компания заменила чипы всем, кто пожаловался. В результате Intel это обошлось в 475 миллионов долларов.
Отказ ракеты Patriot
25 февраля 1991 года, во время войны в Персидском заливе, ракетная батарея Patriot в Саудовской Аравии не смогла отследить и перехватить приближающуюся иракскую ракету «Скад». Ракета «Скад» попала в казармы американской армии. В результате чего 28 солдат погибли, еще около сотни получили ранения.
Проблема заключалась в неточном подсчете времени из-за накапливаемых арифметических ошибок. Тех самых пресловутых операций с плавающей запятой. Возникающая ошибка округления после 8 часов работы приводила к тому, что система начинала промахиваться на 20%, а после 20 часов работы батарея уже не была способна поражать цели.
Примечательно, что Patriot Project Office ранее получил данные о дефекте в ракетной системе. Однако военные не приняли во внимание наличие ошибки заявив, что система предназначена для краткосрочных защитных операций, и что никто никогда не будет использовать систему больше 8 часов.
Gangnam Style сломал YouTube
Раньше счетчик YouTube использовал 32-битное целое число для определения максимального количества просмотров. Оно может достигать 2 147 483 647.
Видео Gangnam Style превысило это максимальное значение и мы получили известную ошибку переполнения.
В результате сейчас YouTube использует 64-битное целое число для своего счетчика. Это означает, что максимальное количество просмотров может достичь 9.22 квинтиллиона.
Заключение
Мы люди, и иногда делаем ошибки. Но будьте осторожны! Простая строка кода с ошибкой может стоить сотни миллионов долларов. Большое вам спасибо, что прочитали статью. Надеюсь, она показалась вам любопытной и забавной!
Источник
Если вы нашли опечатку — выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
NASA Mars Climate Orbiter — $193000000 убытков
В американских исследованиях Марса, после Global Surveyor-1996 и Polar Lander-1999 был запланирован третий зонд — Orbiter.
Все три зонда должны были прибыть к Марсу приблизительно в одно “орбитальное окно” — конец сентября 1999 г. Каждому зонду предназначалась своя сфера исследований — поверхность планеты, ее климат, и атмосфера.
Люди в NASA надеялись, что третий зонд в целом успешной серии, после прибытия в целевую точку будет исследовать историю климата Марса, а также искать следы воды на поверхности. После завершения миссии аппарат планировали использовать как коммуникационный передатчик для последующих миссий. После прохода на близком расстоянии от планеты, аппарат должен был восстановить радиоконтакт. Но в назначенное время на связь аппарат не вышел.
Расследование показало, что сбой случился из-за навигационной ошибки. Точнее, из-за того, что кто-то не учел разницу между английскими-имперскими (и американскими) — и общепринятыми в остальном мире “континентальными” единицами измерения. Отправляемые команды были рассчитаны на формат ускорения “фунт в секунду”, а должны были — “ньютон в секунду”. Если бы управляющий код был кем-то добросовестно протестирован….
В результате Orbiter просрочил свой выход из навигационного маневра, приблизился слишком сильно к поверхности планеты — всего лишь на 57 километров от поверхности, где разумеется атмосфера была уже слишком плотной, для околокосмической скорости аппарата. Аппарат разрушился, то есть сгорел от трения в воздухе.
Mariner 1 — $18000000 убытков
“Инцидент с Mariner 1”, известный также как “самый дорогой минус в истории”, это второй эпический фэйл NASA. Кто-то забыл поставить “минус”, а кто-то не проверил код, что повлекло убытки на миллионы долларов.
Аппарат был запущен 22.06.1962 в 9 утра. На 5-й минуте полета резко поменял траекторию. “Маринер”, на которой NASA возлагала большие надежды, самые жаркие месяцы космической гонки, бравурный запуск Кеннеди уже назвал историческим — и спутник упал и разрушился.
Официальный отчет NASA гласит: “В начале полета ускорители работали в штатном режиме. Затем случилось непредвиденное отклонение от запланированной траектории, это зафиксировал сотрудник, отвечающий за точность траектории. Причиной отклонения оказалась ошибка в коде управления полетом. Это привело аппарат к резкому отклонению и угрозе падения в океан, в районе активного судоходства. Сотрудник, обнаруживший отклонение, дал команду самоликвидации аппарата.”
Через несколько дней в “Нью-Йорк Таймс” вышла статья, в которой NASA попыталась объяснить налогоплательщикам, почему дорогостоящий спутник потерпел крушение. Было сказано, что это случилось в результате ошибочного пропуска знака “-” в математических уравнениях в коде программы. Программист NASA пропустил нужный символ во время пакетного ввода огромного количества информации в бортовую систему аппарата.
Еще через несколько дней Ричард Моррисон, пресc-офицер NASA, представлял причины катастрофы перед Конгрессом, где выражался более конкретно и подчеркнул важность маленькой ошибки. “Этот знак минуса фактически дал указание аппарату игнорировать поступающие данные, пока не восстановится связь со станцией управления. Если этого минуса нет, получается что в компьютер поступает ошибочная информация. В данном случае бортовой компьютер направил команду “резко влево, нос к земле”, в результате чего аппарат упал с разрушением”.
Крушение ракеты Ariane 5 — запуск 501 — $8000000 убытков
В 1996 году ракета-грузовик без экипажа, принадлежавшая Европейскому космическому агентству, запущенная на экваториальном космодроме Куру в Латинской Америке, взорвалась на 40-й секунде полета. Это был первый запуск ракетоносителя. На разработку и доводку ракеты ушло 10 лет и миллионы долларов.
Причины прояснились через две недели. Комиссия выяснила, что причиной взрыва был сбой в программе управления инерциальной системой ориентировки. Оказалось, что софт не обновляли от 4-й версии ракеты, а просто установили “как есть” на 5-ю. А новая версия ракеты была оснащена более мощным двигателем, с которым старая система управления попросту не справилась.
Дальнейшее расследование уточнило причины. Оказалось, что дело не только в смене версий. В программе 64-битное число с плавающей точкой, описывающее горизонтальную скорость, конвертировалось в 16-битное целое число. Число оказалось больше чем допустимые 32767 (самое большое число для 16-битного целого как ты помнишь?), и преобразование не было обработано корректно. Двигатель перешел в нештатный режим на 39-й секунде, ракета сразу же начала разрушаться “от неправильного баланса аэродинамических сил”.
Ошибка в процессоре Pentium — $475000000 убытков
“Ошибка FDIV” в процессоре Pentium стала самым известным багом микропроцессоров Intel. Новое разрекламированное поколение процессоров заявлялось как “быстрое и точное”, вместо этого стало печально известно как буквально кишевшее багами, а самый крупный из них — ошибка в таблице поиска в интелловском SRT-алгоритме (“выбор кратчайшего времени”).
Руководство Intel поставило инженерам задачу: в новом процессоре ускорить вычисление скалярного кода с плавающей точкой в 3 раза, и векторного кода в 5 раз, по сравнению с древней серией 486DX. В Intel решили применить перспективный SRT-алгоритм, генерирующий по два коэффициентных бита на такт. Старый алгоритм “сдвига с вычитанием” в 486-й серии генерировал один коэффициентный бит на такт. Такой SRT-алгоритм задействует таблицу поиска в вычислении промежуточных коэффициентов, связанных с делением чисел с плавающей точкой. Таблица поиска изготовленная инженерами Intel состояла из 1066 ячеек. Из них, “благодаря” ошибке программиста, 5 ячеек некорректно передавались в логическую матрицу (PLA). Если любая из этих бракованных 5 ячеек запрашивалась из модуля вычислений с плавающей точкой (FPU), она выдавала значение “0” вместо положенного “+2”. Это искажало вычисления в модуле и иногда приводило к заметно менее точному результату (ошибка в четвертом разряде после точки), причем из-за “рекурсивной” природы SRT-алгоритма такие ошибки “накапливались”.
В основном, все же, точность вычислений “пентиума” страдала лишь в 9 или 10 разряде после точки. Впрочем, покупатели и клиенты не очень-то слушали эти оправдания, и бодро подавали в суд, как поодиночке так и целыми компаниями, что и сформировало впечатляющую сумму убытков Intel.
Червяк Моррис — $100000000 убытков
Оказывается бывает не только в плохом кино, когда студент-программист, пытающийся решить свою учебную задачу, случайно создает червя, приносящего убытков на 100 миллионов долларов (учитывая выплаченные компенсации и неустойки, как и в остальных случаях выше и ниже). Это произошло в далеком 1988 году. Роберт Моррис, студент последнего курса Корнуэльского университета, судя по всему действительно случайно создал опаснейший зловред. (Детальнее об этом сюжете можно почитать на сайте Университета Юты). Он выполнял “невинный эксперимент”, и сделал, как он уверял под присягой, случайную ошибку в коде. Червь вырвался на свободу и заразил тысячи компьютеров, которые в то время в Америке уже стали вполне обычным рабочим инструментом в офисах.
Роберта обвинили в хакерстве, и для начала оштрафовали на 10 тысяч долларов. Позже сумма причиненных убытков — всем потерпевшим — достигла 100 миллионов, так как компаниям пришлось восполнять недополученную прибыль, простои и т.п.
Адвокат Роберта доказывал, что не все так плохо, что червь “помог усовершенствовать системы безопасности”, создать такую вещь как антивирусы, а также познакомил широкую публику и компании с такой опасной вещью как компьютерные вирусы. Как-то выпутавшись из проблем (суд ему, в целом, поверил — что это был случайный непроверенный баг), Роберт основал фирму “Y Combinator”. Сейчас он профессор в самом уважаемом американском вузе — Массачусетском Технологическом (МИТ). Изъятая как вещественное доказательство 3,5-дюймовая дискета покоится в Музее Бостонского университета.
Банкротство спекулянтов из Knight — 440 миллионов долларов
Что будет, если самая хайповая из компаний-спекулянтов на американском фондовом рынке начинает некорректно работать с акциями: покупать слишком дорого, а продавать слишком дешево? Плохая идея, впереди банкротство? Именно это и случилось.
В разгар летних отпусков, 1 августа 2012, случилось нечто — кошмар для СЕО любой компании. То, что строилось 17 лет, рухнуло буквально за пару часов. Новый трейдинговый софт компании Knight содержал баг, который активировался когда Нью-Йоркская биржа открылась утром. Некорректный софт заставил компанию перейти в режим автоматической покупки акций, и пока руководство пыталось понять что происходит, то оказалось что куплены акции 150 компаний, на сумму 7 миллиардов долларов — и это лишь за первый час такого “трейдинга”.
Компания попыталась отменить последние торги, но американская Комиссия по фондовым биржам не дала разрешения: даже такая крупная компания как Knight, и даже при таком огромном объеме покупок акций, все-таки не превысила установленный правилами порог в 30% роста цен, при котором торги могут отменить. Исключение составили лишь 6 крупных транзакций, которые и были отменены, а все остальные убытки пришлось принять.
Катастрофа для компании: менеджменту стало ясно, что все ошибочно купленные активы нужно распродавать с большим убытком. Ситуацию немного смягчила Goldman Sachs, выкупив остатки этой некогда мощнейшей и перспективной компании.
Баг 2000 года. Полтриллиона долларов убытков
Одна неправильная буква, точнее цифра, способна принести убытков в полтриллиона долларов. Так случилось более двадцати лет назад, в канун нового столетия и тысячелетия. В англоязычном мире этот феномен был известен как Y2K Bug, или “миллениум-баг”. Коротко: компьютеры неправильно обрабатывали все даты позже 31 декабря 1999 г.
Как оказалось, в большинстве компьютеров той эпохи подсистема времени, а именно дат, оставалась почти без изменений с 1960х-1980х и до конца 1990х. Тогда было принято строжайше экономить место в памяти, довольствуясь всего двумя цифрами даты, последними, а “19” (почти) всегда отбрасывали (впрочем, так и сейчас, но конечно выводы из Y2K Bug сделаны). Дефицит места в памяти, из-за дороговизны компьютеров вообще, и планок памяти в частности, а потом инерция — отсюда жесткие ограничения на каждый байт.
Неумолимо приближалось новое столетие, и лишь немногие программисты понимали, что компьютеры, спроектированные, на своем базовом уровне в 1960е-1970е, могут неправильно принимать введенную дату. А именно, дату “00” компьютер принимал как “1900”-й год. Конечно, подобное недоразумение могло повлечь серьезнейшие последствия если речь шла об инфраструктуре, или повреждение пользовательских данных.
Громче всех паниковали СЕО банков — например, как считать проценты, если депозит “вернулся в прошлое” на сто лет? Множились опасения также в транспортной сфере, на электростанциях, и в других объектах инфраструктуры.
Реагируя на панику в СМИ, в США приняли специальный закон “О готовности к 2000 году”, призванный подготовить инфраструктуру и банки к знаменательной дате “миллениума”. Президент Клинтон создал “Совет по проблеме 2000 года”, с собой во главе. Совет, помимо государственной критической инфраструктуры, надзирал над банками, и советовался с их директорами как избежать убытков (которых полностью избежать все-таки не удалось). Общие мировые затраты на проверку инфраструктуры и банков превысили 600 миллиардов (да, миллиардов долларов), по подсчетам компании Gartner.
Такие дела.
Остается лишь надеяться, что сейчас тестируют лучше.
Возможно будет интересно также:
Баги войны

- Путаница в тысячелетиях
- Високосная секунда
- Самый дорогой дефис в истории
- Therac-25: машина-убийца
- «Пьяный» Apple Maps
- Фунты или ньютоны?
- «Буря в пустыне»
По статистике, на каждую тысячу строк написанного кода приходится от 3 до 20 ошибок — иногда это пропущенный пробел, иногда один лишний дефис. Одной такой мелочи вполне достаточно, чтобы произошла неизбежная катастрофа. Вот несколько простых компьютерных ошибок, которые привели к масштабным катастрофам.
Путаница в тысячелетиях
Первые компьютеры появились в 1950-х годах и имели очень небольшой объем памяти. По этой причине программисты, в целях экономии, использовали двузначное обозначение годов — вместо 1955 года они просто писали «55».
Проблема возникла с наступлением 2000 года, когда многие компьютерные системы стали допускать одну и ту же ошибку — дата «00» означала для них 1900 год. В конечном итоге сбой оказался не таким серьезным, но, по подсчетам, на «обновление» всех компьютерных систем было потрачено сотни миллионов долларов.
Високосная секунда
В мире существует такое понятие, как високосная секунда. Каждые несколько лет, обычно в июне или декабре, к году добавляется одна секунда для синхронизации всемирного координированного времени со средним солнечным временем.
30 июня 2012 года компьютеры Linux были сбиты с толку, когда их часы достигли 23:59:60 UTC. Такая мелочь помешала пользователям авторизоваться в основных сервисах Google, Reddit, LinkedIn и других подобных сервисах, а также создала “лазейку” для хакеров.
Самый дорогой дефис в истории
22 июля 1962 года НАСА запустило ракету для доставки зонда «Маринер-1» на орбиту Венеры. Но банальная ошибка в программном коде ракеты привела к катастрофе. Компьютерная программа не нашла в инструкциях дефис, который должен был отвечать за любое изменение скорости, и стала принимать радиосигналы с других систем наведения.
Неправильные сигналы сбили ракету с курса, она начала совершать серию резких движений, чтобы отрегулировать свою скорость. Во время полета никто не понимал, в чем причина, поэтому инженеры НАСА решили уничтожить ракету уже через несколько минут после запуска. Пропущенный дефис обошелся агентству в миллионы долларов.
Therac-25: машина-убийца
В период с 1985 по 1987 год лучевая терапия проводилась с помощью аппарата Therac-25. В инновационном устройстве, которое должно было впервые выполнять несколько операций одновременно, использовался старый код.
Возможно, Вы бы хотели читать нас чаще, тогда вот наш Telegram
Через некоторое время система вышла из строя и стала искажать результаты. Ошибка привела как минимум к пяти смертям, поскольку пациенты получали гораздо большие дозы облучения, чем следовало. Этот случай до сих пор широко обсуждается в большинстве ИТ-университетов.
«Пьяный» Apple Maps
В 2012 году Apple решила отказаться от Google Maps и представила новое мобильное приложение Apple Maps с функцией Street View (свой панорамный вид улиц). Проблема в том, что алгоритмы компании немного сбились и стали генерировать вид прямо из постапокалиптического мира: изогнутые мосты, расплющенные автомобили, сюрреалистичные деревья.
К счастью, ошибка не принесла никакого вреда, а наоборот, вызвала много смеха у пользователей.
Фунты или ньютоны?
Проэкт Mars Cilmate Orbiter закончился полным провалом. Зонд, который в 1998 году должен был изучать климат на Марсе, вошел в марсианскую атмосферу на слишком высокой скорости и не верной траектории. В результате аппарат стоимостью $190 млн сгорел в атмосфере.
В ходе расследования выяснилось, что команда наземного управления использовала в качестве единицы измерения силы фунты, в то время как программное обеспечение зонда считало значения в ньютонах. Короче говоря, зонд интерпретировал данные, приведенные в фунтах, в ньютоны. Ошибка обошлась НАСА очень дорого.
«Буря в пустыне»
Во время войны в Ираке, а точнее во время операции «Буря в пустыне», произошел сбой в работе противоракетных систем Patriot. В решающий момент системы не сработали должным образом, из-за чего погибло 28 солдат. Оказалось, что после 100 часов работы компьютер зацикливался на 0,003 секунды, и это время увеличивалось с каждым последующим часом. Через несколько дней ошибка достигла 0,3 секунды.
Этого было достаточно для того, чтобы Patriot некорректно среагировал в ключевой момент. Систему никто не тестировал более 100 часов, поскольку на это не было никаких указаний.
Добавьте «Нескучные технологии» в избранные источники
Интересуюсь технологиями, регулярно выдаю в печать информацию о значимых событиях, нескучных фактах и новинках из мира науки и техники.