Найти в Дзене
Мир в Йоттабайтах

Ошибки на миллиард: Самые дорогие опечатки в коде, которые привели к катастрофам

Мы все совершаем ошибки: опечатка в сообщении, пропущенная запятая в письме. Обычно цена такой ошибки — легкая неловкость. Но в мире больших систем и космических программ один лишний символ или неверно переведенная единица измерения может стоить сотни миллионов долларов и годы труда тысяч людей. Вот четыре реальных истории, когда код стал «золотым» в самом плохом смысле этого слова. В 1962 году США запустили аппарат «Маринер-1», который должен был стать первым зондом, пролетевшим мимо Венеры. Но спустя всего 293 секунды после старта ракета начала отклоняться от курса и вести себя непредсказуемо. Офицеру безопасности пришлось нажать кнопку самоликвидации. Что случилось: При переносе математических формул в код программы один из инженеров пропустил черточку (надчеркивание) над символом радиуса в уравнении. Ракета просто «сошла с ума» от лишних вычислений. Цена этого дефиса? Около 18 миллионов долларов (в ценах 1962 года). В 1996 году европейская ракета Ariane 5 взорвалась на 37-й секунде
Оглавление

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

Вот четыре реальных истории, когда код стал «золотым» в самом плохом смысле этого слова.

1. МАРИНЕР-1: ОПЕЧАТКА ЦЕНОЙ В РАКЕТУ

В 1962 году США запустили аппарат «Маринер-1», который должен был стать первым зондом, пролетевшим мимо Венеры. Но спустя всего 293 секунды после старта ракета начала отклоняться от курса и вести себя непредсказуемо. Офицеру безопасности пришлось нажать кнопку самоликвидации.

Что случилось:

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

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

Ракета просто «сошла с ума» от лишних вычислений. Цена этого дефиса? Около 18 миллионов долларов (в ценах 1962 года).

2. ARIANE 5: КОГДА ЧИСЛО НЕ ВЛЕЗЛО В ПАМЯТЬ

В 1996 году европейская ракета Ariane 5 взорвалась на 37-й секунде полета. Это был её первый запуск, на борту находились дорогостоящие научные спутники.

Что случилось:

Программисты использовали кусок кода от старой ракеты Ariane 4. Но новая ракета была намного быстрее. В один момент число, обозначающее горизонтальную скорость, стало настолько большим, что оно не смогло уместиться в 16-битную ячейку памяти (произошло то самое «переполнение», о котором мы говорили в статье про 2038 год).

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

Цена ошибки: 370 миллионов долларов.

3. ТЕЛЕПОРТАЦИЯ ДЕНЕГ В KNIGHT CAPITAL

В 2012 году крупная трейдинговая компания Knight Capital за 45 минут превратилась из гиганта в банкрота.

Что случилось:

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

Этот «код-зомби» начал скупать и продавать акции с бешеной скоростью, теряя деньги на каждой сделке. За 45 минут компания потеряла 440 миллионов долларов.

Это была самая дорогая опечатка в истории Уолл-стрит — компания так и не смогла оправиться и была продана конкурентам за бесценок.

4. КАНАДСКИЙ ПЕНСИОННЫЙ ФОНД И ЛИШНЯЯ ТОЧКА

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

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

ИТОГ: ПОЧЕМУ ТАК ПРОИСХОДИТ?

Эти истории учат нас двум вещам:

  1. Тестирование важнее кода. Написание программы занимает 20% времени, остальные 80% должны уходить на попытки её «сломать» в тестовой среде.
  2. Человеческий фактор. Даже если у вас суперкомпьютер, за ним стоит человек, который может просто не выспаться и забыть поставить одну черточку над буквой.

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