Какую самую ужасную ошибку вы допускали при промышленной эксплуатации?
Я вот однажды забыл поставить WHERE в одном запросе с DELETE, что привело к удалению шести с лишним тысяч записей вместо одной. Ууупс. Конечно, моя ошибка вылилась всего лишь в несколько часов потерянной работы, мучительное восстановление данных и одного крайне сконфуженного молодого разработчика (меня). Уверен, окажись я в таком окружении как Адам, я бы обратился в подобном случае к кому-нибудь более опытному, или, в крайнем случае, был гораздо, гораздо более внимателен.
Адам работает на крупного производителя стали. Если вам никогда не доводилось бывать на сталелитейном заводе, то, скажу я вам, это крайне интересное место. Сами заводы запросто расползаются на несколько десятков гектар, в каждом есть несколько гигантских, размером с авиационный ангар зданий. Некоторые для выплавки железа. Другие для производства стали. А потом следует литье. Ковка. Прокат. В наличии также и разнообразные сопутствующие здания, например для фильтрации воды и выработки электричества. И практически все это автоматизировано.
Конечно, хоть Адам и был работником сталелитейной компании, он не работал напрямую с софтом управляющим тяжелой машинерией. Потому что эти системы настолько критичны, что их доверяют только Астрономически Высокооплачиваемым Консультантам. И возможно оно и к лучшему. Лучше спать спокойно, не думая о том, что мой софт отвечает за разлив тонн жидкого металла по гигантским чанам установленным на вагонетках.
Производители и консультанты отлично делают свое дело, а в благодарность машины трудятся без сбоев и на полную мощность. Система управления (обычно программируемый микроконтроллер) получает показатели от различных датчиков – температура, вибрация, скорость, давление, поток топлива, и т.д. -- и корректирует параметры системы при возникновении каких-либо отклонений. В тех редких случаях, когда что-то идет совсем не так, контроллер отключает оборудование, посылая сигнал об ошибке на отдельное реле, которое подключено к всевозможным устройствам аварийного отключения (включая, конечно же, и Большую Красную Кнопку). Из-за многократного дублирования всего этого добра, неконтролируемых ситуаций практически не происходит.
Вот почему взрыв газовой турбины с последующим пожаром, потерей миллионов долларов на издержках и оборудования на десятки миллионов долларов, стал очень даже существенной проблемой. К счастью турбина была остановлена до того как ее разорвало на части, поэтому она не успела разметать повсюду раскаленные до 1500 с лишним градусов осколки. После проведенного командой экспертов (также Астрономически Оплачиваемых Консультантов) тщательного расследования последовало заключение, что происшествие было случайностью. Винить было некого.
Через несколько месяцев взорвалась еще одна турбина. А потом еще одна. Производителя стали уже начали утомлять эти многомиллионные случайности (не говоря уже о серьезном риске увечий или смертей), поэтому было начато полномасштабное расследование. Каждая деталь газовой турбины и сопутствующего оборудования была тщательно исследована. К счастью они смогли проследить причину возникновения проблемы до «сторожевого» таймера.
Каждые несколько секунд или около того система управления турбиной должна была посылать сигналы «пульса» сторожевому таймеру в отдельной системе безопасности. Если сторожевой таймер не получал ожидаемый сигнал, система безопасности била тревогу и оповещала оператора. Во всех случаях ПО системы управления выходило из строя (обычно все приводилось в норму обычной перезагрузкой компьютера) и сторожевой таймер не оповещал систему безопасности.
Тогда они обратились в компанию разработавшую ПО системы управления турбиной (и соответствующий сторожевой таймер). Как выяснилось, один из консультантов закомментировал весь код, связанный с работой сторожевого таймера. Видимо так было гораздо проще отлаживать систему. Консультант просто забыл раскомментировать код перед развертыванием системы безопасности. Ууупс.
Оригинал:http://worsethanfailure.com/Articles/_0x2f__0x2f_TODO_0x3a__Uncomment_Later.aspx
Перевод:Евгений Виговский