Техники тестирования
- Техники , базирующиеся на интуиции и опыте инженера:
- Специализированное тестирование
Тесты основываются на опыте, интуиции и знаниях инженера, рассматривающего проблему с точки зрения имевшихся ранее аналогий. Данный вид тестирования может быть полезен для идентификации тех тестов, которые не охватываются более формализованными техниками.
- Исследовательское тестирование
Такое тестирование определяется как одновременное обучение, проектирование теста и его исполнение. Данный вид тестирования заранее не определяется в плане тестирования и такие тесты создаются, выполняются и модифицируются динамически, по мере необходимости. Эффективность исследовательских тестов напрямую зависит от знаний инженера.
- Техники, базирующиеся на спецификации
- Эквивалентное разделение приложения
Рассматриваемая область приложения разделяется на коллекцию наборов или эквивалентных классов, которые считаются эквивалентными с точки зрения рассматриваемых связей и характеристик спецификации. Набор тестов (иногда – только один тест) формируется из тестов эквивалентных классов (или наборов классов).
- Анализ граничных значений
Тесты строятся с ориентацией на использование тех величин, которые определяют предельные характеристики тестируемой системы. Расширением этой техники являются тесты оценки живучести системы, проводимые с величинами, выходящими за рамки специфицированных пределов значений.
Такие таблицы представляют логические связи между условиями (могут рассматриваться в качестве “входов”) и действиями (могут рассматриваться как “выходы”). Набор тестов строится последовательным рассмотрением всех возможных кросс-связей в такой таблице.
- Тесты на основе конечного автомата
Строятся как комбинация тестов для всех состояний и переходов между состояниями, представленных в соответствующей модели (переходов и состояний приложения).
- Тестирование на основе формальной спецификации
Для спецификации, определенных с использованием формального языка, возможно автоматически создавать тесты для функциональных требований. В ряде случаев могут строится на основе модели, являющейся частью спецификации, не использующей формального языка описания.
Сами тесты генерируются случайным образом по списку заданного набора специфицированных характеристик.
Техники, ориентированные на код
- Тесты, базирующиеся на блок-схеме
Набор тестов строится исходя из покрытия всех условий и решений блок-схемы. В какой-то степени напоминает тесты на основе конечного автомата.
Отличие – в источнике набора тестов. Максимальная отдача от тестов на основе блок-схемы получается когда тесты покрывают различные пути блок-схемы – сценарии потоков работ (поведения) тестируемой системы. Адекватность таких тестов оценивается как процент покрытия всех возможных путей блок-схемы.
- Тесты на основе потоков данных
В данных тестах отслеживается полный жизненный цикл величин (переменных) – с момента рождения (определения), на всем протяжении использования до уничтожения (неопределенности). В реальной практике используются нестрогое тестирование такого вида, ориентированное, например, только на проверку задания начальных значений всех переменных или всех вхождений переменных в код, с точки зрения их использования.
- Ссылочные модели для тестирования, ориентированного на код
Является не столько техникой тестирования, сколько контролем структуры программы, представленной в виде дерева вызовов (например, диаграммы, определенной в нотации UML и построенной на основе анализа кода).
- Тестирование, ориентированное на дефекты
Тесты ориентированы на специфические категории ошибок.
Направлены на обнаружение наиболее вероятных ошибок, предсказываемых, например, в результате анализа рисков
Мутация – небольшое изменение тестируемой программы, произошедшее за счет частных синтаксических изменений кода (в частности, рефакторинга). Соответствующие тесты запускаются для оригинального и всех “мутировавших” вариантов тестируемой программы. Эта техника фокусируется на возможности, с помощью тестов, определять отличия между мутантами и исходным вариантом кода. Если такое отличие установлено, мутанта “убивают”, а тест считается успешным. Обычно, данный подход фокусируется на синтаксических ошибках, на практике отслеживаемых современными средами разработки и, конечно, компиляторами.
- Техники, базирующиеся на условиях использования
Базируется на условиях использования системы.
Тестирование для оценки надёжности системы должно проводиться в таком тестовом окружении, которое максимально приближено к реальным условиям работы системы. Результаты таких тестов позволяют оценить поведение системы в реальных условиях. Входные параметры тестов задаются на основе вероятностного распределения соответствующих параметров или их наборов при эксплуатации (входные данные могут прогнозироваться исходя из частоты возможных сценариев работы пользователей).
- Тестирование, базирующееся на надежности инженерного процесса
Базируется на условиях разработки системы.
Соответствующие тесты проектируются в контексте используемого процесса разработки и методик тестирования.
Техники , базирующиеся на природе приложения
Описанные выше техники могут применяться к любым типам программных систем. В то же время, в зависимости от технологической или архитектурной природы приложений, могут также применять специфические техники, важные именно для заданного типа приложения. Среди таких техник выделяют:
- Объектно-ориентированное тестирование
- Компонентно-ориентированное тестирование
- Web-ориентированное тестирование
- Тестирование на соответствие протоколам
- Тестирование систем реального времени.
Выбор и комбинация различных техник
- Выбор и комбинация различных техник
- Функциональные и структурные техники
Техники тестирования, строящиеся на основе спецификаций или кода часто называют функциональными или структурными, соответственно. Оба подхода не должны противопоставляться, а должны дополнять друг друга.
- Определенные или случайные техники
Обычно тесты можно распределить по данным группам на основе используемой политики выбора или определения входных параметров тестов.