100 Проектирование и программирование модуля
проблему, в начале каждого модуля помещаются проверки входных данных
на соответствие их свойств атрибутам и диапазонам изменения, на полноту и
осмысленность. При выборе надлежащих проверок важно по тексту програм-
мы модуля выявить все предположения, которые в нем сделаны относитель-
но входных данных, а затем рассмотреть возможность проверки соответствия
входных данных этим предположениям всякий раз, когда модуль вызывается.
Защитное программирование требует разумного подхода, ибо, доведен-
ное до крайности, оно повлечет нежелательные эффекты. Если над входными
данными выполнять все мыслимые проверки, защищающая часть програм-
мы может стать настолько сложной (и потому чреватой ошибками), что ее
влияние на надежность (а также на эффективность) будет не позитивным, а
негативным. Чтобы решить, сколько защитных проверок оправдано, сначала
изучите по логике модуля все предположения о входных данных, которые
в нем сделаны, и составьте список всех проверок, которые можно было бы
сделать. Для каждой из них оцените ее сложность, вероятность того, что
входные данные могут быть ошибочными, и последствия отсутствия провер-
ки. После этого остается принять трудное компромиссное решение по опре-
делению того минимума защитной части программы, который обеспечивает
максимально возможный уровень обнаружения ошибок.
6.5. Стандарты
Проблема стандартов — еще одно больное место у программистов. Име-
ется подозрение, что стандарты сдерживают творчество. В действительно-
сти эффект хорошо выбранных стандартов прямо противоположен; они дают
правила для принятия решений по многим рутинным вопросам, неизбежным
при работе над проектом, так что творческие способности программиста мо-
гут быть направлены на важные вопросы (на решение задачи). Стандарты
положительно влияют также и на надежность, так как гарантируют едино-
образие подхода к определенным аспектам программистской деятельности,
предупреждая таким образом несогласованность между программистами.
Никакие стандарты в программировании не должны рассматриваться
как абсолютные правила, которые ни в коем случае нельзя нарушить. Цель
стандартов — установить основные правила для определенных аспектов де-
ятельности, чтобы все предлагаемые отклонения от них можно было пуб-
лично рассмотреть и определить, оправданны ли они. Было бы бесполезно
пытаться привести здесь набор стандартов, поскольку большинство органи-
заций разработало свои наборы, приемлемые в их конкретной обстановке.
Однако, для того чтобы дать представление о том, какие аспекты программи-