logo search
Разработка и стандартизация ПС и ИТ

8. Основные стратегии тестирования, их характеристики, достоинства и недостатки. Основные типы ошибок, выявляемых каждой из стратегий.

Существуют две основные стратегии тестирования:

• тестирование программы как «черного ящика» (функциональное тестирова-ние), при котором программа рассматривается как объект, внутренняя струк-тура которого неизвестна;

• тестирование программы как «белого ящика» (структурное тестирование) подразумевает знание исходного кода программы и полный доступ к нему.

При тестировании программы как «черного ящика» исследуется работа каждой функции программы в соответствии со спецификацией. Основное место приложения тестов «черного ящика» - интерфейс ПС.

Тесты функционального тестирования демонстрируют:

• выполнение функций программы;

• корректность ввода исходных данных;

• процесс получения результатов.

При тестировании «черного ящика» принимаются во внимание специфициро-ванные системные характеристики программ, а их внутренняя логическая структура игнорируется. Исчерпывающее тестирование, как правило, невозможно. Например, ес-ли в программе 10 входных величин и каждая принимает по 10 значений, то потребует-ся 1010 тестовых вариантов. Тестирование «черного ящика» не реагирует на многие программные ошибки.

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

Существуют также разновидности тестирования.

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

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

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

Тестирование программ в процессе разработки

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

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

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

Отладка программы

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

1.Изучить исходные и полученные результирующие данные.

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

3.Подготовить новые исходные данные и провести эксперимент, который по-зволит доказать или опровергнуть гипотезу.

Тестовые данные

Для тестирования программ методом черного ящика готовятся определенные группы тестов.

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

• Класс корректных тестовых случаев, отражающих типичную "нормальную" ситуацию.

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

Для тестирования граничных значений.

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

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

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

- использование справочников;

- вычисление вручную;

- использование результатов, полученных при помощи другой программы, ко-торой мы доверяем.

Тестовое покрытие — это набор тестов, покрывающих программу (каждый ли-нейный участок). Тестовое покрытие важно знать, чтобы определить участки кода, пропущенные при тестировании.

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

Структурное тестирование программного обеспечения

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

Особенности тестирования «белого ящика»

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

В этом случае формируются тестовые варианты, в которых:

- гарантируется проверка всех независимых маршрутов программы;

- проходятся ветви True, False для всех логических решений;

- выполняются все циклы (в пределах их границ и диапазонов);

- анализируется правильность внутренних структур данных.

Недостатки тестирования «белого ящика»:

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

При n = 5 и k = 20 количество маршрутов т = 1014. Примем, что на разработку, выполнение и оценку теста по одному маршруту расходуется 1 мс. Тогда при работе 24 часа в сутки 365 дней в году на тестирование уйдет 3170 лет.

2.Исчерпывающее тестирование маршрутов не гарантирует соответствия про-граммы исходным требованиям к ней.

3.В программе могут быть пропущены некоторые маршруты.

Достоинства тестирования «белого ящика» связаны с тем, что принцип «белого ящика» позволяет учесть особенности программных ошибок:

1.Количество ошибок минимально в «центре» и максимально на «периферии» программы.

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

3.При записи алгоритма ПО в виде текста на языке программирования возмож-но внесение типовых ошибок трансляции (синтаксических и семантических).

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

Каждая из этих причин является аргументом для проведения тестирования по принципу «белого ящика». Тесты «черного ящика» не смогут реагировать на ошиб¬ки таких типов.