Его Величество Баг
АрхивКомментарий дняОказывается, значительная часть вины за происшедшее 14 августа крупномасштабное отключение электроэнергии в Канаде и США, лежит на компьютерной ошибке. То ли еще будет!
Компьютерные баги - ошибки, скрытые в программах и, реже, в самом "железе" - для современного человека стали настоящими спутниками жизни. По всей вероятности, будь обнаружение ошибок задачей хоть сколько-нибудь полегче, их социальная роль, сказавшаяся на ходе эволюции вычислительной техники и высоких технологий вообще, не была бы столь значительна. На практике переоценить значимость багов трудно: первые упоминания об ошибках восходят к 40-ым годам прошлого века, к электромеханическим гигантам (вспомните байки про рыбу, застревавшую в системе охлаждения, и моль, забившуюся между контактами реле). Тогда, впрочем, компьютеры были больше экспериментальным стендом, нежели рабочим инструментом. Но первые же серьёзные практические применения вычислительных машин продемонстрировали, сколь масштабными могут быть последствия вовремя не обнаруженной ошибки: десятки аварий на земле, в воздухе и за атмосферой (вспомните отечественный проект "Фобос-1" или американский Mars Climate Orbiter) были вызваны скрытыми компьютерными багами, выставившими человечеству общий счёт на миллиарды долларов и множество человеческих жизней. Отладка, контроль за качеством кода и всестороннее тестирование давно стали обязательными этапами процесса разработки программного обеспечения. Но, увы, даже система, многократно проверенная программистами и временем, может преподнести неприятный сюрприз.
Вспомните аварию в энергосистеме США и Канады, случившуюся 14 августа прошлого года. Отключение электроэнергии, так или иначе затронувшее 50 миллионов человек, было спровоцировано, как известно, рядовым происшествием на одной из линий электропередач. По всей вероятности из-за повреждения, нанесённого упавшим деревом, какая-то линия перешла на аномальный режим работы, за чем последовало каскадное распространение аварии, приведшее к отключению двух десятков электростанций (весь процесс занял лишь три минуты). Но как выяснилось на прошлой неделе, своей тяжестью авария во многом обязана скрытой ошибке в контролировавшем процесс передачи электроэнергии программном обеспечении.
Строго говоря, ошибку эту обнаружили - после нескольких недель анализа кода - ещё в начале осени. Скрывалась она в сложнейшем программном комплексе XA/21, разработанном компанией General Electric. XA/21 относится к классу SCADA-систем: на его плечи возложены задачи мониторинга текущей ситуации на подконтрольном участке энергосистемы и гибкого управления распределением потоков электроэнергии в зависимости от складывающейся ситуации. Таким образом, комплекс берёт на себя выполнение значительного числа задач (которые иначе достались бы диспетчерам), одновременно наглядно представляя собранную информацию. На счету XA/21 суммарно более миллиона часов работы, поэтому данный инструмент заслуженно считается доказавшим свою надёжность. Однако даже многолетний опыт не гарантирует отсутствия ошибок в алгоритмах. Что и было доказано в тот памятный четверг: когда работавшая в одном из диспетчерских центров (компании FirstEnergy) копия XA/21 обнаружила первые неполадки на контролируемых линиях, она не предприняла необходимых мер сама и даже не сообщила об этом диспетчеру, а просто тихо "умерла". То же случилось и с резервным сервером секундами позже. Отработай программа как следует, и, возможно, аварию удалось бы локализовать.
Как показало расследование, проведённое совместно специалистами нескольких организаций и компаний, выход из строя XA/21 стал результатом ошибки, чрезвычайно глубоко запрятанной в её коде: баг мог проявить себя лишь после определённой цепочки инцидентов, которая, к несчастью, и произошла 14 августа.
Профилактические меры, призванные исключить возможность повторения печальной истории, включают в себя установку всех имеющихся патчей под контролем независимых экспертов. Более того, ещё до происшествия FirstEnergy запланировала сменить XA/21 на продукт от другого разработчика. Вот только все эти шаги, традиционные и для любых других компании и продукта, направлены на ликвидацию уже открытых недоработок: застраховать от проявления пока неизвестных ошибок они неспособны. А потому, похоже, нам предстоит по-прежнему жить и бороться с последствиями невнимательности и непредусмотрительности разработчиков - иного не дано. Слышали, на днях в Мельбурне было парализовано дорожное движение из-за сбоя жёсткого диска в системе управления светофорами?..