Надежность программ

Лекция № 12

Это комплексное свойство из двух составляющих:

· безошибочность (correctness) – соответствие спецификации

· устойчивость (robustness), или отказоустойчивость (fault-tolerance) – способность продолжать нормальное функционирование после отказов программ или аппаратуры

Улучшение первого качества достигается хорошей технологией, предупреждающей ошибки (fault-avoidance). Однако 100% отсутствие ошибок недостижимо. Устойчивость должна быть относительно любых видов отказов (см. классификацию отказов ниже). Для ее поддержания создаются специальные программно-аппаратные средства.

 

Понятие отказа в технике

 

Отказ (failure) – по ГОСТу - нарушение работоспособности изделия и его соответствия требованиям технической документации. Применительно к программам (стандарт IEEE /ANSI): отказ – это неспособность функциональной единицы системы, зависящей от программы, выполнять требуемую функцию в заданных пределах.

 

Классификация причин отказов вообще и в HW / SW в частности:

A. Физические дефекты

A1. Внутренние (старение, износ)

A2. Внешние воздействия (радиация, высокая температура, …)

B. Ошибки людей

B1. Ошибки эксплуатации или взаимодействия

B2. Проектные ошибки

(Вопрос 1).

Состоянию отказа обычно предшествует промежуточное – неисправное – состояние (см. рис 12-1). Время нахождения системы в неисправном, но работоспособном состоянии называется латентным (скрытым) периодом отказа.

Рис. 12-1. Диаграмма состояний и переходов при отказе

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

Восстановление (recovery) - этовозврат в исправное состояние путем:

а) ручного ремонта, замены, исправления

б) автоматически - задействованием резервов

в) самопроизвольно (обычно быстро)

 

В случае в) отказ называется сбоем. Т.е., сбой - это кратковременный самовосстанав-ливающийся отказ. Остальные отказы называются устойчивыми (по умолчанию просто отказ – это устойчивый отказ). В электронной аппаратуре сбои происходят на порядок чаще устойчивых. Их причины - флюктуации питания, ситуации "гонок" сигналов, альфа-частицы и др. В программах аналогично сбоям ведут себя время-зависимые ошибки - их называют "мерцающими" (blinking bugs). (Вопрос 2).

Типичный пример восстановления - с помощью резервной (backup) копии данных. Если выполнить восстановление в латентном периоде отказа, то он никогда не проявится вовне - в этом состоит идеальная отказоустойчивость. (Вопрос 3).