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

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


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

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


В последнее время все большую популярность завоевывает

автоматизирующий тестирование для Java. Вероятно, сходные с JUnit

тесты будут в ближайшее время созданы и для других языков программирования. Кроме того, все большее внимание уделяется реструктуризации задач. Это наиболее формальный подход к созданию программ, когда сходные части кода выделяются в отдельный блок - подпрограмму или функцию. Данному вопросу посвящена прекрасная книга Мартина Фаулера (Martin Fowler) Refactoringiltnpmvingthe Design of Existing Code, которая вышла в издательства w-PKei/ey. Указанное издание предназначается, в основном, опытным программистам, тем не менее вы также можете почерпнуть немало идей по управлению кодом.

Почти все программисты, с которыми мне когда-либо приходилось встречаться, говорили, что они тестируют свой код. Но как и когда именно? Какое количество кода подвергается единовременному тестированию? Эти вопросы весьма важны.

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

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

Для тестирования отдельных строк кода и пошагового тестирования отдельных подпрограмм используйте окно Immediate в редакторе Visual Basic. Это прекрасный способ первичного тестирования, но он не столь надежен и удобен, как создание в модуле отдельной подпрограммы тестирования.

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

О важности промежуточного тестирования

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

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



Вот почему тестировать фрагменты кода необходимо сразу же после их написания - ни в коем случае не позже. Иначе вы рискуете упустить из виду какие-нибудь

ранее предусмотренные аспекты поведения программы. Что именно следует тестировать

Важно понимать, что именно должен проверять тестовый код. Естественно, первым дело стоит проверить основные предположения, но вообще код должен быть

прощупан всеми мыслимыми случайными наборами входных данных. При создании

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

небольшой фрагмент кода как решение самостоятельной равноправной задачи.

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

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

Еще одно неявное и необходимое следствие применения технологии промежуточного тестирования состоит в выработке навыков создания независимых фрагментов кода.

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

Как тестировать программный код для Access

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

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

2. Создайте новый модуль, если вы собираетесь тестировать процедуру (функцию), либо добавьте класс, подлежащий тестированию.

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

4. Запустите программу на выполнение в режиме отладки.

Если ваш код прошел все стадии, перечисленные в приведенном ниже списке, значит, он в достаточно хорошей форме .



Код компилируется и запускается без ошибок - скажем, нет сообщений о том, что некий объект отсутствует.

Задача решается верно.

Код способен обработать самые серьезные ошибки времени выполнения.

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

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

Как избавиться от необоснованных взаимозависимостей блоков кода

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

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

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

Если код ссылается на глобальную переменную, попробуйте включить ее в состав набора аргументов процедуры/функции. Тщательно проанализируйте, какие глобальные переменные имеет смысл преобразовать в локальные. Глобальные объекты - потенциальный источник ошибок и недоразумений.

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

Что делать, если код работает неверно

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

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

кода, во время промежуточного тестирования, нежели в составе целой программы.

Как быть в случае возникновения непредусмотренной ситуации

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



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

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