Тестирование программных продуктов

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

-тестирование программы как черного ящика, при котором программа рассматривается как объект, внутренняя структура которого неизвестна.

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

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

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

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

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

Типичные ошибки

Мы уже говорили о необходимости защитного программирования, которое позволяет предупредить многие ТИПИЧНЫЕ ошибки. Обратим внимание на две категории наиболее распространенных ошибок программистов.

· Ошибки общего (несинтаксического) характера, остающиеся в программах после выполнения синтаксического контроля.

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

• Ошибки в циклах. Например, неверные границы начала и конца.

• Ошибки при работе с данными.

• Ошибки ввода-вывода.

• Ошибки в описании переменной. Например, отсутствие инициализации переменной.

• Ошибки при работе с массивами.

• Отсутствие начального обнуления элементов.

Ошибки специального вида, особенно трудные для диагностирования.

• Ошибки при написании параллельных программ. Например, ошибки в расстановках семафоров.

• Ошибки, связанные с применением препроцессора.

• Ошибки, связанные с неправильным результатом операций.

• Исчезающие ошибки.

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

Для тестирования программ методом черного ящика [Канер Фолк, Нгуен 20001 готовятся определенные группы тестов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Отслеживание ошибок

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

* Проблема или ошибка зарегистрирована.

* Выполнен первичный анализ (эксперт подтвердил факт наличия ошибки).

* Понятна причина, вызвавшая ошибку.

* Выполнен окончательный анализ проблемы или ошибки.

* Принято решение о начале работы над исправлением.

* Выполнено исправление ошибки.

* Исправление интегрировано в основное пространство. Подтверждено исправление ошибки.