Разделы портала

Онлайн-тренинги

.
Самые ужасные баги в истории
08.06.2015 13:29

Подборку подготовила Ольга Алифанова

Все мы знаем, что баги могут ужасно досаждать. Но помимо мелких неприятностей, они также могут повлечь за собой колоссальные убытки, ущерб и даже смерть. Портал Software-Testing.ru подготовил подборку самых катастрофических багов в истории.

 

1962 год, ракета Mariner 1

01.gif

Результат бага: ракета Mariner 1, направлявшаяся к Венере, почти сразу после старта отклонилась от маршрута. Так как риск ее падения был очень высоким, инженеры NASA дали команду самоуничтожиться. Ракета продержалась в воздухе 293 секунды. Потери составили 18,5 миллионов долларов.

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

1978 год, обрушение Хартфорд Цивик-центра (Hartford Coliseum)

02.jpg

Результат бага: не прошло и пары часов после встречи двух баскетбольных команд, как стальная крыша стадиона обрушилась под весом мокрого снега. Потери – 70 миллионов долларов, и урон для местной экономики еще на 20 миллионов.

Причина: программист CAD – ПО, которое использовалось для дизайна стадиона – предположил, что опоры крыши будут только сжиматься. Поэтому, когда одна из них рухнула под весом снега, это запустило цепную реакцию, и крыша сложилась, как домино.

1982 год, взрыв газа на Транссибирской магистрали

03.jpg

На самом деле этот инцидент, скорее всего, никогда не случался в реальности – американские источники утверждают, что он произошел, советские (российские) – отрицают.

Результат бага: ПО, отвечающее за управление газопроводом, отказало и стало нагнетать давление в трубах. В результате произошел наиболее мощный в истории неядерный взрыв, причиной которого были люди, а не природные явления.

Причина: предположительно, баги, специально занесенные в ПО ЦРУ – ПО приобреталось в рамках плана по добыче секретных американских технологий. Некоторые источники в КГБ утверждают, что взрыв был вызван особенностями конструкции, а не программным обеспечением, некоторые – отрицают факт взрыва полностью.

1983 год, Третья мировая война. Почти.

04.jpg

Результат бага: сбой в системе раннего реагирования СССР привел к ложному сообщению о запуске пяти баллистических ракет с территории США. К счастью, дежурный офицер Станислав Петров почувствовал неладное – если бы США атаковали, решил он, они бы запустили больше ракет. Тревога была внесена в отчеты как ложная.

Причина: ошибка в ПО не позволяла отличить запуск ракеты от отблесков солнца на вершине облаков.

1985 год, врачи-убийцы

1-therac25.png

Результат бага: медицинское устройство для радиационной терапии Therac-25 засбоило и выдало смертельную дозу радиации пациентам. Четыре человека погибли, еще двоим был нанесен тяжкий ущерб для здоровья.

Причина: у устройства было два режима работы – первый, когда луч электронов направлялся напрямую на пациента в небольших дозах, и второй, когда луч сперва нацеливался на металлическую "цель", которая превращала его в радиационные лучи и передавала пациенту. В предыдущих моделях устройства второй режим был оснащен физическими детекторами наличия "цели" на месте, чтобы лучи не направлялись напрямую на пациента в колоссальных дозах. В Therac-25 физические детекторы были заменены программными. К сожалению, ПО было подвержено "арифметической перегрузке" – система начинала использовать во внутренних расчетах число, которые было чересчур большим для операций с ним. Если именно в этот момент оператор настраивал машину, проверки безопасности отказывали и "цель" не перемещалась на место. В результате пациент получал в 100 раз большую дозу радиации.

1987 год, крах Wall Street

06.jpg

Результат бага: в "Черный понедельник", 19 октября 1987 года, индекс Dow Jones упал на 508 пунктов, утратив 22,6% свой стоимости. S&P 500 упал на 20,4%. Это была наибольшая потеря для Wall Street в истории – 500 миллиардов долларов за одни сутки.

Причина: работа "бычьего" рынка длинных позиций была приостановлена из-за расследований Комиссии США по ценным бумагам и других происшествий. Так как рынок начал падать, ПО для программного трейдинга автоматически начало сбрасывать ценные бумаги, перенасыщая рынок.

По некоторым данным, баг ПО, возможно, не стал причиной краха биржи – кризис начался в Гонконге, где программный трейдинг не был распространен.

1990 год, молчание AT&T

07.jpg

Результат бага: переключатель на одной из 114 АТС AT&T был механически поврежден и автоматически отключил АТС. Когда АТС включилась, она отправила сообщение на другие АТС, вызвавшее их отключение и положившее сеть AT&T на девять часов. АТС продолжали последовательно перезагружаться, и компания вначале решила, что подверглась хакерской атаке. 60 тысяч человек не смогли дозвониться, общие потери компании составили 60 миллионов долларов.

Причина: строчка кода в сложном обновлении для ПО АТС, установленном с целью повысить скорость обмена данными. Изначально переключатели работали по следующему принципу – если ломался один, он посылал сообщение "не беспокоить" на другие, и другой переключатель подхватывал трафик сломавшегося, перезагружаясь, чтобы перейти в другой режим и не беспокоить первый переключатель. Периодически работающий переключатель проверял сломавшийся, и если обнаруживал активность, снова перезагружался, чтобы перейти в обычный режим. После внедренного улучшения проблемный переключатель высылал два сообщения, и второе настигало рабочий переключатель ровно в момент перезагрузки. Второй переключатель предполагал, что с его собственной внутренней логикой что-то не так, и отправлял сообщение "не беспокоить" далее, передавая проблему на следующий переключатель. В результате достаточно было одного сбоя – и вся система складывалась, как костяшки домино.

1991 год, Patriot и война в Персидском заливе

08.jpg

Результат бага: зенитный ракетный комплекс Patriot не смог перехватить иракскую ракету, которая попала в казармы США. 28 человек погибло, 100 ранено.

Причина: из-за ошибки округления в ПО ЗРК оно неверно рассчитало время, и в результате ракета была проигнорирована. Каждые 100 часов бесперебойной работы комплекса приводили к отклонению на 1/3 секунды.

1993 год, Pentium и ошибка плавающей точки

09.jpg

Результат бага: новый Pentium-чип компании Intel периодически совершал ошибки при делении чисел с плавающей точкой внутри определенного диапазона. Например, 4195835.0/3145727.0 выдавало результат 1.33374 вместо 1.33382 – ошибка в 0.006%. Проблема затронула небольшое количество пользователей, но стала ночным кошмаром PR-службы. В использовании находилось около 5 миллионов дефектных чипов. Intel вначале предложила заменять чипы только тем, кто докажет, что нуждается в такой высокой точности – однако в результате заменены были все чипы. Потери – 475 миллионов долларов, большой урон по репутации компании.

Причина: ошибка в таблице делений приводила к пропуску примерно 5 из каждой тысячи показателей, приводя к ошибке округления.

1996 год, ракета Ariane

10.jpg

Результат бага: новейшая беспилотная ракета Ariane была уничтожена через несколько секунд после запуска. Вместе с ракетой погибло четыре научных спутника, предназначенных для изучения взаимодействия магнитного поля Земли с солнечными ветрами. Потери составили 500 миллионов долларов (спутники) плюс 8 миллиардов долларов затрат на разработку Ariane.

Причина: бортовой компьютер попытался перевести скорость ракеты из 64-битного формата в 16-битный. Результат был слишком большим, и компьютер отказал. Контроль над ракетой был передан страховочному модулю, который использовал тот же самый алгоритм и, в свою очередь, выключился.

На видео можно наблюдать шок инженера при взрыве ракеты.

http://www.youtube.com/watch?v=IONcgYzVFlg

1998 год, миссия Mars Climate Orbiter

Результат бага: на 286-е сутки своего полета спутник-транслятор Mars Climate Orbiter начал переход на высокоэллиптическую орбиту Марса. Аппарат включил двигатели на торможение и "перелетел" орбиту. Скорее всего, он попал в атмосферу Марса и разбился. Потери составили 125 миллионов долларов.

Причина: программное обеспечение, которое контролировало тягу двигателя, использовало фунт-силу вместо ньютона в качестве единицы измерения. Команды для тяги двигателя предполагали ньютоны, что и привело к отклонению в курсе спутника.

1999 год, катастрофа катастроф

13.jpg

Результат бага: смешно, но программа для изучения несчастных случаев стала несчастным случаем сама. Медицинский журнал Новой Англии (New England Journal of Medicine) опубликовал исследование о повышении числа самоубийств после природных катастроф. Результаты были ложными. Материальных потерь никто не понес, но репутационные потери для научного сообщества были значительными.

Причина: ошибка в программе удвоила количество суицидов для одного года в исследуемом промежутке. Этого оказалось достаточно, чтобы до неузнаваемости исказить результаты исследования.

1999 год, британские паспорта

14.jpg

Результат бага: только что внедренная британским паспортным агентством система Siemens не справилась со своевременным выпуском паспортов для 500 тысяч жителей Великобритании. Компания выплатила компенсацию пострадавшим гражданам и сотрудникам за переработку, и оплатила зонтики для ожидающих в очереди – шли традиционные британские дожди. Общие потери – 12,6 миллионов фунтов.

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

2000 год, врачи-убийцы, выпуск №2

16.jpg

Результат бага: программное обеспечение для радиационной терапии неверно рассчитывало дозировку, облучая пациентов вредной и иногда смертельной дозой радиацией. Врачи, которые обязаны были перепроверять расчеты программы, были осуждены за убийство. Всего погибло 8 человек, непоправимый ущерб нанесен здоровью еще 20.

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

2000 год, крушение Osprey

17.jpg

Результат бага: конвертоплан Osprey, гибрид самолета и вертолета, разбился, когда система переключалась с самолетного режима на вертолетный для посадки. Погибло 4 морских пехотинца США. Бортовой компьютер нашел уязвимость в гидравлической системе и остановил двигатели. Пилоты действовали согласно инструкции и перезагрузили компьютер, чтобы запустить двигатели снова. Двигатели быстро заглохли, и конвертоплан упал в болото.

Причина: ошибка ПО. Конкретика засекречена и не разглашается. Также неизвестно, кто виноват в ошибке – конвертоплан совместно производили Boeing и Bell Helicopter.

2007 год, ошибка проверки на подлинность Windows

18.jpg

Результат бага: тысячи пользователей Windows по ошибке получили сообщение, что их система – пиратская. Пользователи Windows XP почти не пострадали – система только информировала их, что они используют нелегальное ПО. У пользователей Windows Vista был отключен ряд функций, в том числе Aero и поддержка виртуальных RAM-дисков.

Причина: на прод случайно залили непротестированную систему. Баг был обнаружен спустя полчаса, но выпущенное обновление исправило только проблему с активациями, а валидация продолжала сбоить. Неисправный софт работал около 19 часов, создав проблемы множеству пользователей операционной системы.

2008 год, пятый терминал аэропорта Хитроу

19.jpg

Результат бага: в новом терминале Хитроу установили суперсовременную систему контроля багажа, предназначенную для перевозки множества грузов. Система была тщательно протестирована с более чем 12 тысячами сумок и чемоданов. В результате в день открытия терминала 42000 чемоданов потерялись, не улетев вместе со своими хозяевами. Отменено более 500 авиарейсов. Чекин на другие рейсы был временно приостановлен.

Причина: система не справилась с реальными сценариями, которые почему-то не были проверены при тестировании. Например, снятие багажа с ленты вручную (пассажир внезапно вспомнил, что там ценная и нужная ему прямо сейчас вещь) сводило программу с ума, и она выключалась.

2012 год, крах Knight Capital Group

20.jpg

Результат бага: потеряв 440 миллионов долларов за 30 минут, компания была вынуждена согласиться на слияние. Один из крупнейших игроков трейдерского рынка в США потерял 75% своих акций в одночасье. Как и в случае с крахом Уолл-стрит, виноваты были торговые роботы.

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

Будьте бдительны. Тестируйте тщательно.