Реклама:

Каким бы образом ошибки ни проникали в данные, важно отметить, что данные распадаются на две основные категории:

ДОПУСТИМЫЕ ДАННЫЕ и НЕДОПУСТИМЫЕ ДАННЫЕ

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

4.1. Допустимые данные

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

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

4.2. Недопустимые данные

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

Кинг Д. Создание эффективного программного обеспечения

Рис. 4.1. Разнообразие данных.

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

Устройство ввода с перфокарт предназначено для считывания перфокарт IBM™. Это карты особенно хорошо известной прямоугольной формы, обычно с одним отрезанным углом. Каждая карта удовлетворяет определенным очень жестким допускам физических размеров и содержит маленькие отверстия, пробитые для представления данных. Даже если эти отверстия пробиты неправильно, конструкция ввода с перфокарт позволяет «прочесть» их.

Однако, если в особенно плохо управляемом центре обработки данных в устройство ввода с перфокарт свалится бутерброд с сыром, результат окажется весьма непредсказуемым. Части бутерброда могут благополучно проникнуть в вводной механизм компьютера, но невозможно предсказать, как компьютер прореагирует на это. Быть может, достаточно тонкий кусок сыра сойдет за перфокарту, и устройство ввода попытается «прочесть» его? Вряд ли!

Какими мерами предосторожности против подобной катастрофы мы располагаем? Мы реализуем строгие процедуры относительно того, что может поступить через устройство ввода с перфокарт и как изготовляются сами перфокарты. Таким образом, мы можем контролировать, что должно читать устройство ввода с перфокарт, и можем гарантировать, что в рамках этого контролируемого множества входов результат чтения предсказуем. Проектирование устройства ввода с перфокарт, которое могло бы обеспечить предсказуемые результаты при поступлении бутерброда с сыром или любого другого неспецифицированного объекта, представляло бы собой задачу, выходящую за рамки современной технологии, а возможно, непосильную для любой технологии. Итак, нужно ясно описать допустимые входные объекты для машины, а затем следует предотвращать поступление в машину любых объектов, которые не ^удовлетво-ряют этому описанию. Все эти неописанные объекты представляют собой недопустимые входные объекты для данной машины.


⇐ Предыдущая страница| |Следующая страница ⇒