И. Соммервилл - Инженерия программного обеспечения (1133538), страница 86
Текст из файла (страница 86)
Водитель из Сиэтла б>дет считать, что система не лвляется безотказной, в то врсмл как водитель нз Лас.Вегаса вообще никогда не столкнется с этой проблемой. В определении работоспособности и безотказности системы не рассматривается тяжесть и последствия отказов системы. Людлм особенно небезразличны отказы, которые имеют серьезные последствия; от этого зависит восприятие безотказности системы.
На. пример, работа автомобильного двигателя. который дает сбои сразу после запуска, а затем посяе перезапуска работает исправно, раздражает. Но это не затрагивает нормального режима эксплуатации автомобиля. Считается, что система ведет себя надежно. сели ее работа соответствует заданному алгоритму. Однако возможны ситуации, когда работа системы не совсем соответствует ожнданнлм пользователей. К сожалению, снстемныс требования часто бывают или неполны или некорректны. Разработчики в таких случаях должны сами решать, как будет весги себя система, но, не всегда являясь специалистами в конкретной области применения системы, они не мо~уг учесть все факторы и запрограммировать такое поведение системы, которое необходимо пользователю. Как показывает опыт, наиболее важными составляющими функциональной надежности лвллются безотказность и работоспособность.
Если же система ненадежна, то трудно гарантировать ее безопасность или защищенность. Ненадежность системы влечет за со. бой большие материальные потери, такис системы приобретают репутацию некачествен. ных и в дальнейшем теряют доверие потребителей. Безотказность системы определлстся отсутствием сбоев. Отказы системы могут происходить нз-за плохого или неправильного се обслуживания, могут быть следствием ошибок в алгоритме, а могут быть вызваны неисправностями систем связи. Однако во многих случаях причиной ошибочного поведения системы являются дефекты в самой системе. При рассмотрении безотказности полезно понимать различие в терминах сбой, о~кийко и отказ, которые определены в табл. 16.1. 16.
Надежность систем 336 Сбои не обязательно приводят к отказам системы, поскольку они могут быть кратковременными и система может прийти к нормальному функционированию раньше, чем произойдет отказ. Системные ошибки также не обязательно приводят к отказам системы, так как системы имеют защиту, гарантирующую, что ошибочный режим будет обнаружен и исправлен. Терминология, приведенная в табл. 16.1, помогает понять три дополняющих друг друга подхода, используемых для повышения безотказности систем.
1. Предоимрщиеиие ахово. Подход к разработке ПО, минимизирующий возможность появления ошибок и/или обнаруживающий ошибки прежде, чем онн приведут к сбоям системы. Пример такого подхода — исключение подверженных ошибкам апре деленных конструкций языков программирования (например, указателей) и посто. янный анализ программ для обнаружения различных аномалий программного кода (см. главу 19).
2. Обнаружение ошибок и ил уплраиение. Использование разнообразных методов провер. ки системы в различных режимах позволяет обнаружить ошибки и устранить их до ввода системы в эксплуатацию. Регулярное тестирование системы и ее отладка— пример данного подхода. 3. Уееомчквостиь к сбоям. Испольэонаиие специальных методов, гарантирующих, что ошибки в системе не приведут к сбоям и что сбои не приведут к отказам системы. Пример такого подхода — применение средств самовосстановления системы с использованием дублирования модулей. Разработка систем, устойчивых к сбоям, описана в главе 18, где также кратко обсуждаются некоторые методы предотвращения сбоев.
Методы разработки ПО, предотвращаю. щие сбои, приведены в главе 24. Вопросы обнаружения системных ошибок обсуждаются в главах 19 и 20. Входиыв двииые, ориводвщие к ошибочным выходным данным выхшшые двииые Рис.16.5. Гфоерпммнпя емсомпа как отобрплееяие входных дпнных яа миожепиво виходных данных 336 'Часть 1У. Критические системы Программный сбой приводит к отказу системы, когда "сбойный" программный код выполняется над определенными входными данными, приводящими к сбою системы. При этом программа может корректно работать на других входных данных.
На рис. 16.5, заимствованным из работы [22 Ц, программная система представлена как отображение множе. ства входных данных (входов) на множество выходных данных (выходов). Программа обрабатывает входные данные, получая выходные данные. Некоторые нз входных данных (см. рис. 16.5) приводят к отказам системы, в результате программа генерирует ошибочные выходные данные, Безотказность программного обеспечения характеризуется вероятностью, с которой при выполнении программы среди множества входных данных встретятся такие, что приведут к ошибочным результатам вычислений. Существует сложная взаимосвязь между наблюдаемой безотказностью системы и количеством скрытых программных дефектов.
В работе (239( подчеркивается, что не все программные ошибки в равной степени вызывают отказ системы. Обычно в множестве входных данных 1,. приводящих к ошибочным выходным данным, имеется ряд данных, вероятность выбора которых больше, чем у других данных. Если эти входные данные не требуют для своей обработки той части ПО, которая содержит ошибки, то системных сбоев не будет. Таким образом. безотказность системы зависит преимущественно от количества входных данных, приводящих к ошибочным результатам во время нормальной эксплуатации системы.
Сбои системы, которые проявляются только в исключительных си. туациях, мало влияют на ее надежность. Надежность системы связана с вероятностью ошибки, проявляющейся во время эксплуатации системы. Устранение программных ошибок в редко используемых системных модулях мало повлияет на повышение безотказности системы. В работе [239) показано, что устранение 60% программных ошибок только на 3% повысит безотказность системы. Это подтверждается и исследованиями ошибок в программных прод)потах 1ВМ. В работе (4) показано, что многие ошибки в программных продуктах реально вызывают сбои системы после сотен или тысяч месяцев эксплуатации.
Следовательно, программа может содержать ошибки и все же вызывать доверие пользователей. Сбои программы никогда не будут возникать, если не выбирать входных данных, ведущих к сбоям. Кроме того, опытные пользователи часто работают, зная об ошибках программного обеспечения, вызывающих сбои системы, и умело избегают их. Устранение ошибок в таких случаях подаст практически никакого повышения надежности. Рис, 16.6. Исповыовпнив мкозгеопвп входных донных Розкмчк повыовп~~влмк 16.
Надежность систем 337 Каждый пользователь системы пошвоему избегает "встречи" с системными ошибками. Ошибки, с которыми встречается один пользователь, могут никогда не встретиться другому. На рис. 1б.б показано множество входных данных, используемых разными пользователями.
Входные данные, выбранные пользователем 2 пересекаются с входными данными, приводящими к сбою системы. Поэтому пользователь 2 будет сталкиваться со сбоями системы. Пользователи 1 и 3 никогда не используют входных данных, приводящих к сбою системы, -для них программное обеспечение всегда будет безотказно. 16.3. Безопасность Безопасность системы — это свойство, отражающее способность системы функционировать, не угрожая людям или окружающей среде. Там, где безопасность является необхо. димым атрибутом системы, говорят о системе, критической по обеспечению безопасно.
сти. Примерами могут служить контролирующие и управляющие системы в авиации, системы управления процессами на химических и фармацевтических заводах и системы управления автомобилями. Управление систем, критических по обеспечению безопасности. гораздо проще орзънизовать с помощью аппаратных средств, чем ПО. Однако сейчас строятся системы такой сложности, что управление не может осущесгвлзпъся только аппаратными средсгвами. Из-за необходимости управлять большим числом сенсоров и исполнительных механизмов со сложными законами управления требуетсл управляющее программное обеспечение. В каче.
стае примера можно привести сисгемы управление военными самолетами. Они требуют по. стоянного программного управления самолетом, гарантирующего безопасносп полета. Программное обеспечение рассматриваемых в этом разделе систем подразделяется на лва класса. 1. ПеРвичпае пРазРамииае ааеапечеиие, кРитичеигае па кРивмрию йзагиииаети. Это ПО включается в систему в виде отдельного блок управления. Неправильная работа такого ПО может быть причиной отказа оборудования, вследствие которого может возникнуть угроза жизни человека или нанесения вреда окружающей среде. Я особо обращаю внимание на этот класс программного обеспечения. 2.
Вторичпае празукзмияае абеепечение, кризпичеекае па критеузию безапаошезпи. Это ПО косвенным образом может привести к непредвиденным последствиям. Примерами могут служить автоматизированные системы в технике, неправильная работа которых может привести к ошибкам в работе объекта и поставить под угрозу жизнь людей. Другой пример такого ПΠ— медицинская база данных, содержащая описание лекарств, предназначенных пациентам. Ошибки в этой системе мозут привести к неправильнойдоэнровке препаратов. Безотказность и безопасность системы в взаимосвязанные, но,очевидно, рэзличные составляющие функциональной надежности. Конечно, система.
критическал по обеспе. чению безопасности, должна соответствовать своему назначению и функционировать без отказов. Для обеспечения непрерывного функционирования даже в случае ошибок она должна иметь защиту от сбоев. Однако отказоустойчивость не гарантирует безопасности системы. Программное обеспечение может только один раз сработать неправильно, и вто приведет к несчастным случаям. Нельзя быть иа сто процентов уверенным, что системное программное обеспечение безопасно и отказоустойчиво. Безотказность ПО не гарантирует его безопасность по ряду причин. 338 тйасть |У. Критические системы 1.