Тестирование "стеклянного ящика" на стадии кодирования

И вот наконец наступает этап кодирования: программист пишет про­граммы и сам их тестирует. Мы предполагаем, что вы знаете, что такое Кодирование, и поэтому не описываем его процесс в этой книге.

Зато достойна описания технология тестирования, которая применяется на этом этапе. Эта технология называется тестированием "стеклянного Ящика " (glass box) — иногда ее еще называют тестированием "белого ящика " (white box) в противоположность классическому понятию "черного ящика " (black box).-

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

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

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

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

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

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

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

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

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

Однако в этой книге мы уделяем основное внимание тестированию "черного ящика", и именно ему посвящают большую часть времени все профессиональные тестировщики. (Отдельную и достаточно специфическуюобласть тестирования представляют собой СУБД для мэйнфреймов.)

Тестировщик "черного ящика" не изучает исходный код программы — он исследует ее извне, работая с ней так, как это будет делать пользователь. И так же, как исследование программы изнутри позволяет выявить проблемы и критические точки, которых не видно извне, так и Тестировщик "черного ящика" выявляет ошибки и недостатки, которые программист упускает.

Поговорим об основных концепциях тестирования "стеклянного ящика", без знания которых вы не сможете считаться профессионалом в своем деле