50 серьезных ошибок в программировании и дизайне, которые стоили жизней, времени и денег. Часть 2

26. 1997, американский авианосец USS Yorktown остановился и отказался плыть дальше. Пришлось вызывать буксир. Оказалось, что программист ввел в базу один параметр как 0. Все остальные системы пытались пользоваться этой переменной, что вызывало деление на 0. Смешно, но система обновления базы тоже смотрела на этот параметр.



27. 1962 год, спутник Mariner 1 внезапно полетел совсем не в ту сторону, куда ожидалось. Центру полетов пришлось самоуничтожить его над Атлантическим океаном. Расследование показало, что формула была запрограммирована неправильно, потому как у ученого, писавшего ее на доске был плохой почерк, и программисты неправильно ее закодили :)



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


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


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



29. 5 декабря 2010 года. Российский ракетоноситель Протон-М пошел на дно океана с тремя спутниками Глонасс-М. Причина — неправильная формула, которая превысила массу одного из заправленных баков на более чем полторы тонны. Как оказалось, формула была исправлена и даже была заведена в систему как изменения, запланированные для реализации. Но когда подошли сроки — многие задания закрывали как неважные. Дозакрывались. Подумайте в следующий раз, когда таску в Jira закрываете :)



30. Один из самых известных блогеров Джошуа Браун взорвал в свое время интернет своими видеообзорами Теслы. И, конечно же, фанател от автопилота, пока в один день Тесла на полной скорости не врезалась в фуру. Джошуа погиб на месте. Как оказалось, машина с прицепом, ехавшая впереди Теслы, перестраивалась в другую полосу, от чего сбросила скорость. И тут в нее прилетела Тесла под управлением автопилота. Как выяснилось, Джошуа совершенно не следил за дорогой, а автопилот не заметил прицеп, и смешал его с небом. Тесла рекомендовала, что автопилот нужен для помощи водителям, но никак не замены их полностью.



31. Индиана, 2003 год. Инженер, который занимался поддержкой энергооборудования сети, заметил небольшую поломку. Его прям очень раздражал звуковой сигнал, которым система оповещала о проблеме. Недолго думая, инжинер отключил звук оповещения и спокойно окончил работу. Конечно же, он забыл ее включить обратно и никому не сказал. После этого дерево, упавшее на линию передач в Огайо, порвало линии электропередач, отключив и соседние регионы. Система оповещения пыталась мигать красным, но звуку не издавала. Результат? 55 миллионов человек без электричества. А ведь могли включить звук хотя бы через полчаса трезвона :)



32. 7 октября 2008 года самолет, совершавший рейс Singapore — Perth, внезапно начало трясти. На самом деле нет, но все так казалось. Через 3 часа полета внезапно отключился автопилот, и пилотов засыпало ошибками. Через 5 минут капитан корабля отключил автопилот и попытался разобраться, что же случилось. Внезапно нос самолета накренился на 8.4 градуса, от чего пассажиры в салоне, которые не были пристегнуты в тот момент, встретились головой с потолком самолета. Результат — 112 человек получили ранения.


Расследование показало, что один из процессоров, которые отвечали за обнаружение критических ситуаций, внезапно выдавал неправильно значение, вероятнее всего, из-за производственного брака, но сразу же после него выдавал верное. Система, получив неправильное значение, выставляла его как неверное, но, сразу же получив верное значение, ставила предыдущее в верное. Из-за этого самолет косплеил сериал «Крутое Пике».



33. 14 сентября, 2004 года. Без какого-либо предупреждения радиорубка управления перелетами в аэропорту Лос-Анджелеса потеряла голосовую связь с более чем 800 самолетами. Запасная система связи отвалилась через минуту после запуска.


Как оказалось, в основной системе были тики таймеров, которые начинались с самого высокого числа (2 в 32 степени). Служили они для идентификации сообщений и синхронизации. Каждое новое сообщение просто уменьшало таймер на 1. Когда же количество тиков достигло 0, оказалось, что система не может дальше продолжать отсылать сообщения. Чтобы отправить 2 в 32 степени сообщений, необходимо около 50 дней. Теперь, процедура безопасности требует перезагрузку системы каждые 30 дней :)



34. American Airlines допустили ошибку в разработке системы планирования отпусков для пилотов. Оказалось, что кто-то забыл поставить лимит на взятие отпусков в Рождественский период. Чем и воспользовались пилоты. Кому летать 15 000 запланированных перелетов — стало большим вопросом для компании, и пришлось торговаться. Каждый пилот, который вышел на работу в этот праздничный сезон, получил в полтора раза больше отпуска :)



35. Конечно же, нельзя обойти вниманием известный баг Y2K, при котором до 2000-х программисты использовали 2 цифры для обозначения года, к примеру 97 == 1997, для экономии памяти. Никто не ожидал, что компьютеры протянут так долго. В целом журналисты прогнозировали чуть ли не апокалипсис, но с помощью фиксов, а часто и говна с палками худо бедно к проблеме 2000 года мы подошли подготовленные, апокалипсис не случился, но попереживали знатно.



36. В 2011 году более 400 заключенных были освобождены раньше срока из тюрем Калифорнии вследствие ошибки в ПО. Штат пытался освободить место в тюрьмах, где его, собственно, уже не хватало. Для выбора самых неопасных преступников был запущен скрипт, который в одной из внутренних систем брал состояние дел заключенного, и по этим делам выставлял «рейтинг опасности». Так как многие из заключенных были в различных бандах или наркокартелях, информации про них было немного, от чего скрипт решал, что заключенный не опасен. Потому 450 опасных преступников были выпущены на свободу раньше срока. А мы для этого Савченко спасали! :)



37. Не баг, а раздолбайство. У меня просто истории про баги заканчиваются :) 2014 год, случай назвали Murder in the Amazon Cloud. Code Spaces была компанией, которая предоставляла разработчикам возможность создавать свои репозитории, хостить код и минимальный софт для PM.


Вся инфраструктура системы была хощена на Амазон. Нет, Cloud Space не взломали, а просто получили доступ к админке AWS. После чего начали требовать выкуп, чтоб вернуть доступ. Code Spaces постарались своими силами вернуть доступ к админке, вследствие чего захватчик начал удалять ресурсы, бакеты в S3 и так далее. Code Spaces надеялись восстановить все с бекапов, но, к сожалению, бекапы тоже управлялись все с той же консоли. От полученных травм Code Spaces так и не отошли и после не долгих разбирательств канули в Лету.



38. Студент Роберт Моррис (один из сооснователей Y-combinator и вообще достаточно известная личность) в 1988 году во время обучения в Cornell University написал программу, которая впоследствие стала известна под именем Morris Worm. Сама программа была написана, как утверждал автор, для вычисления размера интернета! Червь использовал сразу несколько дырок в Unix-системах и распространялся по сети. В черве была проверка — или система уже заражена. Но Моррис был уверен, что некоторые администраторы будут обманывать червь, всегда говоря, что система заражена, поэтому в 14% случаев червь копировал сам себя.


Моррис немного промазал, и червь начинал настолько нагружать систему, что ею стало невозможно пользоваться. 7 марта 1991 года оценка ущерба от червя составляла более чем 100 миллионов долларов. Моррис получил штраф в 10 500 долларов, 400 часов общественных работ и 3 года условки. А я еще над Януковичем смеялся.



39. Lockheed Martin F-35 Lightning II. Истребитель бомбардировщик 5-го поколения, разрекламированный 26 октября 2001 года. Машина смерти в воздухе, которая должна была быть выпущена в 2008 году и стоить всего-ничего от 40 до 50 миллионов долларов.


Шел 2018 год. Самолет F-35 был использован в бою всего лишь дважды. Система управления, запланированная самолетом, настолько сложна, что пока не очень позволяет ему стрелять, получать координаты и вообще делать хоть что-то. На данный момент осталось починить всего лишь 263 высоко приоритетных бага, и тогда уже можно приступать к лабораторным тестам. Кстати, на разработку самолета потратили уже 133 миллиарда долларов. Что вы знаете про долгострои?



40. Самый большой случай потери персональных данных — это, конечно же, взлом Equifax. Во фреймворке Apache Struts был обнаружен баг, который так же быстро был починен, а именно 6 марта. Баг привел к тому, что можно было выполнять так называемые RCE атаки (remote code execution). Сразу же после фикса хакеры начали бомбить сайты в интернете в поисках затупивших админов, которые забыли обновить версию Struts. Взлом Equifax был как раз сделан с помощью этого бага.


Но есть одно «но». Взлом был сделан в середине мая. Что приводит нас к тому, что админы Equifax за два месяца не удосужились накатить патч. На секундочку, Equifax занимались кредитной историей, а значит знали вот прям самые-самые персональные данные своих пользователей. Как взлом Equifax аукнется в ближайшие годы, еще совсем неизвестно.



41. Самый защищенный на свое время Windows NT.

50 серьезных ошибок в программировании и дизайне, которые стоили жизней, времени и денег. Часть 2 Программирование, Системная ошибка, Программная ошибка, Ошибка, Учитесь на чужих ошибках, Копипаста, Гифка, Длиннопост

42. Сингапур, 2017 год, 15 ноября. Многие слышали, что метро в Сингапуре практически полностью автоматизировано. Шутка ли — лучшая транспортная система в мире! Но 15 ноября два поезда не договорились. Вернее, баг в системе коммуникации двух поездов привел к тому, что поезд, который подъезжал к остановке, неправильно определил поезд, который на остановке, собственно, стоял. Вместо 6-вагонного поезда, он определил его как 3-вагонный и уже на замедляющейся, но все же большой скорости влетел в мирно стоящий поезд. Итог — 29 пострадавших, но хорошо, что никто не погиб.



43. Когда Steam выпустили на Linux и вы переносили папку с играми из дефолтного места, вы сильно рисковали потерять все данные из-за одного из скриптов в стиме, выполнявших команду rm -rf "$STEAMROOT/"* . Если вы переносили папку, то STEAMROOT оказывался равен пустой строчке, которая превращала все в команду rm -rf "/"* . Жертва зарепортила баг 14 января 2015 года :)



44. ВВС США вообще очень любят жить на широкую ногу. Начало 2000 года ознаменовалось тем, что был запланирован гигантский проект по разработке новой ERP системы, которая должна была заменить более чем 200 устаревших систем. И вообще сделать жизнь работников, если уж не раем, то с кисельными берегами и молочными реками.


2005 год, на разработку системы было уже потрачено более чем 1 миллиард долларов. Как раз, чтобы спикер ВВС США заявил, что с оценкой проекта немного промазали, и необходимо еще более чем 1.2 миллиарда, чтоб запилить четверть от запланированного объема, до 2020 года. Вы только вдумайтесь в горизонт планирования IT-проекта на 20 лет вперед. Промазали они, наверное, потому, что скрам не использовали :)



45. И немного о будущем! Если вы думаете, что мы пережили баг 2000 года и все дальше будет хорошо — нет :) Нас еще ждет 2038 год. Так уж случилось, что время в Unix-системах отмеряется в секундах, прошедших от 1 января 1970 года.


А именно 19 января 2038 года пройдет ровно 2 147 483 647 секунд от стартовой даты, что не влезет в обычное 32-битное число. Казалось бы, все можно починить, но вы даже не представляете, сколько в мире всего работает на легаси системах. Собственно, меньше чем через 20 лет эта проблема затронет ну очень большое количество систем, устройств и даже структур данных, которыми мы пользуемся сейчас.



46. В самолетах модели Boeing-787-Dreamliner был баг, который мог отключить подачу энергии на самолет, в независимости от фазы, в которой самолет находился. Но только после 248 дней работы. Причина — все то же 32-битное число, которое заканчивается. Именно через 248 дней будет число сантисекунд (0,01 секунды), которое не влезет в 32-битное число и приведет к полной потере управления самолетом. К счастью, данный баг был обнаружен быстрее падения первого боинга.



47. 1995 год, аэропорт Денвера представляет проект самой сложной в мире системы автоматической доставки багажа. Цена разработки системы — 200 млн долларов, время разработки — 2 года, рекламы — бесценна. Когда систему открыли, она внезапно начала вытворять с багажом такие непотребности — выкидывала багаж, выстреливала им на ленту доставки и просто зажевывала, — что ее назвали «baggage system from hell». Телевиденье и репортеры яростно смаковали картинки разодранных чемоданов, раскиданных вещей и поломанных планов на отпуск.


Доработка системы заняла 16 месяцев, что стоило аэропорту Денвера более чем 1.1 млн долларов в год. Аэропорт открылся таки в 1995 году, но багаж доставлялся старым добрым методом рабочих, мата и тележки. Часть системы все же пользовалась, но была очень дорога в эксплуатации. Ежики кололись, плакали, но продолжали заниматься любовью. По итогу, потратив 600 миллионов вместо запланированных 200, система была заброшена и отключена аж в 2005 году.



48. 2013 год, обычный парень Крис Рейнольдс, торгующий запчастями для BMW, утром 13 июня проснулся и проверил свой счет в PayPal. Всего лишь за одну ночь бедняга Крис стал в 1000 раз богаче, чем вся человеческая цивилизация. Счет PayPal показывал ему чудесную цифру в 92 квадриллиона долларов. Естественно, в PayPal быстро нашли и исправили ошибку, вернув Криса на землю, но он сыскал не абы какую популярность и был приглашен на многие телешоу! Когда же у него спросили, что бы он сделал со всеми этими деньжищами, Крис скромно ответил, что выплатил бы государственный долг :) Жаль, только виртуальными деньгами пока не принимают.



49. Незадолго до открытия пятого терминала в аэропорту Хитроу персонал тестировал новейшую систему для транспортировки больших объемов багажа, поступающего в аэропорт ежедневно. Перед открытием терминала она была тщательно протестирована на 12 000 пробных «единицах» багажа. Все испытания прошли безупречно, но в день открытия терминала оказалась, что система неработоспособна. Вероятно, причиной тому стали непредусмотренные практические ситуации. Например, пассажир мог забыть в сумке какой-то важный предмет, и багаж вручную забирали из транспортной системы. Весь процесс обработки нарушался, и система отказывала. В течение следующих десяти дней около 42 000 мест багажа не были доставлены владельцам, из-за этого пришлось отменить более 500 рейсов.



50. В 2004 году компания EDS разработала сложную компьютерную систему по выплате пособий для британского агентства помощи детям (CSA). В то же время Министерство труда и пенсионного обеспечения (DWP) приняло решение реорганизовать это агентство. Две программные системы оказались полностью несовместимы, в результате были спровоцированы необратимые ошибки. Система переплатила 1,9 миллионам человек и недоплатила семистам тысячам. В итоге накопилось 7 миллиардов долларов, не попавших на социальные счета, 239 000 нерассмотренных дел, 36 000 новых дел, «застрявших» в системе. Все эти ошибки обошлись британским налогоплательщикам в сумму более 1 миллиарда долларов.



51.  Расскажу вам байку из своего опыта. В году так 2009-м писал я с командой софт для управления сетевыми устройствами. Когда я говорю про управление — это скачивание конфигурационного файла, допустим, с роутера, изменение его и закачка обратно.


Так работало большинство устройств, но некоторые настраивались через так называемые MIB деревья, или же просто через меню по SSH соединению. Так вот, чтобы что-то менять в устройствах по SSH, мы посылали команды: стрелка вниз, вверх, энтер. Прям как комбинации в Mortal Combat.


Цель, конечно же, была — добраться до пункта меню: скачать файл. Собственно, комбинации подгружались с шаблонов команд в зависимости от модели сетевого устройства. Итак, история :) Пишет нам заказчик: «Я администратор в аэропорту. Пользуюсь вашим софтом и пытаюсь настроить один роутер. Но когда я пытаюсь скачать конфиг, ваше приложение перегружает главный роутер, и весь терминал аэропорта погружается в интернет-тьму. И даже пропадает связь с самолетами...». Суть до дела, был неправильный конфиг :) Но, к счастью, обошлось без жертв. Пронесло!


отсюда

13
Автор поста оценил этот комментарий
Кривая копипаста переведенная алиэкспрессом.
раскрыть ветку
11
Автор поста оценил этот комментарий

Копипастер Хуев. Сам сначала прочитай то, что копируешь

раскрыть ветку
4
Автор поста оценил этот комментарий
Автор, тебе указывают на косяки твоих копипаст, а ты кричишь @moderator, не надо так)
раскрыть ветку
1
Автор поста оценил этот комментарий
А мне понравилась подборка
2
Автор поста оценил этот комментарий
Автор, Имхо лучше взять несколько пунктов и расписать подобно. Слишком много информации и нкобходимого гугления.