Читаем Мифы о безопасном ПО: уроки знаменитых катастроф полностью

Эта переменная однобайтовая, следовательно каждый 256-й проход заставляет ее сбрасываться в ноль. А ведь этот ноль свидетельство, что все параметры, наконец, установлены. Если повезет, что именно в этот момент оператор нажмет клавишу «set» для запуска установки коллиматора в надлежащую позицию (а он это может сделать в любой момент, так как уверен, что система позволит коллиматору начать позиционироваться, только если все параметры заданы и верифицированы), то основываясь на случайно возникшем нулевом значении Class3, подпрограмма Lmtchk уже не станет вызывать Chkcol, а значит установить ненулевое значение F$mal будет некому. Иными словами, в ситуации, когда параметры не установлены должным образом (в данном конкретном случае «челюсти» коллиматора были еще раскрыты слишком широко), программная блокировка не сработала: Set Test Up установила Tphase = 2, что позволило монитору Treat прекратить цикл вызова Set Up Test, а инициализировать подпрограмму Set Up Done, по существу запускающую процесс излучения, который и потек бурным потоком, а не узеньким ручейком, как предполагалось.

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

Некоторые итоги

История с Therac-25 показательна, прежде всего, своей комплексностью: если в случае с Ariane 5 авария случилась один раз и из-за единственной ошибки, то катастрофические последствия с Therac-25 проявлялись неоднократно в течение длительного времени, и были следствием целого спектра причин, среди которых не только вполне конкретные программистские «баги», но и дефекты в самой постановке выполнявшегося многие годы проекта.

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

Что же до системной «глобальной особенности», то к ней можно отнести принципиальную переусложненность построения мультизадачной управляющей системы. С чисто программистской точки зрения можно отметить, что для реализации тонкой синхронизации параллельных процессов был выбран механизм разделения переменных, требующий очень внимательной проработки (это именно та область, где необходимо выполнять формальное доказательство правильности алгоритма, благо соответствующие методы разработаны и могут считаться рутинными для тех, кто ими владеет); получилось же так, что потенциально опасные в плане возникновения «race conditions» операции типа «set» и «test» не были сделаны «неделимыми» (indivisible), что и привело к наложению друг на друга их «критических секций» и соответственно к печальным последствиям.

Можно выделить и такой фактор, как переоценка уровня безопасности, в принципе гарантируемого программным обеспечением. Это послужило стимулом заменить используемые в предыдущих версиях системы защитные механизмы, которые контролировали радиационные потоки и блокировали их в случае выхода из нормального режима, с «аппаратных» блокираторов (на базе электронно-механических устройств) на чисто программные. Роковую роль сыграло и отсутствие должным образом поставленной системы контроля и исследования природы задокументированных инцидентов, а также некорректные процедуры оценки риска, которые не учитывали специфику ПО. Каждый раз после очередного случая с переоблучением производитель утверждал, что причина выяснена и корректирующие действия предприняты; это не было ложью, но потребовалось два года, чтобы от исправления частностей (которые не делали систему безопаснее) перейти, наконец, к трезвой оценке глобальных особенностей проекта, изменить дисциплину разработки и выполнить корректный анализ рисков.

Мифы о безопасности ПО

Перейти на страницу:

Похожие книги

Память. Пронзительные откровения о том, как мы запоминаем и почему забываем
Память. Пронзительные откровения о том, как мы запоминаем и почему забываем

Эта книга предлагает по-новому взглянуть на одного из самых верных друзей и одновременно самого давнего из заклятых врагов человека: память. Вы узнаете не только о том, как работает память, но и о том, почему она несовершенна и почему на нее нельзя полностью полагаться.Элизабет Лофтус, профессор психологии, одна из самых влиятельных современных исследователей, внесшая огромный вклад в понимание реконструктивной природы человеческой памяти, делится своими наблюдениями над тем, как работает память, собранными за 40 лет ее теоретической, экспериментальной и практической деятельности.«Изменчивость человеческой памяти – это одновременно озадачивающее и досадное явление. Оно подразумевает, что наше прошлое, возможно, было вовсе не таким, каким мы его помним. Оно подрывает саму основу правды и уверенности в том, что нам известно. Нам удобнее думать, что где-то в нашем мозге лежат по-настоящему верные воспоминания, как бы глубоко они ни были спрятаны, и что они полностью соответствуют происходившим с нами событиям. К сожалению, правда состоит в том, что мы устроены иначе…»Элизабет Лофтус

Элизабет Лофтус

Научная литература / Психология / Образование и наука
Она смеётся, как мать. Могущество и причуды наследственности
Она смеётся, как мать. Могущество и причуды наследственности

Книга о наследственности и человеческом наследии в самом широком смысле. Речь идет не просто о последовательности нуклеотидов в ядерной ДНК. На то, что родители передают детям, влияет целое множество факторов: и митохондриальная ДНК, и изменяющие активность генов эпигенетические метки, и симбиотические микроорганизмы…И культура, и традиции, география и экономика, технологии и то, в каком состоянии мы оставим планету, наконец. По мере развития науки появляется все больше способов вмешиваться в разные формы наследственности, что открывает потрясающие возможности, но одновременно ставит новые проблемы.Технология CRISPR-Cas9, используемая для редактирования генома, генный драйв и создание яйцеклетки и сперматозоида из клеток кожи – список открытий растет с каждым днем, давая достаточно поводов для оптимизма… или беспокойства. В любом случае прежним мир уже не будет.Карл Циммер знаменит своим умением рассказывать понятно. В этой важнейшей книге, которая основана на самых последних исследованиях и научных прорывах, автор снова доказал свое звание одного из лучших научных журналистов в мире.

Карл Циммер

Научная литература