- •1.Проблемы создания больших программ.
- •2. Основные понятия
- •3. Состав жизненного цикла по
- •1.Анализ требований
- •4.Стандартизация процессов жизненного цикла программ
- •5. Модели жизненного цикла программного обеспечения.
- •6.Техническое задание на разработку.
- •7.Документирование программ.
- •8.Выбор архитектуры по.
- •9.Структурный и объектный подходы к разработке программ.
- •10. Метод структурного анализа и проектирования sadt (idef0)
- •11. Диаграммы потоков данных dfd.
- •12. Диаграмма сущность – связь erm
- •13. Методы объектно-ориентированного анализа и проектирования. Язык uml.
- •14. Методы разработки структуры программной системы
- •15.Выбор языка программирования. Стиль программирования.
- •16.Защитное программирование.
- •17.Тестирование и отладка
- •18.Типичные ошибки
- •19.Отладка программных продуктов
- •20.Ввод в зксплуатацию
- •21.Ускорение разработки по. Технология rad
- •22. Экстремальное программирование
16.Защитное программирование.
Защитное программирование, или программирование с защитой от ошибок, — это такой стиль написания программ, при котором появляющиеся ошибки легко обнаруживаются и идентифицируются программистом. К сожалению, программисты не всегда пользуются защитным программированием и тогда случается то, что «не может быть никогда». Например, сбой в другом модуле программы может привести к такой ситуации в данном модуле, которая теоретически не должна была случиться.
Существуют три основных принципа защитного программирования.
1.Общее недоверие: для каждого модуля входные данные необходимо тщательно анализировать в предположении, что они могут быть ошибочными.
2.Немедленное обнаружение: каждая ошибка должна быть выявлена как можно раньше, что упрощает установление ее причины.
3.Изолирование ошибки: ошибки в одном модуле должны быть изолированы так, чтобы не допустить их влияние на другие модули.
Рекомендации по защитному программированию
Проверка области значений переменных. Проверки промежуточных результатов позволяют снизить вероятность позднего проявления не только ошибок неверного определения данных, но и некоторых ошибок кодирования и проектирования.
Контроль правдоподобности значений переменных, которые не должны превышать некоторых констант или значений других переменных. Например, если каким-либо образом вычисляется индекс элемента массива, то следует проверить, что этот индекс является допустимым; если строится цикл, количество повторений которого определяется значением переменной, то целесообразно убедиться, что значение этой переменной не отрицательно.
Вычисления следует производить так, чтобы минимизировать накопление погрешностей, для этого необходимо соблюдать следующие рекомендации:
1.избегать вычитания близких чисел (машинный ноль);
2. избегать деления больших чисел на малые;
3.сложение длинной последовательности чисел начинать с меньших по абсолютной величине;
4.стремиться по возможности уменьшать количество операций;
5.использовать методы с известными оценками погрешностей;
6.не использовать условие равенства вещественных чисел;
7.вычисления производить с двойной точностью, а результат выдавать с одинарной.
Контроль итогов вычислений. Компилятор позволяет выполнять автоматические проверки (например, контроль переполнения или потери точности).Однако следует помнить, что любые дополнительные операции в программе требуют использования дополнительных ресурсов (времени, памяти и т. п.) и могут содержать ошибки. Поэтому нужно проверять не все промежуточные результаты, а только те, проверка которых целесообразна, т. е., возможно, позволит обнаружить ошибку, и несложна.
Проверка кодов возврата функций. Для функций следует предусмотреть возвращение специальных значений функций при непредвиденном завершении.
Производите проверки правильности выполнения операций ввода- вывода. Причинами неверного определения исходных данных могут являться как внутренние ошибки — ошибки устройств ввода-вывода, передачи данных или преобразования исходных данных из входного формата во внутренний, так и внешние — ошибки пользователя.
Обработка исключений. Поскольку полный контроль данных на входе и в процессе вычислений, как правило, невозможен, следует предусматривать перехват обработки аварийных ситуаций. Для перехвата и обработки аппаратно и программно фиксируемых ошибок в некоторых языках программирования, например Objekt Pascal, С++ и Java, предусмотрены средства обработки исключений.