10 худших ошибок программирования в истории
Программирование

10 худших ошибок программирования в истории

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

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

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

1. Ошибка Y2K

Ошибка 2000 года, она же Y2K Bug или Millennium Bug, была проблемой кодирования, которая, по прогнозам, должна была вызвать компьютерное столпотворение. В 90-е годы большинство компьютерных программ указывали четырехзначные годы в сокращенном варианте. Так, 1990 год читался как 90, 1991 – как 91 и т.д. Сокращая четырехзначные годы до двух цифр, кодеры таким образом экономили ценную память. Но компьютеры не смогли распознать 2000 год как просто 00. Еще больше усугубляло проблему то, что 2000 год был високосным. Некоторые программные приложения не учитывали дополнительный день

Многие боялись, что Y2K может вывести из строя компьютеры и электронику по всему миру. Я помню свой первый DVD-плеер с блестящей наклейкой ‘Y2K Compliant’. Хотя с точки зрения программного обеспечения 2000 год прошел довольно спокойно, обновление компьютеров и приложений во всех отраслях промышленности обошлось примерно в 300 миллиардов долларов. Компьютеры не сломались. Жизнь продолжалась в обычном режиме. Но не без больших затрат денег и труда, которые, согласно отчетам Slate, могли быть напрасными

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

2. Ошибка Heartbleed

Кредит изображения: OpenClipart-Vectors via Pixabay.

Появившаяся в библиотеке OpenSSL, ошибка Heartbleed является опасной уязвимостью в системе безопасности. В протоколе Transport Layer Security (TLS) используется криптографическая библиотека OpenSSL. Из-за ее широкого использования в TLS, Heartbleed быстро распространилась. Эта ошибка позволяет практически любому человеку в Интернете считывать память на машинах, на которых запущены поврежденные итерации OpenSSL. Можно было прочитать до 64 кб системной памяти. Хотя ошибка Heartbleed была обнародована в 2014 году, она распространилась в 2012 году

Ошибка была вызвана неправильной проверкой ввода из-за отсутствия проверки границ в расширении TLS heartbeat. Поскольку это была ошибка в расширении heartbeat, возникло название Heartbleed. В 2014 году в статье The Register сообщалось, что 1,5% самых популярных сайтов с поддержкой TLS остаются уязвимыми к ошибке Heartbleed. Однако реализации TLS, помимо OpenSSL, остались нетронутыми. Поэтому версия TLS для Windows и службы сетевой безопасности Mozilla не были затронуты ошибкой Heartbleed. В конечном итоге исправление устранило проблему в OpenSSL версии 1. 0. 1g. Благодаря добавлению проверок границ для предотвращения перечитывания буфера, ошибка Heartbleed была успешно исправлена

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

3. Вирус World of Warcraft, воспринятый слишком буквально

Image Credit: WoW Wiki.

World of Warcraft однажды пострадал от компьютерного вируса другого рода. В 2005 году цифровая чума проникла на несколько игровых серверов. Тысячи персонажей стали жертвами вируса крови. Разработчик WoW компания Blizzard представила Хаккара, бога крови. Значительный враг заражал персонажей испорченной кровью. Изначально предполагалось, что заражение кровью поразит игроков, находящихся в непосредственной близости от тела Хаккара, однако передача вируса от игрока к игроку произошла за пределами королевства. Это непреднамеренное средство распространения вируса крови породило внутриигровых питомцев. Более того, носителями вируса стали неигровые персонажи (NPC)

Архимонд стал первым зараженным сервером. Персонажи низкого уровня мгновенно погибали. Даже могущественные персонажи продержались недолго. Хотя из-за ошибки в кодировке вирус распространялся через NPC и питомцев, его не планировалось выпускать за пределы королевства Хаккара. Хотя тысячи игроков погибли, в World of Warcraft не предусмотрена перма-смерть.Blizzard устранила вирус крови с помощью перезагрузки сервера. Но не раньше, чем трупы игроков усеяли ландшафт WoW

Почему это одна из худших ошибок программирования: Хорошо, возможно, World of Warcraft не представляет собой проблему безопасности данных или опасный для жизни сценарий – но геймеры серьезно относятся к своим развлечениям.Blizzard потратила несколько часов на перезагрузку серверов. Интересно, что поведение игроков в игре имитировало то, что может произойти во время эпидемии в реальном мире: вспышка эпидемии, паника и крах цивилизации. Вы еще не играли в WoW? Начните с этого полного руководства для новичков

4.Therac-25

В то время как многие ошибки программирования приводят к уязвимостям или смерти игроков в игре, плохой код действительно может убить. Катастрофа Therac-25 произошла с аппаратом для лучевой терапии Therac-25. Произведенный компанией Atomic Energy of Canada, аппарат Therac-25 вызвал случайную передозировку радиации, в результате которой погибли по меньшей мере шесть пациентов. В ходе расследования выяснилось, что причиной передозировки радиации стало плохое программное обеспечение и недостаточная разработка системы. В основном это было связано с трудностями при проведении автоматизированных тестов программного обеспечения

Передозировка радиации в Therac-25 служит напоминанием о необходимости создания легко тестируемого кода. Машины, убивающие людей, могут показаться научной фантастикой, но инцидент с Therac-25 доказывает обратное. Но на самом деле причиной этих проблем стали человеческие ошибки при кодировании. Эксперты, включая Нэнси Левесон, установили, что неопытные кодеры создали некачественное программное обеспечение. Более того, только один программист создал программное обеспечение, и оно было основано на коде от Therac-6 и Therac-20

Почему это одна из худших ошибок программирования: Всякий раз, когда происходит потеря человеческой жизни, ошибка программирования является абсолютно одним из худших примеров плохого кода

5. Полет древнего Маринера 1

НАСА использует довольно много технологий. Зонд New Horizons использует процессор PlayStation. Вице-президент по архитектуре решений и инжинирингу в NVIDIA Марк Гамильтон регулярно ведет блог об использовании NASA аппаратного обеспечения NVIDIA. Ракета Mariner 1 стартовала с космическим зондом, предназначенным для исследования Венеры. Однако вскоре после старта ракета отклонилась от намеченной траектории полета. Маринер-1 был уничтожен вскоре после взлета

Незначительная ошибка программиста стала причиной сбоя в работе ‘Маринера-1’. Хотя сообщения расходятся, признаки указывают на пропущенный дефис. Согласно архивным документам НАСА, ‘послеполетный наблюдательный совет ‘Маринер-1′ определил, что пропуск дефиса в закодированных компьютерных инструкциях в программе редактирования данных позволил передать неверные сигналы наведения на космический аппарат’. Известный писатель Артур С. Кларк (2001: Космическая одиссея) назвал катастрофу ‘Маринера-1’ ‘самым дорогим дефисом в истории’

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

6.AT&T Network Goes Down

Image Credit: Unsplash via Pixabay.

Ты меня слышишь? Нет. 15 января 1990 года более 50 процентов сети AT&T вышло из строя. За девять часов 75 миллионов звонков остались без ответа. Хотя в первых сообщениях обвиняли хакеров, на самом деле виновник оказался гораздо хуже: стандартное обновление программного обеспечения. Помните об этом в следующий раз, когда будете жаловаться на обновления Windows 10. Ошибка всего в одной строке кода вывела сеть AT&T из строя на несколько часов. Один коммутатор перезагрузился, но из-за ошибки второй коммутатор отправил другое сообщение. По сути, сработал эффект домино, когда сеть продолжала повторять ошибку. В конце концов AT&T придумала решение, снизив нагрузку на сеть. После этого коммутаторы сбросились сами

Несмотря на интенсивное тестирование, одно единственное утверждение вывело сеть из строя. Программа была написана на языке C. Оператор break внутри пункта if оставался вложенным в пункт switch. Великое отключение AT&T в 1990 году кажется простой проблемой. Множество пропущенных звонков или, как сегодня, куча пропущенных смс, уведомлений в Instagram, Twitter и Snapchat. Однако отсутствие связи имело огромные денежные последствия. Такие компании, как American Airlines, понесли финансовые потери. Из-за перебоев в работе American Airlines получила на две трети меньше звонков. Перебои 1990 года остаются прекрасным примером того, почему тестирование очень важно. Кроме того, отключение AT&T служит напоминанием о неразрывной связи между технологиями и экономикой

Почему это одна из худших ошибок программирования: Мало того, что сеть AT&T рухнула, несколько часов, которые она оставалась нерабочей, привели к финансовому краху

7. День живых мертвецов: больница Св.Mary’s Mercy Hospital

Image Credit: Vitalworks via Pixabay.

В 2003 году программный сбой неправильно ‘убил’ 8 500 человек. Медицинский центр St.Mary’s Mercy Medical Center в Гранд-Рапидс, штат Мичиган, ошибочно сообщила о смерти многих пациентов из-за сбоя в программной системе управления пациентами. Эта катастрофа с плохим кодом довольно безобидна по сравнению со смертельным исходом Therac-25, поскольку на самом деле никто не умер. Тем не менее, читать о собственной гибели неприятно – особенно когда ты жив и здоров

Ложные сообщения о смерти не ограничивались пациентами. Эта корреспонденция направлялась в страховые компании и офисы социального обеспечения. Поскольку Social Security и страховые компании следят за тем, чтобы у пациентов, имеющих право на участие в программе Medicare, это представляло собой довольно серьезную проблему. Сотрудники St.Mary’s Mercy сотрудники проинформировали пациентов, государственные учреждения и страховые компании об ошибке. В конечном итоге ошибка в программировании не привлекла особого внимания. Неизвестно, была ли ошибка в кодировке когда-либо исправлена. Однако больше ложных сообщений о смерти не появлялось. В больнице St.Mary’s Mercy hospital просто поменяла программное обеспечение для управления пациентами

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

8. Заключенный Пре-альфа: Досрочное освобождение

Image Credit: Alexas_Fotos via Pixabay.

В Мичигане произошел сбой в обработке данных между 2003 и 2005 годами. В этот период ошибка в компьютерном программировании привела к досрочному освобождению 23 заключенных, уменьшив срок заключения для заключенных штата Мичиган. Удачливым заключенным сократили срок заключения от 39 до 161 дня. Хотя любое случайное прекращение тюремного заключения является проблематичным, к счастью, речь идет о более мелких нарушениях, таких как обвинения в хранении наркотиков и растрате

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

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

9. Хартфордский Колизей падает

Хотя убытки от обрушения Хартфордского Колизея в 1978 году составили 90 миллионов долларов, все могло быть гораздо хуже. Хартфордский Колизей обрушился через несколько часов после того, как болельщики покинули стадион. Его стальная решетчатая крыша не выдержала веса мокрого снега. Здание обрушилось из-за простой ошибки в программировании. Программист программного обеспечения CAD, использованного для проектирования Хартфордского Колизея, не учел множество переменных. Вместо этого программист предположил, что стальные опоры крыши будут испытывать только чистое сжатие

Инженеры сталкиваются с множеством проблем. Использование программного обеспечения должно облегчить их работу. Однако неучет нескольких переменных приводит к огромным проблемам. В то время как в Minecraft можно просто исправить ошибку, программное обеспечение CAD напрямую влияет на реальные конструкции

Почему это одна из худших ошибок программирования: Ну, по крайней мере, никто не погиб. Но экономическое опустошение от потери примерно 90 миллионов долларов огромно

10. У меня 99 проблем, а Pentium – одна

Как правило, процессоры Intel могут похвастаться лучшей производительностью, чем аналоги от AMD. Однако AMD предлагает отличное соотношение цены и производительности. Но в 1994 году микропроцессоры Pentium компании Intel столкнулись с серьезной проблемой. Процессоры 486DX и Pentium оснащались блоком вычислений с плавающей запятой (FPU). Этот FPU был математическим сопроцессором. Процессоры Intel предыдущего поколения обрабатывали математические данные с целыми числами. Благодаря встроенному FPU чип Pentium нового поколения обещал значительно ускорить числовые вычисления

FPU Pentium использовал алгоритм STR с радиксом 4. Неправильно введенная информация вызывала несколько некорректные вычисления. Но даже незначительное отклонение может означать большие проблемы, как это было в случае с Хартфордским коллапсом или Therac-25. Примерно пять записей из тысячи были пропущены, что нарушило возможности Pentium по делению. Официально Intel утверждает, что проблемы с вводом в поиск вызвала ошибка в сценарии. В любом случае, математические проблемы Pentium объясняются плохим кодом

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

Плохо с кодом: Ошибки программирования случаются

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

Существует множество примеров ошибок в программировании. Некоторые из них довольно безобидны, как, например, ошибка в World of Warcraft. Другие приводят к смерти, реальной (Therac-25) или воображаемой (St.Mary’s). Не позволяйте этим известным примерам оттолкнуть вас от программирования. Ознакомьтесь с этим руководством по выбору подходящего языка веб-программирования

Какие исторические примеры плохого кода вы помните? Оставьте комментарий ниже со своими примерами ошибок программирования!

Image Credit: nouskrabs and McIek via Shutterstock.com

Об авторе

Алексей Белоусов

Привет, меня зовут Филипп. Я фрилансер энтузиаст . В свободное время занимаюсь переводом статей и пишу о потребительских технологиях для широкого круга изданий , не переставая питать большую страсть ко всему мобильному =)

Комментировать

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