2003

5 худших багов в истории

Никто не любит баги. Эти сбои в системе, из-за которых все может взлететь к чертям: важный документ в Word не сохраняется, код не работает, а система зависает. Кстати, первый в истории баг случился по причине мотылька, который в 1945 году застрял между контактами электромеханического реле в вычислительной машине Mark II Aiken Relay Calculator. Извлеченное насекомое программисты вклеили в технический дневник, подписав: «First actual case of bug being found». Так родилось слово «баг». Но что значит ошибка в «ворде», когда из-за бага могла упасть целая телефонная сеть или запуститься ракета? Итак, перед вами – 5 худших багов в истории!

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

Это был прекрасный день. 15 января 1990 года, зима в Нью-Йорке. Вышла новая прошивка междугородних коммутаторов. Внезапно обрушились 114 соседних коммутаторов и 60.000 человек остались без междугородней связи на 9 часов! В коде было прописано: перезагружаться в случае получения определенно сигнала. Но все сложилось так, что по ошибке коммутатор рассылался каждый раз при восстановлении после сбоя какого-либо коммутатора. 114 коммутаторов перезагружались каждые 6 секунд. А причина оказалась проста: в ошибочной строке кода реализовывалась отправка неверного сигнала. Вот вам и баг, от которого пострадали тысячи людей!

at

Запуск ракеты Mariner I

В 1962 году ракета с космическим зондом Mariner-1 должна была отправиться к Венере. Но буквально через минуту после запуска ракета отклонилась от своей траектории. А через 293 секунды Mariner-1 был вынесен смертный приговор: ракету вместе с зондом решили уничтожить, когда та будет пролетать над Атлантическим океаном. Погибших не было, если не считать деньги: 18.3 миллиона доллара ушли в небытие вместе с Mariner-1.

mariner 1

Виновником оказался программист, который сделал ошибку, когда переводил рукописные математические формулы в код. Символ логического отрицания он принял за минус, и это привело к тому, что ракета воспринимала нормальные скорости как критические и из-за этого сбилась с курса.

Аппарат лучевой терапии Therac-25

В 1985 году баг в этом аппарате привел к двум смертям и четырем случаям облучения. Ошибка крылась в программном управлении защитой от облучения, которая считалась более надежной, чем электромеханическая. Известно, что неисправность была вызвана тем, что в проекте использовались библиотеки с ошибками, входящие в состав ПО аппарата Therac-25, что и привело к фатальным последствиям. В коде была найдена довольно распространенная ошибка многопоточности, называемая «состоянием гонки». Но ее не заметили, так как Therac-25 работал вполне исправно из-за дополнительных мер предосторожности. Поэтому неспроста на собеседовании часто спрашивают о многопоточноысти!

Therac-25-Medical-Accelerator

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

И еще немного о ракетах и взрывах. В 1996 году ракета Ariane 5 и 4 научных спутника на борту взорвалась через 36.7 секунд после взлета. Банальная ошибка переполнения переменной нанесла ущерб в 7 миллиардов долларов! При разработке системы управления ракетой были использованы некоторые части кода от ПО Ariane 4, однако у Ariane 5 показатели скорости были немного больше, что и вызвало переполнение переменной. Ошибки можно было избежать, если бы программисты при использовании ПО от другого оборудования не забыли бы подправить код.

Массовое отключение электроэнергии в США и Канаде

В 2003 году «состояние гонки» (с которым вы уже знакомы) в ПО системы управления электростанцией вызвало прекращение подачи электроэнергии. В результате 55 миллионов человек лишились электричества!

blackout

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

Будьте внимательны при работе с ошибками!