Защитное программирование - это способ обезопасить себя от неверных входных данных и ошибок программистов.
Для того чтобы защитить программу от неправильных входных данных нужно:
Для поиска программистских ошибок используются утверждения(assertions). Они помогают выявить случаи неправильного использования кода другими программистами. Утверждения должны проверять условия, которые всегда соблюдаются при правильном использовании метода, например:
Если требуется большая надёжность, то следует кроме утверждений также обрабатывать возможные ошибки.
Когда мы обнаруживаем ошибку нашим обработчиком ошибок у нас есть несколько вариантов, как поступить с неверным значением:
Исключения - подходящий способ передать в вызывающий код возникшие ошибки и исключительные ситуации.
Использование исключений:
Все данные приходящие от внешних источников сначала верифицируются специальными классами, а уже затем чистые данные отправляются во внутренние слои программы. Это позволяет избежать излишних проверок во внутренних классах.
Ещё был раздел про отладку, но он не особо актуален в современных языках.
После разработки, в промышленной версии нужно
Для того чтобы защитить программу от неправильных входных данных нужно:
- Проверять все данные из внешних источников
- Проверять все входные параметры метода
- Решить, как обрабатывать неверные входные данные
Для поиска программистских ошибок используются утверждения(assertions). Они помогают выявить случаи неправильного использования кода другими программистами. Утверждения должны проверять условия, которые всегда соблюдаются при правильном использовании метода, например:
- Значение входного параметра попадает в ожидаемый интервал
- Файл или поток открыт, когда метод начинает выполняться
- Указатель файла или потока находится в начале, когда метод начинает выполняться
- Файл открыт только для чтения, только для записи или для чтения и записи
- Значение входной переменной не меняется в методе
- Указатель нулевой
- Результаты работы сложного, хорошо оптимизированного метода совпадают с результатами метода более простого, но медленного метода
Если требуется большая надёжность, то следует кроме утверждений также обрабатывать возможные ошибки.
Когда мы обнаруживаем ошибку нашим обработчиком ошибок у нас есть несколько вариантов, как поступить с неверным значением:
- Вернуть нейтральное значение
- Заменить следующим корректным блоком данных
- Вернуть тот же результат, что и в предыдущий раз
- Подставить ближайшее допустимое значение
- Записать ошибку в лог
- Вернуть код ошибки
- Вызвать специальный обработчик ошибок
- Показать сообщение об ошибке пользователю
- Обработать ошибку в месте возникновения наиболее подходящим способом
- Прекратить выполнение
Исключения - подходящий способ передать в вызывающий код возникшие ошибки и исключительные ситуации.
Использование исключений:
- Для оповещения других частей программы об ошибках, которые нельзя игнорировать
- Во время исключительных ситуаций, которые никогда не должны происходить
- Не нужно использовать по мелочам
- Нужно генерировать на правильном уровне абстракции
- Они должны содержать как можно больше информации о причине ошибки
- Нужно избегать пустых блоков catch
- Перед использованием библиотеки нужно узнать, какие исключения она генерирует
- Использование исключений нужно стандартизировать во всём проекте
Все данные приходящие от внешних источников сначала верифицируются специальными классами, а уже затем чистые данные отправляются во внутренние слои программы. Это позволяет избежать излишних проверок во внутренних классах.
Ещё был раздел про отладку, но он не особо актуален в современных языках.
После разработки, в промышленной версии нужно
- Оставить код, который проверяет существенные ошибки
- Удалить код, проверяющий незначительные ошибки
- Удалить код, приводящий к прекращению работы
- Оставить код, позволяющий аккуратно завершить работу программы
- Регистрировать все ошибки
- Убедиться, что оставшиеся сообщения об ошибках дружелюбны
Комментариев нет:
Отправить комментарий