EngineerSpock

ТОП 7 самых дорогих ошибок в истории программирования

Бинарный салют, друзья! На связи Инженер Спок. В сегодняшнем выпуске поговорим о том какая это весёлая, интересная и увлекательная профессия – программист.
 

Бинарный салют, друзья! На связи Инженер Спок.

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

Лайкосы / Подписки / Курсы

Сегодня мы поговорим про ТОП 7 самых адских провалов программистов и о том, к чему приводили эти провалы. Ну а начнём мы с не самых криповых.

7-е место

22 июля 1962 года, с мыса Канаверал взял курс на Венеру зонд Маринер 1 с целью по прибытии собрать разнообразные данные для учёных. Но лететь зонду пришлось недолго. Через 293 секунды после старта офицеру по безопасности полёта пришлось отдать команду на самоуничтожение зонда из-за того, что тот совершил опасный незапланированный манёвр, расходившийся с заданным курсом. Зонд мог потенциально упасть на какой-нибудь город, так что пришлось его уничтожить. Послеполетный разбор показал, что отсутствие дефиса в закодированных компьютерных инструкциях в программе редактирования данных допускало передачу неверных сигналов наведения. Это в результате вылилось в неправильную корректировку курса. Зонд стоит недёшево, сами понимаете.

 
 
Бинарный салют, друзья! На связи Инженер Спок. В сегодняшнем выпуске поговорим о том какая это весёлая, интересная и увлекательная профессия – программист.-2
 

6-е место

На 6-м месте расположилась история про марсианский климатический орбитальный аппарат НАСА. Во время своей миссии на Марс в 1998 году космический аппарат Climate Orbiter был потерян в космосе. Далеко не сразу, но в конце концов выяснилось, что инженерная команда субподрядчика не выполнила простое преобразование английских единиц измерения в метрические. Досадная ошибка, из-за которой корабль стоимостью 125 миллионов долларов скорее всего тупо врезался в атмосферу Марса, повредив коммуникационное оборудование, а затем отвалил гонять в космосе по орбите вокруг Солнца. Подумаешь, каких-то 125 лямов баксов.

 
 
Бинарный салют, друзья! На связи Инженер Спок. В сегодняшнем выпуске поговорим о том какая это весёлая, интересная и увлекательная профессия – программист.-3
 

5-е место

5-е место в нашем топе занимает очень известная массовая проблема, названная проблемой двухтысячного года. Разработчики ПО пару десятилетий назад не купались в гигабайтах оперативной памяти, а по сему старались экономить на туалетной бумаге и спичках, например, записывая год двумя знаками. Например, 1979 год хранили как 79. После наступления 2000 года, с таким подходом, сложновато будет определять, что имеется ввиду под значением 00: 2000 год или 1900 год. Казалось бы, проблема чепуховая, однако её масштаб был настолько огромным, что по самым скромным подсчётам обновление компьютеров и приложений во всех отраслях обошлось миру примерно в 300 миллиардов долларов. Это примерно равно годовому бюджету Российской Федерации. Неплохо так сэкономили памяти.

4-е место

На 4-м месте уютно располагается история с открытием 5-го терминала в аэропорту Хитроу. Короче, аэропорт Хитроу был одним из самых если не самым загруженным аэропортом в мире и там очень не хватало ещё одного терминала. 5-й терминал долго и упорно строили, влупив в это дело 4.5 миллиарда фунтов. Чтобы была понятна нагрузка на аэропорт достаточно сказать, что начиная с пяти утра в аэропорт начинают прибывать рейсы со всего мира иногда с интервалом меньше минуты. Каждую минуту аэропорт должен обрабатывать пол тысячи прибывающих пассажиров, а это включает в себя досмотр, различные проверки, сортировку багажа и так далее. Если вдруг случится заминка на несколько минут – пробки и опоздания на рейсы будут обеспечены. На пятом терминале развернули новую IT-систему, которую вроде как долго тестировали, однако что-то пошло не так.

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

Если описать вкратце, то проблем было много. Грузчикам раздали новые устройства на которые должны были поступать команды что им делать, где что загружать, разгружать, но забыли им объяснить как всем этим пользоваться и многие грузчики тупо устройством не пользовались. Многие сотрудники банально не могли попасть на работу из-за того что новая система их не пропускала, видимо из-за каких-то багов. У части сумок этикетки не распознавались сканерами. Оказалось, что это были сумки, зарегистрированные на стойках других перевозчиков и прибывшие для перегрузки на рейсы British Airways. Люди не могли никуда улететь, самолёты скопились в аэропорту. Их стало так много, что не хватало места для манёвров на земле и пришлось их пустить в воздух летать вокруг аэропорта. Это было очень опасно. Из-за того, что люди массово начали проверять свои рейсы онлайн упал и сайт. Ну и так далее и тому подобное, короче говоря, некоторая совокупность багов привела к самому адскому коллапсу в аэропорте за всю историю среди всех аэропортов мира. Весь этот треш длился аж 10 дней. Более 500 рейсов были отменены, 42 тысячи чемоданов были утеряны пассажирами. Даже представить себе трудно в каком мыле были жопы ответственных программистов. Ну и да, не только программистов, конечно же.

3-е место

На почётном 3 месте у нас запуск ракеты-носителя «Ариан 5». 4 июня 1996 года с космодрома Куру была запущена ракета-носитель, которая, судя по всему, должна была вывести на орбиту Земли несколько спутников для изучения магнитного поля нашей планеты. Однако, на 40-й секунде ракета разрушилась.

 
 
Бинарный салют, друзья! На связи Инженер Спок. В сегодняшнем выпуске поговорим о том какая это весёлая, интересная и увлекательная профессия – программист.-4
 

Расследование происшествия показало, что в ПО «Ариан 5» перекочевал модуль из ПО «Ариан 4» не учитывавшей то, что новая ракета имела иную траекторию выхода на орбиту. В результате в коде произошло исключение из-за переполнения 16 битного знакового целого. Исключение было прочитано бортовым компьютером, который подал команду на полное отклонение сопел, что и явилось в конечном счёте причиной выхода ракеты на запредельную траекторию. Из-за возникшей запредельной аэродинамической нагрузки ракета начала разрушаться, уровни рыскания и тангажа составляли 30 градусов в секунду. Стартовые двигатели отделились от ракеты и это запустило её самоуничтожение. Потери составили не менее 8,5 миллиардов долларов.

2-е место

Второе место в нашем топе занимает история в которой погибли люди. Тут уже подсчётом баксов не отделаешься. В феврале 1991 года американская система ПРО Патриот в Саудовской Аравии не отразила Иракскую ракетную атаку на армейские бараки. В результате погибли 28 солдат, около 100 человек были ранены. Расследование показало, что всему виной была ошибка в программе. Ошибка была такова, что чем дольше система работала, тем больше накапливалась ошибка в вычислении траекторий полёта ракет. Это происходило из-за того, что время в системе трекалось десятыми долями секунды, но выражалось целым числом, которое означало количество десятых долей секунд, причём это значение хранилось в регистре размером 24 бита. Однако, чтобы отслеживать траекторию ракеты необходимо было представлять и скорость и время как числа с плавающей точкой большей точности, чем давали 24 бита регистра. Конверсия целого числа в число с плавающей точкой давало слишком большую погрешность в вычислениях. Поэтому, ПРО так сказать просто не поспевала за ракетой.

 
 
Бинарный салют, друзья! На связи Инженер Спок. В сегодняшнем выпуске поговорим о том какая это весёлая, интересная и увлекательная профессия – программист.-5
 

 

1-е место

Ну и на первом месте располагается, наверное, самая известная история про гибель людей из-за багов программе. С июня 1985 по январь 1987 годов, аппарат лучевой терапии Therac-25 производства канадской компании Atomic Energy of Canada Limited дал передозировку радиации как минимум шестерым пациентам. Двое точно погибли именно от этого, остальные выжили, но получив дозы в десятки тысяч рад наверняка потом ощущали последствия.

Расследование показало целый набор ошибок в ПО. Если бы этих аппаратов было десятки тысяч, то последствия были бы совсем другого масштаба. Там нашлись и состояния гонки, ну, это когда, один процесс записывает в одну переменную свои значения, а другой свои, таким образом перезатирая значения друг друга и было найдено возможное переполнение в одном месте возникавшее с вероятностью 1/256 при нажатии кнопки Set на аппарате и так далее и тому подобное.

Надо сказать, что это происшествие занимает в моём ТОПЕ 1-е место, а не второе, потому что в данном случае погибли гражданские лица, а в истории на втором месте погибли военные. Военные тоже, конечно, люди, но гибель на войне мы воспринимает иначе. Хотя, всё это, конечно, некие условности. Гибель невинных людей – это всегда гибель невинных людей.

На самом деле, ошибок программистов, которые привели к гибели людей было гораздо больше, чем мы здесь вспомнили. Часть событий были выбраны более или менее рандомно. Короче говоря, всё что было описано в этой статье – это лишь верхушка айсберга. В древнем исследовании 1994 года Дональд Маккензи писал, что уже к 1992 году насчитывалось 1,100 +- 1000 смертей в основном в результате взаимодействия человека с программами. Ну, согласен, статистика странная, но, судя по всему, этими исследованиями вообще мало кто занимался и занимается. Думаю, что есть проблемы со сбором статистики, её накоплением. Совершенно очевидно, что программисты убивают людей, посредством внесения ошибок в программы. Совершенно очевидно так же, что количество просранных денег в результате ошибок программистов измеряется ярдами баксов. Например, древнее исследование 2002 года за авторством Американского Института Стандартов и Технологий утверждало, что ежегодный ущерб от багов экономике США составляет около 60 миллиардов баксов. И это в 2002 году, я не копал свежие исследования, но дураку понятно, что в 2020 году такой ущерб был гораздо больше. И это только в США, в мире счёт идёт скорее всего на сотни миллиардов баксов.

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

Плохой программист Джон сделал ошибку в коде, из-за которой каждый пользователь программы был вынужден потратить в среднем 15 минут времени на поиск обхода возникшей проблемы. Пользователей было 10 миллионов. Всего впустую потрачено 150 миллионов минут = 2.5 миллиона часов. Если человек спит 8 часов в сутки, то на сознательную деятельность у него остается 16 часов. То есть Джон уничтожил 156250 человеко-дней ≈ 427.8 человеко-лет. Средний мужчина живет 64 года, значит Джон убил примерно 6 целых 68 сотых человека.

Как тебе спится, Джон — серийный программист?

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

И тут мы подходим к одной очень важной теме, ради подводки к которой, я и решил написать эту статью. Какой я хитрый, а? Вот это поворот! Я говорю о темах ответственности программистов и применении инженерных практик, которым должны следовать все программисты, код которых ставит на кон жизни людей или миллиарды денег. Одним из первых, кто стал освящать эту тему стал Боб Мартин, он же дядя Боб, он же Анкл Боб. Впервые, если не ошибаюсь, Анкл Боб поднял эту тему, когда случился так называемый дизельгейт. Это ещё один косяк, относящийся к программистам, однако в топ фейлов мною не включенный. Сделал я это намеренно. Поскольку и так здесь собирался про это рассказать. Напомню, что дизельгейт – это очень «клёвая» афера автоконцерна Фольксваген. Афера была раскрыта в 2015 году, когда группа независимых исследователей, вооружённых мобильными устройствами для измерения состава выхлопных газов обнаружила несоответствие между фактическими показателями измерений выхлопов от движущегося автомобиля и показателями, получающимися при замерах производимых на стендах, когда автомобиль находится в покое.

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

В сентябре 2016 года акционеры компании выставили иск к ней на 4 млрд евро, а автоконцерн получил Шнобелевскую премию по химии с формулировкой «за решение проблемы токсичности автомобильных выхлопов в атмосфере путем автоматического включения очистки выхлопов при тестировании»

Разумеется, всё это никак не могло случиться без попустительства со стороны программистов. Когда они реализовывали эту с позволения сказать фичу, они ведь прекрасно понимали, что они делают. Они понимали, что приказ начальства – это обыкновенное преступление, причём весьма серьёзное. Но они реализовали то, что попросило начальство и молчали до самого конца. Виноваты ли программисты? Лично я думаю, что виноваты, вот и Анкл Боб считает так же.

Самое смешное, что CEO Volkswagen Group of AmericaМайкл Хорн, на суде заявил примерно следующее: «это были несколько программистов, которые реализовали эту фичу по неизвестной никому причине, никаких групповых совещаний относительно такого функционала не проводилось». Держите ссылку на таймкод, где Хорн отвечает так судье, а судья в афиге от наглости спрашивает отдаёт ли себе отчёт мистер Хорн в том, что говорит это под присягой. Вот таким вот образом начальство на европейский лад без угрызений совести заявило, что виноват стрелочник, ну, тобишь, программист. Молодцы, ничего не скажешь.

Ну да бог с ним с начальством. Проблема, которую мы обсуждаем – ответственность программистов. И программисты, чёрт возьми, всё прекрасно понимали и пошли на преступление, реализовав эту фичу. И да, им за это платили деньги.

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

Если я где-то не прав – пишите в комментах.

https://blog.cleancoder.com/uncle-bob/2015/11/18/TheProgrammersOath.html

https://blog.cleancoder.com/uncle-bob/2015/10/14/VW.html

https://youtu.be/Sr9GknJ1kGk?t=4298

https://pikabu.ru/story/british_airways_ili_koshmar_v_terminale_n5__chast_vtoraya_tragicheskaya_6220171

http://www-users.math.umn.edu/~arnold//disasters/patriot.html

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *