Защитное программирование. Как правильно использовать утверждения

Категория: Культура кода Автор: Александр Никитин Опубликовано: 04-03-2010

Метки:

Сегодня поговорим об использовании утверждений. Утверждения (assertion) – это код (метод или макрос), с помощью которого проверяется правильность заданного условия. Обычно утверждение использует два аргумента – логическое выражение для проверки и сообщение, которое должно выводиться пользователю в случае ошибки.

Вот пример утверждения на языке Java:

assert value != 0 : "value is equal to 0";

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

Общие принципы использования утверждений

Для ожидаемых событий используйте собственные процедуры обработки ошибок. Утверждения применяйте для событий, которые никогда не должны произойти.

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

Отработка предусмотренного обработчика – это штатная ситуация. Отработка утверждения – признак неверной работы программы и необходимости внесения изменений в её исходный код.

Не помещайте исполняемый код в утверждения.

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

Используйте утверждения для проверки предусловий и постусловий условий.

Предусловия – это набор требований, которые должны выполняться до вызова метода/создания экземпляра класса и т.п.

Постусловия – это набор требований, которые должны выполняться после отработки метода.

Утверждениями удобно документировать пред- и постусловия. Но стоит помнить, что проверке подлежат данные, которые поступают из внутреннего кода, а не из внешних источников. Для обработки некорректного внешнего ввода должны быть предусмотрены отдельные функции. Когда же корректность проверяется у параметров, поступивших от доверенного внутреннего источника, следует использовать утверждения.

Комментарии:

Оставить комментарий!