Программирование >>  Проектирование интерфейса пользователя 

1 ... 90 91 92 [ 93 ] 94 95 96 ... 153


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

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

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

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

Использование ловушек

Стратегии, о которых пойдет речь в этом и двух следующих разделах, разработаны давно. Заслуга принадлежит Дэйву Тилену (Dave Thielen). Достаточно сказать, что этот человек отвечал за разработку MS DOS 5. Если в то время вы уже занимались компьютерами, то, вероятно, помните, какой ужасной была предыдущая, четвертая,

версия операционной системы DOS. Она просто пестрила ошибками. Всемогущий

Билл Гейтс, возможно, сказал тогда: Друзья мои! Либо в пятой версии вы исправите недочеты, либо всех уволю без выходного пособия .

Так вот, DOS 5 завоевала успех и признание миллионов пользователей. Позже

Дэйв Тилен написал книгу No Bugs!: Delivering Error-Free Code in С and С++ (издательство Addison-Wesley, 1992). Это пособие - одно из моих любимых, и тому есть две причины. Первая - небольшой объем, всего около 180 страниц (сравните со многими современными фолиантами, для которых 1000 страниц становится порочной нормой). А вторая - пожалуй, главная - заключается в том, что в книге излагаются полезные советы и ценные рекомендации. С момента выхода указанного пособия в свет и по сей день я с успехом применяю в процессе программирования на любом языке описанные в ней подходы. Поставщики инструментальных средств программирования сочли необходимым включить некоторые предложенные Дэйвом Тиленом технологии в состав своих продуктов. Скажем, VBA содержит штатные средства верификации условий.

Под верификатором условий понимается дополнительный код, который осуществляет контроль выполнения заранее заданных условий и приостанавливает работу программы, если последние не удовлетворяются. В процессе трассировки программа с помощью вспомогательных конструкций создает отчет - во внешнем файле или в окне (в таком, например, как Watches) - о том, что она делает. Скажем, Microsoft Visual C++ предлагает инструменты верификации условий и трассировки, а язык Object Pascal среды Delphi имеет собственные возможности верификации. Языки VB и VBA также снабжены средствами верификации условий и аналогом трассировки - функциями, реализованными в составе класса Debug. В текущем и двух следующих разделах эти мощные и эффективные технологии рассмотрены более подробно.

Что такое ловушка

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

Использование ловушек - удобное средство, гарантирующее, что процессом тестирования будут охвачены все ветви сложного кода. Предположим, что при тестировании управляющей структуры If ... Then . . . Else . . . End I f блок



кода, следующий за Else, никогда не выполнялся. Вправе ли вы надеяться, что в один не очень прекрасный момент он вас не подведет? Ответ однозначен - нет. С другой стороны, может оказаться и так, что раз этот код никогда не работает, он вовсе не нужен.

Ка шенять ловушки

В VBA технология применения ловушек реализуется очень легко. Изучите текст листинга 17.1.

Листинг .1. Пример использования ловушек

2 3 4 5:

6 7 8 9

10: 11: 12

Sub Trap(ByVal Debug.Print

Stop End Sub

FileName Ловушка:

As String, ByVal TrapNumber As Long)

& FileName & ( & TrapNumber & )

Sub SomeCodeToTrap

Dim Condition As Boolean If (Condition = True) Then Call Trap( Modulel ,

Else

Call Trap ( Modulel , End If

1 )

2 )

13:End Sub

Строки содержат текст процедуры-ловушки, а строки заня-

I ты процедурой, подвергаемой тестированию. Процедура Trap достаточно проста. Ее можно создать один раз, а затем при необходимости импортировать в нужные модули. В нашем случае Trap вызывается с двумя аргументами - именем модуля (FileName) и номером строки-

ловушки (TrapNumber), который должен быть уникальным в пределах

текущего модуля.

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

Строки 6- 13 представляют собой пример кода, который должен пройти тестирование с помощью ловушек. Применяйте строки-ловушки в особо ответственных случаях - скажем, в важных условных конструкциях. Конечно, весь код проверять таким образом неразумно, но и полностью отказываться от подобной возможности тестирования, разумеется, не следует. Если ранее проверенный код подвергся изменениям, желательно убрать символ комментария и повторить тест вновь. Если при просмотре текста программы вы нашли строку-ловушку, не помеченную символом комментария, сразу же протестируйте эту часть кода. Если не удается подобрать соответствующие условия теста, подумайте - может быть, такой блок кода вовсе и не нужен. Его удаление обеспечит полную гарантию избавления от потенциальных неприятностей (кто из классиков мрачно пощутил: Наилучшее средство от головной боли - гильотина ?).



Трассировка кода

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

полезной в процессе выявления блоков кода, нуждающихся в оптимизации.

Приемы реализации процедур трассировки схожи с методами использования ловушек, рассмотренными в предыдущем разделе. Процедуре трассировки передается несколько аргументов - имя тестируемого модуля (скажем, FileName), номер блока кода, уникальный в пределах модуля (TraceNumber), и подробное сообщение, характеризующее состояние параметров программы (TraceMessage). Но значению аргумента Тга-ceNumber блок кода легко отыскать в тексте модуля с помощью команды меню Edit=>Find окна редактора VBA. В качестве параметра TraceMessage можно передавать

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


Только на протяжении последних пяти лет в составе инструментальных сред программирования появились мощные интегрированные отладчики, позволяющие указывать объекты наблюдения (watches), следить за содержимым стека вызовов (call stack) и задавать точки останова (breakpoints). Средства наблюдения и просмотра стека вызовов можно, по существу, приравнять к функциям трассировки, а механизмы обработки точек останова близки по смыслу процедурам использования

ловушек и верификации условий.

Впрочем, одно вовсе не исключает другого - рассматриваемые технологии тестирования остаются весьма полезными в условиях, когда приложение отлаживается за пределами среды программирования. Средства задания точек останова (или контрольных точек) и другие названные инструменты, конечно, весьма удобны, но точка останова, скажем, - это объект окна среды, а не приложения как такового. Нужно умело и рационально использовать и штатные средства, предлагаемые интегрированным отладчиком, и те приемы, которые мы

сейчас рассматриваем. В борьбе с ошибками все средства хороши -

лишь бы они помогли добиться полного успеха.

Одним из преимуществ процедуры трассировки служит то, что она способна сохранять информацию в виде файлового отчета, а не только отображать ее в окне Immediate редактора VBA. Сопоставление полученного отчета с тем, что, по ващему мнению, должна бьша выполнить программа, - весьма поучительный способ достижения хороших резу;[ьтатов. Листинг 17.2 демонстрирует пример реализации процедуры трассировки.

Листинг 17.2. Пример процедуры трассировки

4: 5:

Su м (ByVa, FileName As String, ByVal TraceMessage As String, ByVal Dim Output As String

Output овка: & FileName & ( TraceNumber & ) в & Now & vbCrLf

TraceNumber As Long)

&

&



1 ... 90 91 92 [ 93 ] 94 95 96 ... 153

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика