Человеческий фактор: 7 катастрофических последствий программных ошибок

Автор: Владислав Режепа, 14 марта 2017, 00:00

На протяжении многих лет главной уязвимостью любого программного обеспечения был человеческий фактор. Многие специалисты сходятся во мнении, что баги существуют везде и всегда. Большинство багов обнаруживаются на этапе компиляции и тестирования, остальные же умело скрываясь, превращаются в бомбы замедленного действия. Одно дело, когда такие ошибки имеют незначительный характер, а другое, когда из-за них погибают люди или наносится ущерб в сотни миллионов долларов. В этой статье мы рассмотрим 7 самых известных происшествий, случившихся в результате сбоя в программном обеспечении.

Потеря спутника NASA

Человеческий фактор: 7 катастрофических последствий программных ошибок

В 1998 году спутник «Mars Climate Orbiter» стоимостью $125 млн. разбился вследствие ошибки инженеров NASA. Субподрядчик, ответственный за программирование спутника забыл перевести единицы измерения силы в метрическую систему. В итоге, в командах по тяге двигателя в программном обеспечении спутника использовалась единица измерения силы — ньютон, в то время как в NASA была запрограммирована английская единицу измерения — фунт.

В результате этой ошибки Mars Climate Orbiter после 286-дневного полета вошел в атмосферу Марса на слишком большой скорости и на 50 километров ниже предполагаемой орбиты. Из-за перегрузок вышли из строя системы связи, и спутник распался в атмосфере, так и не достигнув поверхности красной планеты. Спустя несколько месяцев, по неизвестным причинам во время посадки на Марс разбился еще один спутник — Mars Polar Lander. Таким образом, миссия Mars Surveyor’98 завершилась неудачей, и дальнейшие попытки полетов отложились на длительный срок. К слову в 2007 году, NASA все же окончательно перешла на метрическую систему расчета.

Toyota и 81514 нарушений в коде

Человеческий фактор: 7 катастрофических последствий программных ошибок-2

Недавно Национальное управление безопасностью движения на трассах США (NHTSA) опубликовало страшную статистику. По подсчетам NHTSA в период с 2000 по 2010 год в авариях в результате багов в программном обеспечении автомобилей Toyota погибло 89 человек. Компания в свою очередь отрицает вину софта и винит во всем западающую педаль газа, и неправильно расположенные коврики. В ходе 10-месячного расследования NHTSA совместно с NASA выявили, что программное обеспечение автомобилей не соответствовало стандартам MISRA и содержит более 7134 ошибки. Большинство ошибок было найдено в системе электронного управления дроссельной заслонкой.

В 2010 году Toyota опровергла все обвинения, но в итоге выплатила 16 млрд. долларов штрафа по искам, отозвала 5,5 млн. автомобилей и обновила старый софт. Слишком много фактов для простого совпадения. Позже к исследованию подключились еще два независимых исследователя Майкл Барр и Филипп Купман, которые за 20 месяцев разобрали 280000 строчек исходного кода ПО Тойоты. Инженеры работали в засекреченном и охраняемом номере отеля без телефонов и интернета. В отчете на 800 страниц, инженеры опубликовали еще более ужасающую цифру — 81514 ошибок в коде. В результате отчет засекретили, Toyota отзывала более 10 миллионов автомобилей по всему миру. Компания так и не признала вину.

Смертельное облучение

Человеческий фактор: 7 катастрофических последствий программных ошибок-3

Резонансный случай гибели шести человек в период с 1985 по 1987 год, которые из-за ошибки в программном обеспечении медицинского ускорителя Therac-25 получили смертельную дозу радиации, превышающую допустимую в несколько тысяч раз. Данные ускорители применяются для высокоточного уничтожения опухолей и в своей работе используют электроны для создания лучей высокой энергии. Основанная на предыдущей модели, улучшенная версия Therac-25 могла создавать два вида излучения: слабое бета-излучение и обычное рентгеновское излучение. Еще одно нововведение заключалось в том, что вместо привычной электромеханической защиты использовалось новая программная защита.

Обе модернизации были реализованы всего одним программистом, а это 20 миллионов инструкций написанных на ассемблере. Новое программное обеспечение было установлено практически на все аппараты Therac-25. Ускорители, которые до середины 1980-х годов работали безупречно, стали накапливать инциденты разной степени тяжести: от ампутации конечностей до гибели пациентов. Первое время баги попросту не замечали, и во всех неисправностях винили аппаратное обеспечение. Однако после очередной гибели пациента, при котором он получил дозу радиации в 20 000 рад, при критической для жизни человека в 1000 рад, последовало судебное разбирательство. Независимыми экспертами в течение нескольких дней был выявлен целый ряд программных ошибок.

Случай на ракетном крейсере «Йорктаун CG-48»

Человеческий фактор: 7 катастрофических последствий программных ошибок-4

В 1997 году в результате деления на ноль в компьютеризированной системе управления американского ракетного крейсера «Йорктаун CG-48» вышли из строя все системы управление кораблем, включая главную энергетическую установку. На Йорктауне были установлены 27 компьютеров Pentium-Pro на 200 МГц, которые позволяли автоматизировать управление кораблем без участия человека.

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

Авария ракеты-носителя Ariane-5

Человеческий фактор: 7 катастрофических последствий программных ошибок-5

4 июня 1996 г. новая ракета-носитель Ariane 5, результат многолетней работы европейских ученых, гордость стран Евросоюза, взорвалась через 40 секунд после своего первого старта. Данная катастрофа, произошедшая в результате программного сбоя, считается одной из самых дорогостоящих в истории. Только научное оборудование на борту ракеты стоило около $500 млн, не говоря о большом количестве побочных финансовых последствий.

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

Обновление программного обеспечения на атомной станции

Человеческий фактор: 7 катастрофических последствий программных ошибок-6

В 2008 году атомная электростанция мощностью 1,759 МВт, расположенная в штате Джорджиа, США в экстренном режиме прекратила работу на двое суток. Инженер, занимавшийся техническим обслуживанием станции, установил новое программное обеспечение на главный компьютер, использовавшийся для контроля над химическими данными и диагностики основной системы АЭС. После установки нового ПО компьютер в штатном режиме перезагрузился, стерев при этом из памяти часть данных дозиметрического контроля. В результате система безопасности приняла потерю данных за утечку радиоактивных веществ в систему охлаждения реактора и остановила работу всех систем станции почти на 48 часов.

Блэкаут в США

Человеческий фактор: 7 катастрофических последствий программных ошибок-7

Небольшая программная ошибка в системе мониторинга оборудования General Electric Energy, привела к тому, что ночью 14 августа 2003 года 55 миллионов американцев остались без электричества. На восточном побережье США на несколько часов обесточилось все: аэропорты, больницы, школы и жилые дома.

В 0:15 ночи оператор энергетической станции обнаружил незначительную проблему, которая вызвала срабатывание сигнализации. Оператор сумел за короткий срок решить проблему, но забыл перезапустить систему мониторинга, из-за чего сигнализация осталась в выключенном состоянии. Работа продолжилась в штатном режиме, до тех пор, пока через несколько часов в Огайо, в результате контакта с деревом не вышли из строя линии электропередач. Никто из операторов не обнаружил проблему, которая приняла волнообразный характер. Одна за другой стали выключаться перегруженные линии электропередач в Нью-Йорке, Онтарио, Мичигане и так далее. Проблема переросла в настоящую катастрофу, и все из-за единственной выключенной сигнализации. После данного случая компания стала устанавливать дублирующие системы сигнализации на все электростанции.

Подписывайтесь на наш нескучный канал в Telegram, чтобы ничего не пропустить.

Поделиться