[ Тематический план ] [ Тестирование программного обеспечения в процессе внедрения и эксплуатации ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]
Термины и определения
Выполнение программы с целью обнаружения ошибок называется тестированием. Виды ошибок и
способы их обнаружения приведены в табл. 1

Эффективность контроля 1-го вида зависит и от языка, и
от компилятора. Контроль 2-го вида осуществляется с помощью исключений —
Exceptions и весьма полезен для проверки правдоподобности промежуточных
результатов. Тест — это набор контрольных входных данных совместно с
ожидаемыми результатами. В число входных
данных времязависимых программ
входят события и временные параметры. Ключевой вопрос
— полнота тестирования: какое количество каких тестов гарантирует, возможно, более полную проверку
программы?
Исчерпывающая проверка на всем множестве входных
данных недостижима. Пример: программа,
вычисляющая функцию двух переменных:
Y=f(X, Z). Если X, Y, Z — real, то полное число тестов
(232) 2= 264= 1031
Если на каждый тест тратить 1 мс, то 264 мс = = 800 млн лет.
Следовательно:
• в любой нетривиальной программе на любой стадии
ее готовности содержатся необнаруженные
ошибки;
• тестирование — технико-экономическая проблема, основанная на компромиссе время — полнота.
Поэтому нужно стремиться к возможно меньшему количеству хороших тестов с желательными свойствами.
Детективность: тест должен с большой
вероятностью обнаруживать возможные
ошибки
Покрывающая способность: один тест должен выявлять как можно
больше ошибок.
Воспроизводимость: ошибка должна выявляться независимо
от изменяющихся условий (например, от временных
соотношений) — это труднодостижимо для времязависимых программ, результаты которых часто невоспроизводимы.
Только на
основании выбранного критерия можно
определить тот момент времени, когда конечное множество тестов окажется достаточным для проверки программы с
некоторой полнотой (степень полноты, впрочем, определяется экспериментально). Используется два вида
критериев (табл. 2):
•
функциональные тесты
составляются исходя из спецификации
программы;
• структурные тесты составляются исходя из текста программы.


На рис. 1, а видно отличие тестирования команд (достаточен один тест) от С1 (необходимы два
теста как минимум).
Рисунок 1, б иллюстрирует различие С1 (достаточно
двух тестов, покрывающих пути 1, 4 или 2, 3) от С2 (необходимо четыре теста для всех четырех путей). С2 недостижим
в реальных программах из-за их цикличности, поэтому ограничиваются тремя путями для каждого цикла: 0, 1 и N повторений
цикла.
Остаются
проблемы назначения классов входных/выходных данных для функционального
тестирования и проектирования тестов для структурного тестирования. Классы, как
правило, назначаются исходя из семантики
решаемой задачи [6].
Рассмотрим пример. Найти минимальный набор тестов для программы
нахождения вещественных корней квадратного
уравнения ах2 + bх + с - 0.
Решение представлено в табл. 3.
Таким образом, для этой программы предлагается минимальный набор функциональных тестов,
исходя из 7 классов выходных данных.
Тестирование
«белого ящика» и «черного ящика»
В
терминологии профессионалов тестирования
(программного и некоторого аппаратного обеспечения) фразы тестирование «белого ящика» и тестирование
«черного ящика» относятся к тому, имеет ли разработчик тестов доступ к
исходному коду тестируемого ПО, или же тестирование выполняется через пользовательский интерфейс либо прикладной
программный интерфейс, предоставленный
тестируемым модулем.
При
тестировании «белого ящика» (англ. white-box testing, также говорят — прозрачного ящика)
разработчик теста имеет доступ к исходному коду и может писать код, который
связан с библиотеками тестируемого ПО.
Это типично для юнит-тестирования (англ. unit testing), при котором тестируются
только отдельные части системы. Оно обеспечивает то, что компоненты конструкции работоспособны и устойчивы до
определенной степени.
При
тестировании «черного ящика» (англ. black-box testing) тестировщик имеет доступ
к ПО только через те же интерфейсы, что и заказчик или пользователь, либо через
внешние
интерфейсы, позволяющие другому компьютеру либо
другому процессу подключиться к системе для тестирования. Например, тестирующий модуль может виртуально нажимать
клавиши или кнопки мыши в тестируемой программе с помощью механизма взаимодействия процессов с уверенностью в
том, что эти события вызывают тот же
отклик, что и реальные нажатия клавиш и кнопок мыши.
Если
альфа- и бета-тестирование относятся к стадиям до выпуска продукта (а также, неявно, к объему
тестирующего сообщества и ограничениям
на методы тестирования), тестирование «белого ящика» и «черного ящика» имеет
отношение к способам, которыми
тестировщик достигает цели.
Бета-тестирование в целом ограничено техникой «черного ящика» (хотя
постоянная часть тестировщиков обычно
продолжает тестирование «белого ящика» параллельно бета-тестированию). Таким образом, термин
бета-тестирование может указывать на
состояние программы (ближе к выпуску, чем альфа) или может указывать на
некоторую группу тестировщиков и процесс, выполняемый этой группой. Итак,
тестировщик может продолжать работу по
тестированию «белого ящика», хотя ПО уже «в бете» (стадия), но в этом случае он
не является частью бета-тестирования
(группы/процесса).