4 сентября в 15:00 мск Вебинар «Интеграция Test IT с ИИ-моделями по OpenAI API»

Раздаем медали багам: 10 самых эпичных программных дефектов в истории

5841

Готовимся ко Дню тестировщика, который празднуется 9 сентября. В этот день в 1947 году при тестировании вычислительной машины Mark II обнаружили мертвую моль, застрявшую между контактами реле, что привело к сбою системы. Так и задокументировали: баг. 

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

Самый дорогой баг

Ошибка, которая привела к разрушению ракеты Ariane 5 в 1996 году, считается самым дорогим багом в истории, она стоила около 370 миллионов долларов. Через 37 секунд после старта ракета отклонилась от курса и самоуничтожилась. Причина — баг в программном обеспечении: при преобразовании 64-битного числа в 16-битное произошло переполнение буфера, что вызвало сбой в навигационной системе.

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

Вывод для QA: даже базовые операции нужно тестировать в реальных сценариях

Самый шокирующий баг

В 2012 году баг в программном обеспечении финансовой компании Knight Capital привел к шокирующим последствиям на фондовом рынке. Ошибка в алгоритмах автоматической торговли вызвала цепную реакцию необоснованных покупок и продаж акций. Всего за 45 минут компания потеряла 440 миллионов долларов, что привело ее к колоссальным убыткам и банкротству.  

Хотя убытки в 440 миллионов долларов огромны, назвать баг Knight Capital самым дорогим в истории нельзя по той причине, что деньги были потеряны только на рынке акций. Тогда как при аварии Ariane 5 в 1996 году речь шла не только о финансовых потерях, но и о потере дорогостоящего оборудования, которое невозможно было восстановить. Однако Knight Capital Bug достоин звания самого шокирующего из-за мгновенного эффекта и полного краха компании.

Вывод для QA: автоматизация без защит может превратиться в катастрофу, и очень быстро

Самый переоцененный баг

Y2K можно назвать самым переоцененным багом в истории. Проблема заключалась в том, что многие системы в XX веке использовали только последние две цифры для указания года (например, 99 вместо 1999). Когда наступил 2000 год, существовал риск, что компьютеры воспримут 00 как 1900 год и это вызовет сбои в банковских и транспортных системах, энергосетях и других ключевых инфраструктурах.

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

Вывод для QA: профилактика всегда лучше срочных исправлений

Самый «тихий» баг

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

Heartbleed стал одним из самых известных и опасных багов в истории кибербезопасности, у него даже одностраничник с FAQ  есть. Хитрость этого бага в том, что он действовал незаметно в течение нескольких лет, с 2011 года. После его обнаружения началась массовая замена скомпрометированных сертификатов и устранение уязвимости.

Уязвимость нашла финская компания-разработчик Condenomicon (ныне принадлежит Synopsys), она же разработала кровавый логотип Heartbleed и лицензировала его по Creative Commons, то есть предоставила в открытое использование. В связи с этим в интернет-магазинах можно найти тематический мерч — причем не только футболки, а даже постельное белье. 

Вывод для QA: даже open sourse требует регулярных проверок и независимого ревью

Самый длительный баг

С 1995 по 2017 год в калькуляторе Windows существовал баг, который не позволял правильно выполнять некоторые простые операции. Основная проблема возникала при вычислении квадратных корней для целых чисел, таких как √4. После вычисления корня и вычитания из него ожидаемого значения (например, √4 – 2), калькулятор выводил не ноль, а значение с незначительной ошибкой, вроде -1.068281969439142e-19. Это происходило из-за использования библиотеки для операций с плавающей точкой, которая не всегда корректно округляла числа. 

Баг существовал более 20 лет и переезжал из одной версии Windows в другую, пока наконец Microsoft не исправила его в Windows 10. Интересно, что несмотря на множество обновлений, этот баг долгое время не считали приоритетным для исправления, так как встречались с ним редкие пользователи. 

Вывод для QA: неочевидные баги могут жить десятилетиями без приоритета на исправление

Самый распространенный баг 

Null Reference Exception или Null Pointer Exception является одним из самых распространенных багов в программировании. Он возникает, когда программа пытается использовать объект, который не был инициализирован, то есть равен null. 

Концепцию null впервые предложил британский ученый Тони Хоар в 1965 году при создании языка ALGOL W. Null был придуман для решения проблемы с отсутствующими значениями, но сам Хоар спустя годы пожалел о своей находке, потому что она привела к множеству багов и уязвимостей во всех системах, которые начали использовать эту концепцию. 

В языках C и C++ доступ к null-указателю вызывает Null Pointer Exception, что может привести к краху программы. Эти языки допускают более низкоуровневый доступ к памяти, поэтому ошибка может быть очень серьезной. В Java, C#, Python и других языках высокого уровня Null Reference Exception выбрасывается как исключение при попытке обратиться к null-объекту. 

Вывод для QA: одно техническое решение способно породить миллионы ошибок

Самый известный в поп-культуре

Самый известный баг из индустрии развлечений — это MissingNo. из франшизы про покемонов. Глюк появился в 1999 году в первых играх серии Pokemon Red и Pokemon Blue на приставке Game Boy. Баг возникал при выполнении трех определенных игровых действий и приводил к появлению странного покемона с искаженной графикой и необычными способностями. Всего существовало пять разных форм MissingNo.

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

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

Вывод для QA: не каждый баг враг, иногда это фича или даже культурный феномен

Самый трагический баг

Ошибка в программном обеспечении аппарата Therac-25, который использовался для лечения рака в 1980-х, привела к печальным последствиям. Из-за багов и отсутствия аппаратных блокировок аппарат выдавал смертельные дозы радиации, что привело к гибели пяти человек и тяжелым травмам у других. Разработчики полагались на программное управление, игнорируя механические предохранители. 

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

Вывод для QA: в критичных системах нельзя ограничиваться одним уровнем защиты

Баг с самым большим потенциалом

Year 2038 Problem — пока несработавший баг, связанный с тем, как компьютеры на UNIX-подобных операционных системах отображают время. Отсчет ведется с так называемой «эпохи UNIX» — полуночи 1 января 1970 года, а время записывается в виде 32-битного целого числа со знаком. Это позволяет хранить до 2 147 483 647 секунд, что приведет к конечной дате 19 января 2038 года. После этого счетчик переполнится и начнет отсчитывать время с отрицательных значений, что вызовет сбои в системах, не подготовленных к этому событию.

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

Вывод для QA: известные угрозы требуют долгосрочного планирования

Самый абсурдный баг

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

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

Вывод для QA: тестирование касается не только кода — важна вся инфраструктура и среда


Готовы проверить себя? Мы подготовили  викторину по этой статье — это ваш шанс выиграть подарки от Test IT

Была ли статья полезной?