Мифы о безопасном ПО: уроки знаменитых катастроф - [4]

Шрифт
Интервал

). Именно «контракт» в духе языка Eiffel, явным образом (с помощью пред- и пост-условий) устанавливающий для любого программного компонента ограничения на входные и выходные параметры, и мог бы предотратить катастрофическое развитие событий. Был приведен и набросок такого контракта:

>convert (horizontal_bias: INTEGER): INTEGER is

>     require

>          horizontal_bias <= Maximum_bias

>               do

>               …

>          ensure

>     …

>end

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

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

При работе над сложными проектами типа Ariane именно контракты могли бы выступать в качестве опорных ориентиров для групп качества «QA Team», чья задача выполнять систематический мониторинг ПО на предмет соответствия требованиям. Авторы с сожалением заключают, что контрактные механизмы никак не получат должного распространения в современной практике. Более того, положение только усугубляется: например, в Java даже исчезла присутствовавшая в языке Cи скромная по возможностям инструкция «assert». В составной части CORBA языке IDL (Interface Definition Language), предназначенном обеспечить полномасштабное повторное использование компонентов в распределенной среде, отсутствует какой-либо механизм спецификации семантики. То же относится и к ActiveX. Авторы заключают: без полной и точной спецификации, основанной на пред- и пост-условиях и инвариантах, «повторное использование программных компонентов совершенное безрассудство».

Эта точка зрения вызвала многочисленные отклики. Хотя полезность использования контрактных механизмов никто не оспаривал, все же взгляд авторов многим показался упрощенным. Наиболее обстоятельный критический разбор их статьи выполнил сотрудник Locheed Martin Tactical AirCraft Systems, известный специалист в области разработки ответственных систем Кен Гарлингтон (Ken Garlington).[5] Он начал с того, что указал на ошибку в приведенном наброске контракта, где предполагается, что BH преобразуется не из вещественного (как то было в реальности) числа, а из целого.

Показательно, пишет Гарлингтон, что он оказался первым, кто обратил внимание на столь очевидный прокол, а ведь статью читали и публично обсуждали многие квалифицированные специалисты. С тем же успехом (а точнее неуспехом) могла пройти мимо этого дефекта и «QA-team». Так что даже точная спецификация сама по себе не панацея. Гарлингтон также подробно разобрал нетривиальные проблемы, возникающие при написании не «наброска», а действительно полной спецификации контракта для данной конкретной ситуации.

Вывод Гарлингтона вполне отвечает здравому смыслу: проблема носит комплексный характер и обусловлена прежде всего объективной сложностью систем типа Ariane. Соответственно, одним лекарством болезнь, приводящая к появлению ошибок в ПО, вылечена быть не может. Хотя то, что процесс мониторинга спецификаций, кода и документов с обоснованием проектных решений при разработке ПО для Ariane 5, оказался неадекватен, отметила и Комиссия по расследованию аварии. В частности, подчеркнуто, что к процессу контроля не привлекались специалисты из организаций, независимых как от заказчика, так и от подрядчика системы, что нарушило принцип разделения исполнительных и контрольных функций.

Большие претензии были предъявлены не только к процессу тестирования как таковому, но и к самой его стратегии. На этапе тестирования и отладки системы было технически возможно в рамках интегрального моделирования процесса полета исследовать все аспекты работы IRS, что позволило бы почти гарантированно выявить ошибку, приведшую к аварии. Однако, вместо этого при моделировании работы всего комплекса IRS рассматривалась как черный ящик, заведомо выдающий то, что ожидается. Почему? А зачем тестировать то, что успешно работало в течение многих лет?!

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

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


Рекомендуем почитать
Ум первобытного человека

Книга известного американского антрополога, лингвиста и естествоиспытателя Франца Боаса содержит его взгляды на историю развития человеческой культуры и умственных способностей человека. Автор опровергает утверждение о существовании даровитых и менее одаренных рас; он показывает, что успехи и достижения различных рас, равно как и различия в их анатомических признаках, не являются доказательством различия их умственных дарований. Боас рассматривает вопрос об устойчивости человеческих типов, исследует влияние окружающей среды и наследственности на анатомическое строение и склад ума человека.


Капиталистическое отчуждение труда и кризис современной цивилизации

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


Тайны продуктов питания

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


Социально-культурные проекты Юргена Хабермаса

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


Вторжение: Взгляд из России. Чехословакия, август 1968

Пражская весна – процесс демократизации общественной и политической жизни в Чехословакии – был с энтузиазмом поддержан большинством населения Чехословацкой социалистической республики. 21 августа этот процесс был прерван вторжением в ЧССР войск пяти стран Варшавского договора – СССР, ГДР, Польши, Румынии и Венгрии. В советских средствах массовой информации вторжение преподносилось как акт «братской помощи» народам Чехословакии, единодушно одобряемый всем советским народом. Чешский журналист Йозеф Паздерка поставил своей целью выяснить, как в действительности воспринимались в СССР события августа 1968-го.


Сандинистская революция в Никарагуа. Предыстория и последствия

Книга посвящена первой успешной вооруженной революции в Латинской Америке после кубинской – Сандинистской революции в Никарагуа, победившей в июле 1979 года.В книге дан краткий очерк истории Никарагуа, подробно описана борьба генерала Аугусто Сандино против американской оккупации в 1927–1933 годах. Анализируется военная и экономическая политика диктатуры клана Сомосы (1936–1979 годы), позволившая ей так долго и эффективно подавлять народное недовольство. Особое внимание уделяется роли США в укреплении режима Сомосы, а также истории Сандинистского фронта национального освобождения (СФНО) – той силы, которая в итоге смогла победоносно завершить революцию.