Цена ошибки программиста

Цена ошибки: кто и сколько платит за промахи программистов?

Время на прочтение
7 мин

Количество просмотров 28K

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

Picture 4

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

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

Поговорим о деньгах, потерянных из-за ошибок в программном обеспечении, и росте нашей зависимости от программного кода. Тема неоднократно обсуждаемая (в том числе моим коллегой — Андреем Карповым — «Большой Калькулятор выходит из-под контроля»), и каждый новый пример доказывает: качество кода — не то, чем можно пренебрегать.

Picture 1

Космос

Дорогой дефис

Спутник Mariner 1 в 1962 году должен был отправиться к Венере. Стартовав с мыса Канаверал, ракета практически сразу сильно отклонилась от курса, что создало серьезную угрозу падения на землю. Для предотвращения возможной катастрофы NASA было принято решение запустить систему самоуничтожения ракеты. Спустя 293 секунды с момента старта, Mariner 1 был ликвидирован.

Picture 3

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

Программист неправильно перевел написанную формулу в компьютерный код, пропустив макрон или надчёркивание (что значит «n-ое сглаживание значения производной радиуса R по времени»).

Программа даже незначительные изменения скорости воспринимала как весьма существенные и проводила корректировку курса (источник).

Цена «пропущенного дефиса» — 18 млн долларов (на тот момент).

Российский GPS, опустившийся на дно

Ярким примером того, как из-за программной ошибки могут быть потеряны миллионы, является относительно недавний случай. Казалось бы, в 21 веке есть все необходимое для написания надёжных программ, особенно, если речь идет о космической отрасли. Опытные специалисты с отличным образованием, хорошее финансирование, возможность использования лучших инструментов для проверки программного обеспечения. Все это не помогло. 5 декабря 2010 года ракета-носитель «Протон-М» с тремя спутниками «Глонасс-М» — российский аналог GPS, упала в Тихий океан.

Picture 5

Причину аварии, после завершения расследования, озвучил официальный представитель Генпрокуратуры РФ Александр Куренной: «Установлено, что причиной аварии стало применение неверной формулы, в результате чего масса заправленного в бак окислителя разгонного блока жидкого кислорода на 1582 кг превысила максимально допустимую величину, что повлекло выведение ракеты-носителя на незамкнутую орбиту и его падение в акваторию Тихого океана» (источник).

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

Автомобили

Еще в 2009 году профессор информатики в Техническом университете Мюнхена, эксперт по программному обеспечению в автомобилях Манфред Бра, сказал: «Программное обеспечение автомобиля премиум-класса содержит около 100 миллионов строк кода» (источник). С того момента прошло уже восемь лет, и совсем не обязательно быть поклонником передачи Top Gear, чтобы заметить: современные автомобили — это настоящие интеллектуальные машины.

По заявлению все того же эксперта, стоимость программного обеспечения и электроники в автомобиле составляет порядка 40% от его цены на рынке. И это касается бензиновых моторов, что же говорить о гибридах и электрокарах, где это значение равно примерно 70%!

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

Садиться за руль современных комфортных и «умных» авто или ездить на олдскульных, но понятных машинах? Решать вам, я же предлагаю небольшую подборку багов в программном обеспечении автомобилей.

И снова Toyota

Японские автомобили Toyota имеют положительную репутацию, но периодически в СМИ попадает информация об отзыве некоторого количества машин. В нашем блоге уже есть статья о программной ошибке в Toyota — «Toyota: 81 514 нарушений в коде», но этот случай, к сожалению, не единичный.

Picture 6

В 2005 году было отозвано 160 тыс. гибридов Toyota Prius 2004 года выпуска и начала 2005. Проблема заключалась в том, что машина могла в любой момент остановиться и заглохнуть. На устранение бага было затрачено около 90 минут на одно транспортное средство или около 240 тыс. человеко-часов.

Chrysler и Volkswagen

В мае 2008 года Chrysler отозвал 24535 автомобилей Jeep Commanders 2006 года выпуска. Причина — программная ошибка в модуле управления автоматической трансмиссией. Сбой приводил к неконтролируемой остановке двигателя.

В июне того же года Volkswagen отзывает около 4000 Passat и 2500 Tiguans. Здесь ошибка в программном обеспечении оказывала воздействие на увеличение оборотов двигателя. Показания тахометра начинали ползти вверх при включенном кондиционере.

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

Tesla

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

Поговорим, конечно же, о Tesla Model S. 7 мая 2016 Джошуа Браун, прославившийся благодаря своим роликам на YouTube, посвященным восхвалениям электромобиля, попал в автокатастрофу. Он находился за рулем Tesla Model S. Будучи на 100% уверенным в интеллекте машины, он доверился автопилоту. Результат доверия трагичный — от полученных травм Джошуа скончался на месте.

Катастрофа получила широкую огласку. Началось расследование. Удалось установить, что, по всей видимости, Браун самостоятельно не следил за дорогой, а автопилот столкнулся с ситуацией, которая не нашла отражение в его программном коде. Перед Tesla Джошуа двигался грузовик с прицепом. Автомобиль планировал выполнить маневр — левый поворот, соответственно, требовалось сбавить скорость. Но Tesla, едущий позади, не начал тормозить, т.к. системы автопилота не распознали находящийся впереди объект.

Произошло это, скорее всего, из-за яркого солнца. Лучи отражались от прицепа и автопилот воспринял грузовик единым целым с небом. В официальном докладе это объяснялось следующим образом: «Системы автоматического торможения Теслы являются технологией избегания столкновения в редких случаях и не спроектированы для надежного выполнения во всех режимах аварии, включая столкновения в результате пересечения путей» (источник). Полный отчет об аварии находится в свободном доступе.

Иными словами, автопилот призван помогать водителю (более совершенный круиз-контроль, грубо говоря), а не заменять его функции. Конечно, репутацию Tesla такое оправдание не сильно спасло. Работы над совершенствованием программного обеспечения продолжились, но Tesla Model S с дорог отозваны не были.

Picture 7

Представители компании привели следующую дорожную статистику: «На каждые 90 млн. миль пройденного пути умирает один человек. В противоположность, люди проезжали 130 млн. миль на автопилоте Тесла перед тем, как была подтверждена первая смерть. Сейчас эта цифра поднялась до 200 млн.» (источник)

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

И это не риторический вопрос. Судя по новостям биржи, вопреки нашумевшей аварии, акции Tesla выросли на 50% с начала 2017 года. Способствуют этому два значимых фактора: популярность движений, выступающих за улучшение экологии в мире, и высокий личный рейтинг главы Tesla — Илона Маска.

Всеобщий масштаб — Беда 2038 года

Не могла не привести в завершении статьи этот пример. Подробно о Беде 2038 года вы можете прочитать в статье «2038: остался всего 21 год», я же остановлю внимание на одном важном моменте.

Оборудование для заводов: всевозможные станки, конвейеры; бытовая техника и другие сложные агрегаты, оснащенные специализированным программным обеспечением, имеют достаточно продолжительный срок службы. Вероятность того, что выпущенный в 2017 году станок будет функционировать и в 2038 очень и очень велика. Отсюда логично сделать вывод: проблема, когда 32-битные значения типа time_t больше не смогут корректно отображать даты, уже актуальна!

Если сейчас разработчики программного обеспечения не будут брать ее в расчет, то что же ждет программистов в 2038 году?! Есть все шансы на то, что ПО для встроенных систем устроит немало сюрпризов. Но, думаю, мы будем тому свидетелями.

Заключение

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

Можно ли найти виновного? Иногда да, иногда — нет. Но смысл не в том, чтобы найти крайнего и каким-то образом покарать его. Идея в другом — программы усложняются, они все больше входят в нашу жизнь, а значит и требования к надежности кода растут. Увеличивается цена типовых ошибок, ответственность за качество кода тяжелой ношей ложится на плечи разработчиков.

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

Желаю вам не допускать промахов, а вашим проектам никогда не попасть в подборку, аналогичную той, что приведена в этой статье.

6 сентября 1989 года парижанам запомнилось надолго — в этот день более 41 тысячи жителей французской столицы получили из полиции официальные письма о том, что они совершили жестокие убийства и грабежи, хотя на самом деле адресаты всего лишь нарушили правила дорожного движения.

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

А сегодня, в день тестировщика, давайте вспомним самые громкие и широко известные компьютерные ошибки, которые привели к забавным, а иногда — довольно печальным последствиям.

Ни одна программа в мире, за исключением, пожалуй, “Hello World!” полностью не застрахована от ошибок. А что уж говорить о больших приложениях, состоящих из миллионов строк кода, разработкой которых занимаются целые команды программистов. Да, прежде чем попасть в продакшен, такие программные продукты тщательно документируются и проходят через заботливые руки тестировщиков, но суровая реальность все равно вносит в логику их работы свои коррективы.

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

Крупнейшая банковская ошибка в истории Америки

Тёплым майским днем 1996 года инкассатор частной чикагской компании по обслуживанию газового оборудования «Peoples Gas Light and Coke» Сильвестр Дорси отправился на обед. По пути он решил завернуть к ближайшему банкомату, чтобы проверить остаток на счете своей банковской карты. Получив чек с выпиской, Дорси не поверил собственным глазам. Он оказался владельцем скромного состояния размером 924,8 миллионов долларов США. «Я показал чек другу, который находился рядом, и мы просто закричали от восторга», — вспоминал потом этот случай Дорси.

Еще одним счастливчиком стал компьютерный инженер из компании «Zenith Electronics» Джеф Феррера, который позвонил в банк в пятницу утром в попытке уточнить свой баланс. Прослушав сообщение автоматического информатора, Джеф перезвонил еще раз, записал голос робота на диктофон и установил эту запись в качестве приветствия на своем телефоне. Теперь каждый звонящий Феррере абонент слышал в трубке следующее сообщение: «доступный остаток на вашем основном счете в настоящее время составляет 924 844 208 долларов США и 32 цента…». Можно только представить, какие чувства испытывал сам Джеф, когда автоинформатор впервые произнес эти слова.

Такая же участь постигла 825 других клиентов «Первого национального банка Чикаго» — все они неожиданно стали мультимиллионерами. Правда, счастье длилось недолго: всего один день. К вечеру которого сотрудники банка выяснили, что источником неимоверного богатства владельцев счетов стал досадный компьютерный сбой. Обслуживавшая дебетовые карты программа неправильно рассчитала параметры последних транзакций и перевела клиентам ошеломляющую сумму денег — 763,8 миллиарда долларов, что более чем в шесть раз превышало общую стоимость всех активов «Первого национального банка Чикаго».

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

К слову, за два года до описываемых событий нечто подобное случилось в нью-йоркском Chemical Bank, правда, с обратным математическим знаком. Заглючивший компьютер ополовинил все депозиты и вклады, информация о которых хранилась в базе данных головного офиса, и вместо нескольких сотен счастливых миллионеров банк получил целую армию разгневанных клиентов. Последствия этого сбоя технические специалисты разгребали несколько дней.

Но это же палка!

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

Как и многие другие американцы, Крис Рейнольдс пользовался платежной системой PayPal, и наивно считал ее лучшим финансовым сервисом в мире. Его высокое мнение о достоинствах и возможностях PayPal многократно укрепилось, когда однажды утром 30 июня 2013 года он обнаружил на своем счете 92 233 720 368 547 800 долларов США.

Еще раз: 92 квадриллиона долларов. Для торговца подержанными автозапчастями на eBay это была довольно приличная сумма: состояние самого богатого человека планеты того года — телекоммуникационного магната Карлоса Слима — слегка не дотягивало до богатства Рейнольдса, и насчитывало всего лишь жалкие 67 миллиардов долларов.

BBC // Chris Reynolds’ PayPal account was erroneously credited $92,233,720,368,547,800.

Крис даже распечатал на память выписку по своему счету. Однако после того как он воспользовался мудрым советом из телесериала «Компьютерщики», а именно, «попробовал выйти и снова войти», чудесное наваждение рассеялось. На его балансе снова числилось 145 баксов и 25 центов, а Карлос Слим вновь вернулся на почетное место главного богатея Земли. Сказка закончилась, и несметные сокровища превратились в тыкву.

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

Вам счёт, сэр!

Впрочем, финансовые ошибки допускают не только компьютеры банков, в чем смогла лично убедиться семья Бразертон из графства Ланкашир, что расположено в Англии на берегу Ирландского моря. Линда и Найджел Бразертон решили сменить поставщика электроэнергии: раньше они пользовались услугами компании Scottish Power, но однажды подумали, что выгоднее будет покупать электричество у фирмы Npower. Однако они ошибались.

Сотрудник Npower осмотрел установленный в доме Бразертонов электросчетчик и обнулил его показания. Но компьютер компании посчитал, что значение «0» на индикаторе означает: с момента последней передачи сведений об израсходованной электроэнергии счетчик открутил полный цикл, и доступные ему цифры просто закончились. В следующем месяце почтенное семейство получило квитанцию, гласившую, что их платеж за электроэнергию слегка увеличился — с 87 фунтов стерлингов до 53 480 062 фунтов, что составляет примерно 90 миллионов долларов США.

BBC // The monthly direct debit was set to increase from £87 to £53,480,062

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

Минус 460 миллионов за 45 минут

В среду, 1 августа 2012 года офис инвестиционной компании Knight Capital как всегда начал работу в 8 утра. Включив компьютеры, сотрудники первым делом проверили электронную почту, и среди спама обнаружили автоматические сообщения о том, что запущенная на сервере программа Power Peg настроена неправильно. Никто не обратил внимания на эти предупреждения, потому что Power Peg не использовалась уже без малого 10 лет, с 2003 года. И совершенно напрасно.

В 9 утра открылась нью-йоркская фондовая биржа, и автоматические системы трейдинга Knight Capital начали создавать заявки на покупку и продажу активов. Уже спустя 45 минут компания потеряла более 4,5 миллионов долларов, а вскоре общий убыток, полученный фирмой благодаря заключенным бездушными программами сделкам, достиг 460 миллионов долларов США, поставив Knight Capital на грань банкротства. Автоматические алгоритмы других игроков использовали возникшую ситуацию, из-за чего акции некоторых компаний на нью-йоркской бирже подскочили в цене аж на 300%.

Проведенное позже исследование показало: накануне этого злополучного дня на серверы Knight Capital было установлено обновление ПО, которое по недосмотру разработчиков включило устаревшее приложение Power Peg, уже давно отключенное за ненадобностью. В тестовом режиме это приложение продаёт акции по текущей цене и тут же покупает их обратно по рыночной ставке (которая обычно выше цены продажи), совершенно не обращая внимания на стоимость ценных бумаг — в его задачу входит провести как можно больше сделок в единицу времени. После вывода этой программы из эксплуатации разработчики удалили из ее кода проверку того, запущено ли приложение на тестовом сервере в локальной сети, или оно действует в реальной рабочей обстановке.

Как оказалось, установленное обновление запустило Power Peg на сервере, подключенном к нью-йоркской фондовой бирже, после чего программа заработала в тестовом режиме и начала регистрировать огромное количество безумных сделок, стремительно сливая капиталы компании. Чуть позже комиссия по ценным бумагам еще и оштрафовала Knight Capital на 12 миллионов долларов за нарушения правил управления финансовыми рисками.

Яблочные карты

Некоторые ошибки в софте вроде бы не приводят к возникновению прямых финансовых убытков, но иногда влекут за собой косвенные. На первых моделях iPhone использовались карты и навигация от Google, но в борьбе со своим главным конкурентом корпорация Apple решила избавиться от приложения Google Maps. В 2012 году в Купертино разработали собственную версию карт для iOS, однако в отличие от Google, которая потратила на создание своего сервиса много лет и миллионы долларов, в Apple решили, что задачу можно решить быстрее и намного экономнее. Информация о дорогах, мостах, архитектурных объектах и достопримечательностях стекается в Google из тысяч различных источников, хранится в нескольких распределенных базах данных, а сборку всех этих сведений воедино выполняет мощный программный комплекс. У Apple на начальном этапе не было всех этих ресурсов.

В результате на экранах iPhone и iPad многие озера, мосты и вокзалы отсутствовали на своих привычных местах, монумент Вашингтона переехал на соседнюю улицу, супермаркет Publix в городе Джексонвилл, штат Флорида, стал больницей, а главный вокзал столицы Новой Зеландии, города Окленд, и вовсе очутился посреди океана. В трехмерном представлении некоторые участки карт и вовсе выглядели фантастически: шоссе складывались гребёнкой, устремлялись вертикально в небо и скручивались лентой Мебиуса, мосты уходили под воду, а здания громоздились посреди водной глади.

Безусловно, никто из пользователей карт Apple не нырнул на своем автомобиле с оклендской набережной в попытке догнать уходящий поезд, но доверие к программам этой компании все же было слегка подорвано. А репутация в наши дни стоит очень дорого.

Заключение

Чаще всего от ошибок в программах страдают не только компании, но и обычные пользователи. Иногда разработчики пытаются загладить свою вину и компенсировать людям доставленные неудобства. Правда, порой они делают это весьма странным образом. Например, звонок в службу поддержки клиентов «Первого национального банка Чикаго» стоил целых три доллара. После инцидента с ошибочным зачислением на дебетовые карточки 924,8 миллионов руководство банка сделало задушевные беседы со своими сотрудниками бесплатной услугой. Но только для тех клиентов, которые сами сообщили в учреждение о свалившемся на них нежданном богатстве и добровольно вернули деньги. Неслыханная щедрость, не правда ли?

Думаем, каждый из нас так или иначе сталкивался с различными ошибками в софте. Будем рады, если вы поделитесь самыми интересными багами из вашей практики в комментариях!

Ошибки допускают все и это нормально. Вот только иногда некоторые ошибки приводят к огромным тратам и даже к гибели людей. Итак, самые ужасные ошибки, допущенные программистами.

Integer overflow

Ракета-носитель Ariane 5 была запущена в 1996 году. Стоимость создания этой ракеты составила около 7 миллиардов долларов, а авария, которая произошла во время отрыва обошлась в 500 миллионов долларов. Ошибка была вызвана благодаря Integer overflow. Дело в том, что система попыталась впихнуть 64-bit floating point number в 16-bit signed integer. Это привело к ошибке, а в последствии к большому взрыву.

Символ, стоимостью 135 миллионов $

Космический аппарат Mariner 1 был запущен в 1962 году с целью первого полета вокруг Венеры. Практически с первых минут что-то начало идти не так и он сильно отклонился от заданого маршрута. Чтобы аппарат не упал на населенный пункт было принято решение взорвать его.

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

Кроме того, считается что всему вина неправильно записанная формула. Так, формула Rn была записана без верхнего подчеркивания. Как бы там не было, но ошибка скрывается всего в одном символе, который кто-то когда-то неправильно записал.

Ошибка с Windows NT

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

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

К счастью, все обошлось, но если бы подобное случилось в бою или же во время шторма, то все могло сложиться не так успешно!

Взрыв газопровода в Сибири

Благодаря Канаде в 1982 году, ребята из ЦРУ узнали информацию о том, что КГБ планирует украсть у них систему управления газопроводом. Было принято решение дать троян, который постепенно бы ухудшал систему газопровода в СРСР и привел бы к взрыву. Так и случилось. КГБ клюнули на небольшой слив информации и подцепили настоящий вирус. 

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

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

Червь Морриса, 1988 год
Не все дорогостоящие ошибки в программном обеспечении происходят в крупных компаниях или правительственных организациях.

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

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

Это сделало червя Морриса, по сути, первым заразным компьютерным вирусом.

Червь стал распространяться дальше. Были выведены из строя шесть тысяч интернет-узлов ARPANET (прототип интернета от минобороны США).

Аспирант Роберт Таппан Моррис был обвинен и осужден за преступный взлом и оштрафован на 10 тысяч долларов, хотя стоимость созданного им беспорядка оценивалась в 10 миллионов долларов.

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

Космический корабль «Маринер-1», 1962 год

НАСА запускало беспилотный космический аппарат для сбора данных, чтобы пролететь около Венеры. Все пошло не по плану.

Космический зонд «Маринер-1» едва успел покинуть мыс Канаверал, как ракета опасно отклонилась от курса. Обеспокоенные тем, что ракета направляется к аварийной посадке на Землю, инженеры НАСА подали команду на самоуничтожение, и аппарат был уничтожен примерно через 290 секунд после запуска.

Расследование показало, что причиной стала очень простая программная ошибка. В одной из строк кода был пропущен дефис, в результате чего на космический корабль были отправлены неверные сигналы наведения. Стоимость ошибки превысила 18 миллионов долларов (около 169 миллионов долларов в современном мире).

Ошибка Pentium FDIV, 1994 год
Ошибка Pentium FDIV — это любопытный случай незначительной проблемы, которая разрослась из-за массовой истерии.

Томас Нисли, профессор математики, обнаружил недостаток в процессоре Pentium и сообщил об этом в Intel. В ответ на это компания предложила замену чипа всем, кто мог доказать, что он пострадал от этой ошибки.

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

Хотя реальные последствия ошибки в программном обеспечении были незначительными, когда информация об ошибке попала в международную прессу, миллионы людей потребовали замены чипа, что обошлось Intel в сумму до 475 миллионов долларов.

440 млн долларов в неудачных сделках, 2012 г.
Потеря 440 млн долларов — это плохой день в офисе по любым меркам. Тем более, когда это происходит всего за 30 минут из-за ошибки программного обеспечения, которая стирает 75% стоимости одной из крупнейших в мире групп капитала.

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

В итоге непреднамеренные сделки обошлись компании в 440 миллионов долларов, и Goldman Sachs пришлось вмешаться, чтобы спасти ее. Компания Knight так и не смогла оправиться, и менее чем через год была приобретена конкурентом.

Arian 5, полет V88, 1996 г.
Учитывая сложность и дороговизну освоения космоса, неудивительно, что в нашем списке всех ошибок программного обеспечения есть несколько неудачных космических миссий.

Ракета должна была доставить исследовательские спутники Европейского космического агентства.
Сейчас в Arian 5 серьезно относятся к вопросам качества программного кода и по много раз проверяют перед запуском

Но всего через 36 секунд после первого запуска ракетные двигатели отказали из-за того, что инженеры повторно использовали несовместимый код от Ariane 4 и ошибки преобразования 64-битных данных в 16-битные.

В результате неудачи ЕКА понесло убытки в размере 370 миллионов долларов, а по итогам последующего расследования было выработано множество рекомендаций, включая призывы к улучшению анализа и оценки программного обеспечения.

Открытие терминала 5 в Хитроу, 2008 год
Представьте себе, что вы готовитесь к долгожданному отпуску или важной деловой поездке, но обнаруживаете, что ваш рейс задержан, а багажа нигде нет.

Именно это произошло с тысячами путешественников после открытия Терминала 5 в Хитроу в марте 2008 года, и виной всему стало неработающее программное обеспечение. Проблема заключалась в новой системе обработки багажа, которая хорошо показала себя на испытаниях, но в реальной жизни потерпела неудачу. Это привело к массовым сбоям, таким как неисправность багажных лент и тысячи потерянных или отправленных не по назначению вещей.
British Airways также сообщила, что проблемы с беспроводной сетью вызвали дополнительные проблемы в аэропорту. В течение следующих 10 дней было потеряно около 42 000 чемоданов и отменено более 500 рейсов, что обошлось более чем в 16 миллионов фунтов стерлингов.

Ошибка тысячелетия, 2000 год
Ошибка тысячелетия, она же пресловутая Y2K, была широко распространенной проблемой накануне 2000 года.

Была совсем не опасной, но посеяла панику, из-за чего привела к убыткам.
Опасения были связаны с тем, что компьютерные системы по всему миру не смогут работать с датами после 31 декабря 1999 года из-за того, что большинство компьютеров и операционных систем использовали только две цифры для обозначения года, не обращая внимания на префикс 19, обозначающий двадцатый век. Были сделаны мрачные прогнозы о крахе банков, авиакомпаний, поставщиков электроэнергии и критически важных хранилищ данных. Как системы справятся с цифрами 00?

Ответом было «в общем-то, неплохо». Ошибка тысячелетия не вызвала особых проблем в реальной жизни, поскольку большинство систем заранее внесли коррективы. Однако страх, вызванный потенциальными последствиями в конце 1999 года, стоил тысячам людей значительных сумм денег, потраченных на планирование и подготовку к чрезвычайным ситуациям. Госучреждения, предприятия и даже семьи ожидали худшего.

В США потратили огромное количество средств на решение этой проблемы. Зараты составили около 100 миллиардов долларов.

2 103

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

Дорогой Integer overflow

Сбой в программе ракеты-носителя Ariane 5, которая в 1996 году должна была вывести на орбиту несколько спутников, закончился взрывом ракеты в воздухе. С учетом установленного на борту оборудования авария обошлась в 500 млн долларов. Строительство и разработка ракеты длилась 10 лет и стоила 7 млрд долларов. Все эти усилия и траты пошли коту под хвост из-за ошибки integer overflow.

Когда горизонтальное ускорение превысило допустимое значение, программа попыталась впихнуть 64-bit floating point number в 16-bitsigned integer. Результат — самоликвидация и горящие осколки на площади в 12 км2 на потеху зрителям:

Во время расследования инцидента была проведена симуляция полета Ariane 5 с использованием другой инерциальной платформы — баг воспроизвели. Программа сбойнула точь-в-точь как в случае с реальной ракетой.

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

С другой стороны, провинились и тестировщики — хоть и были произведены сотни тестов и тысячи последующих корректировок, никто не сделал полноценного анализа опорной инерциальной системы. Проблема была в том, что на Ariane 5, чья траектория полета сильно отличалась от Ariane 4, поставили навигационный софт от Ariane 4. Тот случай, когда железо проапгрейдили, а софтину обновить забыли.

Миссия Aполлон-8

Наверняка этого диалога очень не хватало Джеймсу Ловеллу — члену экипажа Аполлон-8, который во время навигационного прицеливания и маневрирования случайно удалил из памяти данные о положении модуля. В результате гиростабилизатор «подумал», что корабль находится на той же позиции, что и до старта, и включил двигатель, чтобы «исправить» положение модуля.

Когда космонавты поняли, почему модуль изменил свою позицию, им ничего не осталось, кроме как вводить данные вручную. Ловеллу потребовалось около 10 минут, чтобы сделать необходимые расчеты, и еще около 15 минут — чтобы ввести данные в компьютер. К счастью, все выжили. Но эта история могла иметь совсем другой финал.

Один символ стоимостью в 135 миллионов долларов

В 1962 году для первого полета вокруг Венеры был запущен космический аппарат Mariner 1. Запуск с мыса Канаверал прошел успешно, но через несколько минут корабль начало уводить в сторону. Из-за сбоя навигационной программы рулить стало невозможно, поэтому, чтобы избежать падения обломков над морскими путями или населенными пунктами, было решено ракету взорвать. Прям как в голливудских блокбастерах, оператор успел отдать команду об уничтожении за 6 секунд до расстыковки.

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

По одной из версий, проблема была в том, что программист, который переписывал формулу, забыл дописать верхнюю черту:

Упущенное надчеркивание привело к тому, что небольшие отклонения скорости воспринимались программой как значительные. Это вызывало избыточную корректировку траектории, и ракета сошла с курса. Вероятно, по той причине, что надчеркивание «‾» внешне похоже на тире «-», в прессе, все-таки, чаще упоминалось тире.

Среди других версий указывается также точка вместо запятой, из-за чего, например, «DO 5 K=1. 3» мог быть интерпретирован как «DO5K = 1.3». Хотя, нет никаких достоверных источников, подтверждающих, что на борту использовался Fortran.

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

Этот взрыв чем-то напоминает пропущенное надчеркивание

Подели меня на ноль в Windows NT

Технология «умный корабль», которую в 1996 году запустили на крейсере USS Yorktown, позволила оптимизировать процессы и значительно облегчить морякам их труд. На корабле была установлена сеть из нескольких десятков Pentium-Pro, на которых стояла Windows NT 4.0.

Все было хорошо до 1997 года, когда во время маневров один из членов экипажа ввел в одно из полей базы ноль. Зачем он это сделал — история умалчивает. Но дальше было деление на ноль и, как следствие, buffer overflow, который вырубил все компы и оставил корабль в дрейфе почти на три часа. Хорошо, что это случилось не в бою.

Но нельзя сказать, что дело было исключительно в недоработке программного обеспечения корабля. Сам заместитель технического директора военно-морского флота Рон Редман впоследствии заявлял, что у них на крейсере то и дело возникали ошибки, связанные с Windows NT. По его словам, установка NT была политическим решением, а он сам скорее выбрал бы Unix, потому что он лучше себя проявляет в управлении техникой, тогда как NT хороша разве что для передачи данных.

В итоге имеем недоработку ПО крейсера и лобби Билла Гейтса на установку его продукта на корабль, которые и стали причиной аварии.

Здесь разрешается пустить скупую слезу ностальгии. Но только одну

Взрыв газопровода в Сибири

В 1982 году добрые молодцы из ЦРУ получили от Канады слив инфы о том, что КГБ планирует украсть у них систему управления газопроводом. Видимо, желая проучить советских коллег, ЦРУ подсунуло в систему троян и позволило её украсть. Коллеги клюнули. Установленная на некоторых газопроводах СССР программа поначалу работала нормально, в штатном режиме управляя насосами, турбинами и другими газо-транспортными приблудами. Но при отработке режима тестирования троян сделал свое грязное дело, что привело к разрыву газопровода и последующему взрыву силой в три килотонны.

Это был самый сильный неядерный взрыв и пожар, которые было видно из космоса. Мониторы NORAD (North American Aerospace Defense Command) даже сообщили о ядерном взрыве, но спутники не засекли характерного электромагнитного импульса.
В СССР об этой аварии ничего не сообщалось, так что эта история до сих пор кормит умы конспирологов.

По этой версии СССР не воровал, а покупал систему управления газопроводом

Race condition

Не зря на собеседованиях одни из самых часто задаваемых вопросов — о многопоточности. В 2003 году на северо-востоке Америки из-за сбоя в энергосистеме один за другим начало вырубать электричество.

Эта вторая в мире по масштабам авария оставила без света 10 миллионов канадцев и 45 миллионов американцев. В некоторых районах остановились поезда, прекратилась подача воды, остановились фабрики, закрылись аэропорты. Из сотен поездов метро Нью-Йорка пришлось эвакуировать тысячи людей. Стояла влажная жара в 33 °C, кондиционеры не работали, сотовая связь была почти мертва. К таксофонам выстраивались очереди.

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

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

В ходе разбора полетов в построенной на базе Unix автоматизированной системе управления обнаружили race condition, который вызывал подвисание сигнализации в комнате персонала на целый час. Таким образом, сотрудники станции не получали никаких сигналов о том, что произошла беда.

Ущерб составил порядка 6 миллиардов долларов, зато теперь даже кошка директора электростанции знает, что такое race condition и с чем его едят.

Проблемы с многопоточностью в программе вызвали проблемы с многопоточностью в реальном мире

Истории известны многие другие более фатальные и дорогие случаи — в медицине, в армии. Это издержки многих профессий, в том числе таких безобидных, казалось бы, как программирование и тестирование. Поэтому перед трудоустройством на новый проект полезным будет прозондировать его на предмет ответственности и степень нервозности, предварительно подсчитав количество уже седых волос. Может случиться и так, что овчинка не стоит выделки.

Понравилась статья? Поделить с друзьями:
  • Цена ошибки некроманта дарья кузнецова отзывы
  • Цена ошибки некроманта аудиокнига скачать
  • Цена ошибки некроманта автор дарья кузнецова
  • Цена ошибки мотивация
  • Цена ошибки меньше чем цена бездействия сет годин