Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1 курс 2 семестр (2).docx
Скачиваний:
233
Добавлен:
14.03.2015
Размер:
1.8 Mб
Скачать

Лекция 19. Компиляция и выполнение проекта План лекции:

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

Библиотеки подпрограмм. Тестирование и исправление программы.

Краткий конспект лекции

Компоненты проекта

  • Файлы формы (*.FRM).

  • Файлы формы, содержащий бинарную информацию (*.FRX).

  • Файлы модуля (*.BAS).

  • Файлы модуля классов (*.CLS).

  • Файлы дополнительных элементов управления (*.ОСХ).

  • Файл ресурсов (*.RES).

  • Файл проекта, содержащий ссылки на свои компоненты (*.VBP).

Отладка проекта с ошибками времени выполнения

Запустите программу. Если при выполнении кода Visual Basic появится окно с сообщением: "Type mismatch", то Нажмите Debug. Visual Basic покажет причину возникновения ошибки:

Жёлтым цветом выделена строка с ошибкой. Если навести курсор мыши на имя переменной, то всплывёт подсказка, в которой Visual Basic сообщит нам её значение. Такая возможность доступна только в режиме Debug.

Использование пошаговой трассировки:

Пошаговая трассировка - это метод отладки приложения при котором можно выполнять код по одной команде и следить за ходом её выполнения. В нужном месте программы необходимо поставить точку останова (Breakpoint).

Дойдя до такого места, Visual Basic приостановит выполнение программы и перейдет в режим Debug, в котором можно выполнять код покомандно. Чтобы поставить точку останова нужно кликнуть на вертикали слева от кода:

Можно просматривать значения переменных, наводя на них курсор мыши и выполнять программу по шагам. Чтобы выполнить одну команду, нужно нажать F8 или Shift+F8. При нажатии F8 на строчке с вызовом процедуры Visual Basic войдёт в эту процедуру и можно продолжить пошаговое выполнение до конца процедуры. Если же нажать Shift+F8, то Visual Basic выполнит процедуру, но не будет заходить в неё для пошаговой трассировки.

Если открыть окно Locals Window, то видны значения всех локальных переменных.

Объект Debug. Окно отладки Immediate можно открыть во время выполнения программы используя объект Debug и его метод Print, например: Debug.Print " Х="; X . Значения, отображаемые в окне отладки, можно просмотреть даже после остановки программы.

В Visual Basic можно контролировать ход программы при возникновении ошибок, используя оператор On Error:

On Error GoTo МЕТКА, On Error Resume Next, On Error GoTo 0

Правила тестированиия

  • Правило № 1. Код всегда содержит ошибки.

  • Правило № 2. Помещайте в код утверждения.

Утверждение - это программная проверка, предназначенная для определения того, выполняется ли некоторое условие или нет. Если условие не выполняется, возникает исключение и на экране появляется диалоговое окно, в котором объясняется, в чем состоит проблема.

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

Предусловие (pre-condition) - это утверждение, находящееся в начале функции. Оно однозначно указывает, какое условие, касающееся окружения и значений входных параметров, должно соблюдаться перед выполнением функции.

Постусловие (post-condition) по назначению обратно предусловию - это утверждение, находящееся в конце функции и предназначенное для проверки того, что функция была выполнена правильно.

Инвариант (invariant) представляет собой нечто среднее между предусловием и постусловием. Это утверждение, которое находится в середине кода и гарантирует, что определенная часть функции выполняется корректно.

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

Классическим примером может служить исключение "List index is out of bounds" (Индекс в списке вышел за допустимые пределы), особенно тот случай, когда используется индекс -1. Ошибка подобного типа вызвана тем, что программист не проверяет индекс элемента перед тем, как записать или считать его из TList. Код объекта TList проверяет все передаваемые ему индексы элементов. Если индекс находится вне допустимого диапазона, возникает исключение. Пользователь приложения не может вызвать такую ошибку. Ошибка возникает исключительно из-за недостаточного объема проведенного тестирования. Это исключение должно быть утверждением.

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

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

  • Правило № 3. Помещайте в код комментарии.

Объясняйте ваши допущения. Описывайте сложные блоки кода. При изменении кода изменяйте и соответствующие комментарии. Не допускайте, чтобы комментарии устаревали.

  • Правило № 4. Пишите код протоколирования и защищайте его директивами компилятора.

Под протоколированием (logging) понимается вставка дополнительного кода, закрытого директивами компилятора, который записывает в файл состояние или значения основных переменных.

К прошлом трассировка была тесно связана с протоколированием. Трассировка (tracing) представляла собой метод вставки оператором writeln в начале и конце функции простых сообщений: "Вход в функцию X" или "Выход из функции X". Запись сообщений в файл помогала восстановить ход выполнения приложения и порядок вызова функций. В настоящее время существуют специальные программы, которые делают все это сами, без участия программиста. Приложение запускается внутри такой программы, а она автоматически идентифицирует все функции и подпрограммы, их начало и завершение, и формирует журнал трассировки приложения.

В последнее время большинство программистов не пользуются трассировкой. Намного проще запустить отладчик и при возникновении ошибки просмотреть стек вызовов.

  • Правило № 5. При тестировании пользуйтесь анализатором покрытия. Убедитесь, что во время тестирования выполняются все строки кода.

Анализ покрытия (coverage analysis) представляет собой запись в журнал того, какие операторы приложения были "покрыты", т.е. выполнены. Если при тестировании отдельная строка или блок кода не выполняются, в этой строке или в блоке может содержаться ошибка. Такую ошибку можно будет выявить только с помощью теста, при выполнении которого выполняется данный код.

  • Правило № 6. Для организации набора тестов для проверки модулей воспользуйтесь тестовым каркасом. При изменении кода выполните тесты повторно.

Тестирование модулей (unit testing) представляет собой процесс тестирования отдельных частей независимо от самой программы.

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

Тестовый каркас DUnit можно найти в Internet по адресу http://dunit.sourceforge.net.

Правила отладки

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

Правило № 1. Выбирайте воспроизводимый случай тестирования.

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

Правило № 2. Исходите из того, что ошибка внесена вами.

Может быть, вы неправильно используете API-интерфейс операционной системы или библиотека компонентов требует определенной последовательности операций, в конце концов, может быть, вызываемая вами функция не может принимать nil в каком-либо входном параметре. Маловероятно, чтобы ошибка была вызвана неправильной работой API-интерфейса, компилятора или присутствует в библиотеке компонентов.

Правило № 3. Для проверки того, что код работает, как того ожидалось, используйте утверждения.

Кроме того, можно применять и протоколирование, которое позволит отслеживание состояние различных объектов.

Правило № 4. Используйте автоматизированные инструментальные средства отладки.

Возможно, ваша ошибка вызвана перезаписью какой-то области памяти и или получением доступа к памяти после того, как она была освобождена, либо, скажем при вызове API-функции не проверяется код возвращаемой ошибки. Все описанные типы проблем можно обнаружить в таком автоматизированном средстве отладки, как TurboPower Sleuth QA Suite. Приобретите средство отладки и используйте его не только в процессе тестирования, но и в процессе обнаружения ошибок.

Вопросы по данной лекции:

  1. Перечислите файлы проекта

  2. Перечислите методы отладки в Visual Basic

  3. Перечислите правила тестирования.

  4. Перечислите правила отладки.

Литература по теме:

  1. Информатика. Общий курс / Под ред. В.И. Колесникова. - 2-е изд. - М.: Дашков и К; Наука-Пресс, 2008. - 400 с.

  2. Литвиненко Т.В. Visual Basic 6.0: Уч. пособие. - М.: Горячая линия -Телеком, 2001. - 140 с.

  3. Якушева Н.М. Visual Basic для студентов. - М.: Радио и связь, 2001. - 232с.