И. Соммервилл - Инженерия программного обеспечения (1133538), страница 93
Текст из файла (страница 93)
Система (критическая по обеспечению безопасности) для управления лечением пациентов, больных раком, имеет две основные составляющие. ° Иэлутатель, который доставляет управляемые дозы излучения к участкам опухоли. Этим устройством управляет автогенная система ПО. ° База данных лечения, которая содержит описание особенностей лечения кажщко пациента, Параметры облучения также введены е зту базу данных и автоматически загружаются в излучатель.
Определите три опасности, жисрые маут вожмвуть в атой системе. Для ккююй опасности укажите меры (и обоснуйте их), которые уменьшат веровтность аиснссти, приводящей к нес истнсму случаю. 17.8, Укажите, как можно изменить анализ дерева отказов для определения требований защищенности. Разработка критических систем Цель настоящей главы — дать обзор методов разработки критических систем.
Прочитав вту главу, вы должны: знать о методах разработки программного обеспсченил, которые помогают избежать сбоев в программной системе; познакомиться с концепцией отказоустойчивости программного обеспечения и с тем, как безо. паевое программирование может повысить ус. тойчивость систем к отказам; выяснить, каковы средства обработки исключительных ситуаций, используемые для реализации отказоустойчивых систем; знать о Х-вариантном программировании и блоках восстановления — двух разных подходах к реализации отказоустойчивых архитектур.
е * 18.1. Минимизация ошибок и сбоев 18.2. Устойчивость к сбоям 185. Отказоустойчивые архитектуры 18.4. Проектирование безопасных систем 362 Часть зт". Критические системы Внедрение в практику современных методов разработки программного обеспечения, использование новых языков программирования и применение управления качеством привели к значительному повышению надежности ПО. Однако для критических систем, таких, как системы автоматического управления, телекоммуникационные системы или системы управления двигателем самолета, необходимы дополнительные меры для достижения высокого уровня надежности. Для таких систем используются специальные методы программирования, гарантирующие безопасность, защищенность и безотказность програмлшых систем.
Существует два дополняющих друг друга подхода, которые используются при разработке надежного программного обеспечения. 1. П)звдвэмраэзвкяв сбоев. В процессе проектирования и реализации используются такие технологии разработки ПО, которые сводят к минимуму ошибки оператора и по. могают находить системные ошибки (прежде чем система будет запущена в эксплуатацию). 2.
Уствйчиввсшь к сбвян. Система проектируется таким образом, чтобы можно было обнаружить н исправить сбои и непредвиденное поведение системы до того, как это приведет к отказу в ее работе. Предотвращение сбоев означает поставку закаэчику программных систем, свободных от ошибок и сбоев. Это можно сделать двумя способами: с помощью методов программирования, которые минимизируют число ошибок, возможных в системе (минимизация ошибок и сбоев); с помощью статических и динамических методов тестирования, которые обнаруживают эти ошибки и позволяют их исправить до начала эксплуатации системы (обнаружение ошибок и сбоев).
В этой главе описаны методы минимизации ошибок н по. вышения отказоустойчивости систем, вопросы тестирования систем и обнаружения оши. бок и сбоев рассматриваются в главах 19 — 21. 18.1. Минимизация ошибок и сбоев Процесс создания надежного программного обеспечения преследует цель разработки йзвжказявзв ПО, т.е. такого, которое точно соответствует спецификации системных требований. Но точное соответствие системы своей спецификации не гарантирует, что ПО всегда будет вести себя так, как ожидается пользователями. В спецификации могут быль ошибки, которые отразятся в программном обеспечении, либо пользователи могут неверно истолковывать или неправильно эксплуатировать систему. Безотказное ПО не обязательно гарантирует отсугствие отказов в работе системы. Но, с другой стороны, минимизация ошибок программного обеспечения значительно уменьшает число отказов системы и должна выполняться при разработке критических систем.
Существует ряд требований к разработке безотказного программного обеспечения. 1. Должна быть точная (предпочтнтельно формальная) спецификация системных требований, определлющая разрабатываемую систему. 2. Организация — разработчик ПО должна иметь высокую культуру управления качеством. поскольку качество является главным в процессе создания критических систем. В идеале предполагается, что программисты создают программы, в которых отсугствуют ошибки. 18. Разработка критических систем Збб 3. Методы проектирования и реализации ПО должны основываться на сокрытии и инкапсуляции информации.
Объектноориентированные языки, такие как 1ата, удовлетворяют этому условию. 4. В процессе реализации программного кода должны использоваться языки про. граммирования со строгим контролем типов данных, например1ача или Лс)а. В таких языках многие ошибки программирования будут обнаружены на этапе компилирования программ. 5. Везде, где возможно, следует избегать использования тех программных констру«- ций, которые потенциально могут привести к ошибкам. Такие конструкции обсуждаются в следующем разделе. 6.
Должна быть определена четкая технология разработки ПО, и разработчики должны быть обучены применению этой технологии. Менеджеры, отвечающие за качество, должны пронерять процесс разработки. Если при разработке программ использовались языки программировании низкого уровня с ограниченным контролем типов данных, такие как С, то достигнуть безотказно. сти программного обеспечения очень трудно. Нв это имеются следующие причины. 1.
Зти языки включают конструкции (такие, как указатели), которые, как известно из опыта, приводят к ошибкам. Независимо от того, сколько программист затратит усилий, в программе возможны ошибки, которые очень трудно обнаружить. 2. Природа этих языков такова, что они ведут к компактному стилю программирования. Это делает программы более трудными для чтения и понимания, что усложняет поиск ошибок по тексту программ. Конечно, преимущество использования языков низкого уровня в том, что их конструкции менее абстракты, и поэтольу есть возможность написать весьма эффективные программы. В некоторых случаях высокая эффективность существенна и не может быть достигнута другим способом.
Но, если требуется высокий уровень функциональной надежности ПО, придется приложить больше усилий для тестирования системы и обвар)жения ошибок. Много Мено Очень мало Количество оствточних ошибок 1чсс. 18, 1. Вшрнстяяис стоимоснси обкнружпсия тииБок 364 Часть |У. Критические системы Я убежден, что современные методы разработки ПО позволяют создавать безотказное программное обеспечение, но экономически не выгодны. Чрезвычайно трудно и дорого достичь этой цели. Стоимость обнаружения и удаления программных ошибок растет экс. поненциэльно (рис.
18.1). Поэтому организации-разработчики явно или неявно понимают, что их программное обеспечение будет содержать некоторые "остаточные" ошибки. Количество ошибок также зависит от типа систем. Разумное объяснение наличия ошибок в системе заключается в том, что обычно дешевле устранить последствия отказа системы, чем выявить и устранить все ошибки в системе до начала ее эксплуатации. Зто распространенная позиция поставщиков программных продуктов для персональных компьютеров.
Однако, как указывалось в главе 16, решение о выпуске программного продукта с ошибками основывается не просто на экономических соображениях — необходимо принять во внимание социальную и политическую приемлемость последствиИ отказа системьс 18.1.1. Предотвращение ошибок Ошибки в программах и, как следствие, сбои в работе систем часто являются результа. том ошибок человека. Программисты делают ошибки, потому что теряют связь между взаимоотношениями переменных состояний, Они пишут программы, которые приводят к непредвиденному поведению и непредвиденному изменению состояний системы. Люди будут ошибаться всегда, но, как стало ясно в конце 1960-х, некоторые подходы к программированию более подвержены ошибкам по сравнению с остэлы<ыми.