Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Коваленко 5 курс.docx
Скачиваний:
2
Добавлен:
20.09.2019
Размер:
198.47 Кб
Скачать

16.Защитное программирование.

Защитное программирование, или программирование с защитой от ошибок, — это такой стиль написания программ, при котором появляющиеся ошибки легко обнаруживаются и идентифицируют­ся программистом. К сожалению, программисты не всегда пользу­ются защитным программированием и тогда случается то, что «не может быть никогда». Например, сбой в другом модуле программы может привести к такой ситуации в данном модуле, которая теоре­тически не должна была случиться.

Существуют три основных принципа защитного программиро­вания.

1.Общее недоверие: для каждого модуля входные данные необ­ходимо тщательно анализировать в предположении, что они могут быть ошибочными.

2.Немедленное обнаружение: каждая ошибка должна быть выявле­на как можно раньше, что упрощает установление ее причины.

3.Изолирование ошибки: ошибки в одном модуле должны быть изолированы так, чтобы не допустить их влияние на другие модули.

Рекомендации по защитному программированию

Проверка области значений переменных. Проверки промежуточных результатов позволяют снизить вероятность позднего проявления не только ошибок неверного определения данных, но и некоторых оши­бок кодирования и проектирования.

Контроль правдоподобности значений переменных, которые не должны превышать некоторых констант или значений других пере­менных. Например, если каким-либо образом вычисляется индекс элемента массива, то следует проверить, что этот индекс является допустимым; если строится цикл, количество повторений которого определяется значением переменной, то целесообразно убедиться, что значение этой переменной не отрицательно.

Вычисления следует производить так, чтобы минимизировать накопление погрешностей, для этого необходимо соблюдать следую­щие рекомендации:

1.избегать вычитания близких чисел (машинный ноль);

2. избегать деления больших чисел на малые;

3.сложение длинной последовательности чисел начинать с мень­ших по абсолютной величине;

4.стремиться по возможности уменьшать количество операций;

5.использовать методы с известными оценками погрешностей;

6.не использовать условие равенства вещественных чисел;

7.вычисления производить с двойной точностью, а результат выдавать с одинарной.

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

Проверка кодов возврата функций. Для функций следует предус­мотреть возвращение специальных значений функций при непред­виденном завершении.

Производите проверки правильности выполнения операций ввода- вывода. Причинами неверного определения исходных данных могут являться как внутренние ошибки — ошибки устройств ввода-выво­да, передачи данных или преобразования исходных данных из вход­ного формата во внутренний, так и внешние — ошибки пользовате­ля.

Обработка исключений. Поскольку полный контроль данных на входе и в процессе вычислений, как правило, невозможен, следует предусматривать перехват обработки аварийных ситуаций. Для пе­рехвата и обработки аппаратно и программно фиксируемых ошибок в некоторых языках программирования, например Objekt Pascal, С++ и Java, предусмотрены средства обработки исключений.