
- •Е.Л. Кон, м.М. Кулагина надежность и диагностика компонентов инфокоммуникационных и информационно-управляющих систем
- •Оглавление
- •1. Основные теоретические сведения 9
- •2. Надежность аппаратурного обеспечения 31
- •3. Создание надежного программного обеспечения 130
- •4. Диагностика состояния сложных технических систем 205
- •Введение
- •1. Основные теоретические сведения
- •1.1. Информационно-управляющие и инфокоммуникационные системы
- •1.2. Основные определения теории надежности
- •1.2.1. Надежность и ее частные стороны
- •1.2.2. Виды надежности
- •1.2.3. Отказы
- •1.2.4. Эффективность
- •1.2.5. Восстановление
- •1.3. Понятие случайных событий и случайных величин
- •1.3.1. Надежность систем при основном (последовательном) и параллельном соединении элементов
- •1.3.2. Основное соединение элементов
- •1.3.3. Параллельное соединение элементов
- •1.4. Элементы теории нечетких множеств
- •1.4.1. Понятие принадлежности и основные операции для четких подмножеств
- •1.4.2. Понятие принадлежности и основные операции для нечетких подмножеств
- •1.4.3. Отношение доминирования
- •1.4.4. Простейшие операции над нечеткими множествами
- •1.4.5. Расстояние Хэмминга
- •Вопросы и задания
- •Список литературы
- •2. Надежность аппаратурного обеспечения
- •2.1. Надежность невосстанавливаемых систем без резервирования
- •2.1.1. Показатели надежности невосстанавливаемых объектов
- •2.1.2. Законы распределения случайных величин, используемые в теории надежности
- •Показательное (экспоненциальное) распределение
- •Усеченное нормальное распределение
- •Распределение Вейбулла
- •Гамма-распределение
- •Практическая область применения законов распределения времени безотказной работы
- •2.1.3. Использованиеи-характеристик для решения практических задач
- •2.1.4. Особенности расчета надежности при проектировании различных систем
- •2.1.5. Расчет надежности по блок-схеме системы
- •2.1.6. Расчет надежности при подборе элементов системы
- •2.1.7. Расчет надежности системы с учетом режимов работы элементов
- •2.1.8. Учет цикличности работы аппаратуры
- •2.2. Надежность невосстанавливаемых систем с резервированием
- •2.2.1. Пути повышения надежности
- •2.2.2. Методы резервирования
- •2.2.3. Расчет надежности сложных систем при постоянно включенном резерве
- •2.2.4. Расчет надежности системы при резервировании замещением
- •2.2.5. Резервирование замещением в случае нагруженного резерва
- •2.2.6. Резервирование замещением в случае облегченного резерва
- •2.2.7. Резервирование замещением в случае ненагруженного резерва
- •2.2.8. Расчет надежности систем с функциональным резервированием
- •2.3. Расчет надежности восстанавливаемых систем
- •2.3.1. Критерий надежности систем с восстановлением
- •Характеристики потока отказов
- •Характеристики потока восстановления
- •Комплексные характеристики надежности систем с восстановлением
- •2.3.2. Расчет надежности по графу работоспособности объекта
- •2.3.3. Определение среднего времени наработки на отказ системы с восстановлением
- •2.3.4. Расчет надежности систем с восстановлением при основном (последовательном) и параллельном соединении элементов
- •2.3.5. Расчет надежности сложных инфокоммуникационных систем
- •Структура и функции стс
- •Определение надежностных характеристик блоков стс
- •Составление структурно-логической схемы надежности и графа состояний
- •2.3.5.4. Расчет коэффициента готовности стс
- •Определение надежностных характеристик блоков аиис
- •Составление структурно-логической схемы надежности и графа переходов
- •Расчет коэффициента готовности аиис «Алтайэнерго»
- •Расчет коэффициента готовности аиис
- •2.4. Расчет надежности восстанавливаемых систем при наличии системы контроля
- •2.4.1. Система встроенного контроля абсолютно надежна
- •2.4.2. Система встроенного контроля самопроверяемая, и ее отказ обнаруживается сразу же
- •2.4.3. Система встроенного самоконтроля несамопроверяемая
- •2.5. Расчет надежности в условиях нечетко заданных исходных данных
- •2.5.1. Выбор оптимального варианта для невосстанавливаемых систем
- •2.5.2. Выбор оптимального варианта для восстанавливаемых систем
- •2.6. Расчет надежности систем на этапе эксплуатации
- •2.6.1. Планирование и расчет периодов профилактик
- •2.6.2. Планирование и расчет числа запасных изделий
- •Вопросы и задания
- •Список литературы
- •3. Создание надежного программного обеспечения
- •3.1. Надежность программного обеспечения
- •3.1.1. Ошибки в по и их типы
- •Типы ошибок в программном обеспечении
- •3.1.2. Причины появления ошибок в программном обеспечении
- •3.1.3. Отношения с пользователем (заказчиком)
- •3.1.4. Принципы и методы обеспечения надежности
- •3.1.5. Последовательность выполнения процессов разработки программного обеспечения
- •3.1.6. Сравнение надежности аппаратуры и программного обеспечения
- •3.2. Основные этапы проектирования программного обеспечения
- •3.2.1. Правильность проектирования и планирование изменений
- •3.2.2. Требования к по
- •3.2.3. Цели программного обеспечения
- •Цели продукта
- •Цели проекта
- •Общие правила постановки целей
- •Оценка целей
- •3.2.4. Внешнее проектирование
- •Проектирование взаимодействия с пользователем
- •Подготовка внешних спецификаций
- •Проверка правильности внешних спецификаций
- •3.2.5. Проектирование архитектуры программы
- •Независимость модулей
- •Прочность модулей
- •Сцепление модулей
- •3.2.6. Методы непосредственного повышения надежности модулей
- •Пассивное обнаружение ошибок
- •Активное обнаружение ошибок
- •Исправление ошибок и устойчивость к ошибкам
- •Изоляция ошибок
- •Обработка сбоев аппаратуры
- •3.2.7. Проектирование и программирование модуля
- •Внешнее проектирование модуля
- •Проектирование логики модуля
- •Пошаговая детализация
- •3.2.8. Стиль программирования
- •Ясность программирования
- •Использование языка
- •Микроэффективность
- •Комментарии
- •Определения данных
- •Структура модуля
- •3.3. Тестирование и верификация программ
- •3.3.1. Проблемы тестирования программ
- •3.3.2. Технологии тестирования программ
- •3.3.3. Принципы тестирования
- •3.4. Модели надежности по
- •3.4.1. Модель роста надежности
- •3.4.2. Другие вероятностные модели
- •3.4.3. Статистическая модель Миллса
- •3.4.4. Простые интуитивные модели
- •3.4.5. Объединение показателей надежности
- •Вопросы и задания
- •Список литературы
- •4. Диагностика состояния сложных технических систем
- •4.1. Предмет, задачи и модели технической диагностики
- •4.1.1. Предмет технической диагностики
- •4.1.2. Основные аспекты, задачи и модели технической диагностики
- •4.1.3. Классификация диагностических процедур и их краткая характеристика
- •4.2. Построение тестов
- •4.2.1. Построение тестового набора методом активизации существенного пути
- •4.2.2. Алгоритм построения тестового набора для комбинационной схемы методом активизации существенного пути
- •4.2.3. Построение тестов для схем с памятью
- •Комбинационная модель последовательностной схемы
- •Построение тестовой последовательности по комбинационной модели последовательностной схемы
- •4.3. Функциональный контроль и диагностирование сложных технических систем
- •4.3.1. Полностью самопроверяемые цифровые устройства
- •4.3.2. Схемы встроенного контроля
- •4.3.3. Схемы сжатия
- •4.3.4. Микропроцессор как объект функционального контроля
- •4.3.5. Модель мп с точки зрения функционального контроля
- •4.3.6. Диагностическая модель уу мп системы
- •4.3.7. Критерии оценки методов контроля механизмов выборки, хранения и дешифрации команд
- •4.3.8. Встроенный функциональный контроль механизмов хранения и дешифрации команд
- •Методы пошагового контроля правильности хода программ
- •Методы контроля, реализующие раскраску команд
- •Метод контроля, использующий раскраску без учета структуры команд
- •Преобразованная программа приведена ниже:
- •Цвет Четность Цвет гса
- •Метод контроля команд, реализующий раскраску с учетом структуры команды
- •Раскраска без внесения в команду избыточных разрядов
- •Методы контроля механизмов дешифрации и хранения команд с помощью веса перехода
- •Метод контроля с помощью алгебраических кодов
- •Методы блокового контроля правильности хода программ
- •Блоковый контроль программ по методу разбиения программы на фазы (блоки)
- •Блоковый контроль правильности хода программ с помощью сигнатур
- •Метод контроля программ на основе полиноминальной интерпретации схем алгоритмов (программ)
- •Сравнительный анализ свк, реализующих методы блокового и пошагового контроля
- •4.4. Экспертные системы диагностирования сложных технических систем
- •4.4.1. Обучение и его модели. Самообучение
- •4.4.2. Экспертные системы и принципы их построения
- •4.4.3. Проблема разделения в самообучаемых экспертных системах
- •4.4.4. Алгоритмы обучения экспертных систем
- •Частота события находится по следующей формуле:
- •4.4.5. Асу «интеллектуальным зданием»
- •4.4.6. Система, принимающая решения по максимальной вероятности
- •4.4.7. Система, принимающая решения по наименьшему расстоянию
- •4.4.8. Повышение достоверности решений экспертной системы
- •4.4.9. Прогнозирование технического состояния узлов
- •Вопросы и задания
- •Список литературы
- •Приложение Интенсивность отказов компонентов иус
- •Кон Ефим Львович, Кулагина Марина Михайловна надежность и диагностика компонентов инфокоммуникационных и информационно-управляющих систем
Проектирование взаимодействия с пользователем
При проектировании внешних сопряжений программной системы разработчик интересуется тремя областями, имеющими отношение к надежности программного обеспечения:
– минимизацией ошибок пользователя;
– обнаружением ошибок пользователя, когда они все же возникают;
– минимизацией сложности.
Ошибки пользователя увеличивают вероятность перехода системы в непредвиденное состояние. Минимизация ошибок пользователя не уменьшает числа ошибок в программном обеспечении, но увеличивает его надежность за счет уменьшения вероятности обнаружения оставшихся ошибок. Основные правила минимизации ошибок пользователя в диалоговых системах:
1. Согласовывайте способ взаимодействия с подготовкой и уровнем пользователя, а также с ограничениями, в условиях которых пользователь работает. Например, можно ожидать, что взаимодействие с пользователем банковской системы должно существенно различаться в зависимости от того, является ли пользователь клиентом банка или опытным кассиром.
2. Проектируйте таким образом, чтобы сообщения, вводимые пользователем, были как можно короче, но не настолько, чтобы исчезла их осмысленность. При этом учитывайте частоту работы с системой для среднего пользователя (часто или изредка), а также возможность стрессовой ситуации для пользователя в момент его работы с системой.
3. Обеспечивайте концептуальную целостность для разных типов вводимых и выводимых сообщений. Например, все сообщения должны иметь одинаковые форматы, стиль, сокращения.
4. Обеспечивайте развитые средства помощи.
5. Старайтесь, чтобы система «не рассердила» пользователя, поскольку это может привести к некоторым неожиданным ситуациям на входе. Избегайте оскорбительных сообщений системы, общайтесь с пользователем на его языке, а не на жаргоне программистов.
6. Всегда на каждое входное сообщение выдавайте какое-нибудь уведомление (кроме тех случаев, когда реакция системы сама является уведомлением). Без этого пользователь может засомневаться, правильно ли сообщение было введено, и попытается повторить ввод, вследствие чего может возникнуть ошибочная ситуация.
Помимо минимизации ошибок пользователя система должна также надлежащим образом обращаться с ошибками, если они все-таки возникают – а возникать они будут независимо от того, насколько хорошо были спроектированы правила взаимодействия. Например, операторы Московской системы диспетчеризации такси в свободное время развлекались тем, что пытались вывести систему из строя, подавая заведомо неправильные сообщения.
Основные правила обнаружения ошибок пользователя:
1. Спроектируйте систему так, чтобы она принимала любые данные. Если введенная информация не является тем, что системы считает допустимым, она должна информировать пользователя.
2. Если пользователь вводит сложное сообщение, особенно если для этого нужно несколько обращений к системе, позвольте ему проверить это сообщение, прежде чем оно начнет обрабатываться.
3. Проектируйте систему так, чтобы ошибки пользователя обнаруживались немедленно. Если пользователь вводит вероятность ошибки на символ, не прописанную в лабораторной работе, лучше сразу указать ему на это обстоятельство, чем выполнить расчеты, ошибочность которых обнаружится только при оформлении отчета.
4. Там, где особенно важна аккуратность, обеспечьте избыточность входных данных: например, самопроверяемые счета в банковских системах.
Непосредственное отношение к надежности имеет еще одна задача – минимизация сложности внешнего проекта с целью уменьшения внутренней сложности будущей системы и минимизации ошибок пользователей. Распространено представление, что «гуманизированный» внешний проект должен быть сложным. Это представление ошибочно.
Вопрос, который всегда возникает при внешнем проектировании диалоговой системы, – подсказывать ли пользователю, в какой части входного сообщения содержится ошибка. Предположим, что студент задал вероятность ошибки на символ, равную 10–4, при кратности исправляемой ошибки 2.
Система обнаруживает ошибку: указанная вероятность ошибки на символ не предполагает работы с кодами, исправляющими двукратную ошибку. Следует ли системе сообщать студенту, что он ошибся при введении вероятности ошибки на символ и просить его исправить именно эту величину? Но студент мог ошибиться не здесь, а при вводе кратности исправляемой ошибки. Возникает ситуация, заводящая пользователя в тупик. Вывод – неправильные запросы надо вводить заново целиком. Проще всего записывать их в буфере и предоставлять пользователю для исправления текст через буфер.
Вторая проблема, связанная со сложностью системы, – представление пользователю слишком большого числа дополнительных возможностей и вариантов. В операционной системе OS/360 имелся процесс настройки, называемый «генерация системы», позволяющий перекраивать систему при ее настройке. Это привело к тому, что почти каждая установка OS/360 способствовала появлению очередной уникальной операционной системы, и неудивительно, что возникли проблемы с ее сопровождением.
До широкого распространения Delphi и С++ для научных и инженерных вычислений использовался язык ПЛ/1. Он содержал такой широкий набор синтаксических конструкций и встроенных функций, что, вероятно, не существует ни одного компилятора, поддерживающего все возможности этого языка. Простое перечисление всех вариантов вызова компилятора занимало две страницы руководства для пользователей. В результате неопытный пользователь долго и мучительно пытался сообразить, как же откомпилировать его маленькую простейшую учебную программу. Вообще говоря, обилие дополнительных возможностей неблагоприятно сказывается на работе пользователя, подталкивая его к выбору по принципу «скорее всего, так» и приводя к последствиям неправильного выбора. Разработчик должен тщательно рассмотреть каждую предоставляемую возможность, сопоставляя ее полезность и степень усложнения ПО. Когда имеются сомнения, безопаснее отказаться от рассматриваемого варианта. Множество доступных мелких возможностей не повысит конкурентоспособности продукта, а скорее всего, негативно повлияет на потенциального покупателя, показывая, что разработчик не имеет ясного представления о том, как именно его система будет использоваться.
Таким образом, для обеспечения надежности при разработке взаимодействия с пользователем необходимо обеспечить его единообразие и простоту, ожидать на входе всего, немедленно обнаруживать как можно больше ошибок и не пытаться их исправлять, а предоставить этот тонкий вопрос на рассмотрение пользователю.