- •Е.Л. Кон, м.М. Кулагина надежность и диагностика компонентов инфокоммуникационных и информационно-управляющих систем
- •Оглавление
- •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. Прогнозирование технического состояния узлов
- •Вопросы и задания
- •Список литературы
- •Приложение Интенсивность отказов компонентов иус
- •Кон Ефим Львович, Кулагина Марина Михайловна надежность и диагностика компонентов инфокоммуникационных и информационно-управляющих систем
3.3.3. Принципы тестирования
Сформулируем основные принципы тестирования, используя главную предпосылку настоящего раздела о том, что наиболее важными в тестировании программ являются вопросы психологии. Эти принципы интересны тем, что в основном они интуитивно ясны, но в то же время на них часто не обращают должного внимания.
Тестирование – процесс творческий, т.е. неформализуемый.
Вполне вероятно, что для тестирования большой программы требуется больший творческий потенциал, чем для ее проектирования.
Описание предполагаемых значений выходных данных или результатов должно быть необходимой частью тестового набора.
Нарушение этого очевидного принципа представляет одну из наиболее распространенных ошибок. Ошибочные, но правдоподобные результаты могут быть признаны правильными, если результаты теста не были заранее определены. Здесь мы сталкиваемся с явлением психологии: мы видим то, что мы хотим увидеть. Другими словами, несмотря на то, что тестирование по определению – поиск ошибок, у проводящих его есть подсознательное желание видеть корректный результат. Один из способов борьбы с этим явлением состоит в поощрении детального анализа выходных переменных заранее при разработке теста. Поэтому тест должен включать две компоненты: описание входных данных и описание точного и корректного результата, соответствующего набору входных данных.
Следует избегать тестирования программы ее автором.
Этот принцип следует из предыдущего положения.
В дополнение к этой психологической проблеме следует отметить еще одну, не менее важную: программа может содержать ошибки, связанные с неверным пониманием постановки или описания задачи программистом. Тогда существует вероятность, что к тестированию программист приступит с таким же недопониманием своей задачи.
Тестирование можно уподобить работе корректора или рецензента над статьей или книгой. Многие авторы представляют себе трудности, связанные с редактированием собственной рукописи. Очевидно, что обнаружение недостатков в своей деятельности противоречит человеческой психологии.
Отсюда вовсе не следует, что программист не может тестировать свою программу. Многие программисты с этим вполне успешно справляются. Здесь лишь делается вывод о том, что тестирование является более эффективным, если оно выполняется кем-либо другим. Заметим, что все наши рассуждения не относятся к отладке, т.е. к исправлению уже известных ошибок. Эта работа эффективнее выполняется самим автором программы.
Необходимо досконально изучать результаты применения каждого теста.
По всей вероятности, это наиболее очевидный принцип, но и ему часто не уделяется должное внимание. В экспериментах, проведенных при тестировании программ, многие испытуемые не смогли обнаружить определенные ошибки, хотя их признаки были совершенно явными. Представляется достоверным, что значительная часть всех обнаруженных в конечном итоге ошибок могла быть выявлена в результате самых первых тестовых прогонов, однако они были пропущены вследствие недостаточно тщательного анализа результатов первого тестового прогона.
Тесты для неправильных и непредусмотренных входных данных следует разрабатывать так же тщательно, как для правильных и предусмотренных.
При тестировании программ имеется естественная тенденция концентрировать внимание на правильных и предусмотренных входных условиях, а неправильным и непредусмотренным входным данным не придавать значения. Между тем вполне вероятно, что тесты, представляющие неверные и неправильные входные данные, обладают большей обнаруживающей способностью, чем тесты, соответствующие корректным входным данным.
Необходимо проверять не только, делает ли программа то, для чего она предназначена, но и не делает ли она то, что не должна делать.
Это логически просто вытекает из предыдущего принципа. Необходимо проверить программу на нежелательные побочные эффекты. Например, программа расчета зарплаты, которая производит правильные платежные чеки, окажется неверной, если она произведет лишние чеки для сотрудников предприятия или дважды запишет первую запись в список личного состава.
Не следует выбрасывать тесты.
Эта проблема наиболее часто возникает при использовании интерактивных систем отладки. Обычно сотрудник, проводящий тестирование, сидит за терминалом, на лету придумывает тесты и запускает программу на выполнение. При такой практике работы после применения тесты пропадают. После внесения изменений или исправления ошибок необходимо повторять тестирование, тогда приходится заново изобретать тесты. Как правило, этого стараются избегать, поскольку повторное создание тестов требует значительной работы. В результате повторное тестирование бывает менее тщательным, чем первоначальное, т.е. если модификация затронула функциональную часть программы и при этом была допущена ошибка, то она зачастую может остаться необнаруженной.
Нельзя планировать тестирование в предположении, что ошибки не будут обнаружены.
Такую ошибку обычно допускают руководители проекта, использующие неверное определение тестирования как процесса демонстрации отсутствия ошибок в программе, корректного функционирования программы.
Вероятность наличия необнаруженных ошибок в части программы пропорциональна числу ошибок, уже обнаруженных в этой части.
Этот принцип, не согласующийся с интуитивным представлением, иллюстрируется на рис. 3.5.
Рис. 3.5. Неожиданное соотношение числа оставшихся и числа обнаруженных ошибок
На первый взгляд он лишен смысла, но тем не менее подтверждается многими программами. Например, допустим, что некоторая программа состоит из модулей или подпрограмм АиВ. К определенному сроку в модулеАобнаружено пять ошибок, а в модулеВ– только одна, причем модульАне подвергался более тщательному тестированию. Тогда из рассматриваемого принципа следует, что вероятность необнаруженных ошибок в модулеАбольше, чем в модулеВ. Справедливость этого принципа подтверждается еще и тем, что для ошибок свойственно располагаться в программе в виде неких скоплений, хотя данное явление пока никем еще не объяснено. Преимущество рассматриваемого принципа заключается в том, что он позволяет ввести обратную связь в процесс тестирования. Если в какой-нибудь части программы обнаружено больше ошибок, чем в других, то на ее тестирование должны быть направлены дополнительные усилия.
Чтобы подчеркнуть некоторые мысли, высказанные в настоящем разделе, приведем еще раз три наиболее важных принципа тестирования.
Тестирование – это процесс выполнения программ с целью обнаружения ошибок.
Хорошим считается тест, который имеет высокую вероятность обнаружения еще не выявленной ошибки.
Удачным считается тест, который обнаруживает еще не выявленную ошибку.