Написание надежных программ
Ошибки неизбежно сопровождают всякую сколь-нибудь сложную программу. Это утверждение может вызвать раздражение у начинающего программиста, но человек более опытный посчитает его само собой разумеющимся и сосредоточится на средствах, предлагаемых программным окружением для борьбы с этим неизбежным злом. Самые неприятные, дорогостоящие ошибки это те, что допущены при определении основных задач и целей приложения, при проектировании структуры его управления и потоков передачи данных, а также ошибки, связанные с неверной реализацией алгоритмов. Часто они не проявляются непосредственно в виде сбоев в работе программы, а обнаруживаются после довольно длительного использования приложения и требуют для своего исправления существенных изменений в проекте и программе. Их корни могут иметь как объективную природу (сложность решаемых задач), так и субъективную (непонимание заказчиком того, что ему надо). Как бороться с такими ошибками? Выделим два известных подхода к этой проблеме. Первый из них состоит в повышении ур овня языков и систем программирования, чтобы разработчик мог оперировать при создании системы понятиями предметной области, для которой она создается. Другой подход связан с идеей быстрого прототипирования, т. е. создания на ранней стадии разработки системы ее работающего прототипа, в ходе экспериментов с которым заказчик может уточнить свои требования. Оба эти подхода нашли отражение в Office 2000. Первый реализован в объектно-ориентированном подходе к построению как самой инструментальной системы, так и создаваемых в ней приложений. Развитие в VBA возможностей пользовательских модулей классов, в частности введение полиморфизма, - еще один шаг в направлении повышения уровня языка. Благодаря классам, можно вводить в программы объекты, представляющие те или иные понятия предметных областей. Реализации второго из указанных подходов существенно способствует визуальный стиль программирования, принятый во всех приложениях Office 2000. Создавая собственные меню и диалоговые окна, можно быстро спроектировать интерф ейс системы и передать пользователю (тестерам) действующий ее прототип для оценки соответствия его требованиям.
Затем завершить реализацию с учетом замечаний и уточнений, возникших у тестеров при работе с прототипом. Это позволит избежать многих ошибок, неизбежных при разработке системы без контактов с ее будущими пользователями.
Одним из факторов, влияющих на надежность программ, является сам язык программирования. Известно, что язык, в котором есть объявление переменных по умолчанию, разрешены преобразования данных по умолчанию в процессе вычислений, нет строгого контроля типов, - такой язык является ненадежным, в нем значительно легче создать ненадежную программу, содержащую трудно выявляемую ошибку. Язык VBA трудно причислить к надежным языкам, он скорее занимает по шкале надежности срединное положение. Во многом, это связано с историей его возникновения. Именно поэтому надо предпринимать ряд мер, благоприятствующих повышению надежности. О многих из них мы уже говорили в разных частях этой книги. Напомним некоторые из них:
- Проследите, чтобы все флажки на вкладке Editor из меню Tools|Options были включены. Автоматическая проверка синтаксиса в процессе написания программ, подсказка о значениях переменных, подсказка о параметрах функции, - все подключаемые свойства крайне полезны. Особое внимание обращаем на флажок "Require Variable Declaration", при включении которого в каждый модуль вставляется опция Option Explicit, принуждающая явно объявлять все переменные. С этим включенным флажком у языка VBA становится одним недостатком меньше.
- При объявлении переменных старайтесь указать точный тип переменной и объекта. Избегайте объявлений типа Variant и Object. В этом случае на Вашей стороне будет контроль типов, что позволит избежать многих возможных ошибок.
- При объявлении процедур явно указывайте описатели ByRef и ByVal, помните об особенностях передачи аргументов по ссылке в VBA.
- Не забывайте о разумных размерах модулей и процедур, старайтесь создавать процедуры, модули и компоненты, допускающие переиспользование.
- Наконец, еще раз напомним, что хорошие спецификации залог того, что программа допускает возможность изменения в процессе жизненного цикла, и что она будет корректно работать у конечного пользователя.Поэтому комментарии в тексте программы, хорошая справочная система, - все это важнейшие факторы, повышающие надежность программ.
Рис. 10.1. Флажки вкладки Editor