Тренинг логически состоит из двух частей.
Первая часть посвящена практике применения базовых техник проектирования тестов. Тех самых, которые описаны в каждой книжке, но которые могут давать совершенно различные результаты в зависимости от того, как их использовать.
Во второй части мы постараемся более глубоко проникнуть в понимание принципов тест-дизайна. Это даст вам возможность придумывать тесты, не ограничиваясь базовыми техниками.
Часть 1: практика применения техник тест-дизайна
1. Анализ границ и разбиение данных на подобласти.
Это - основа основ, те самые 20% усилий, которые обеспечивают 80% результата. И вместе с тем, эта по сути самая простая из техник является наиболее сложной с точки зрения практики её применения. Потому что, во-первых, эта техника невероятно многослойная - если вы нашли какие-то границы, это не значит, что других нет, и дополнительный анализ иногда оказывается очень плодотворным. А во-вторых потому, что эта техника требует больше всего творчества, интуиции, иногда даже везения. То есть - больше всего практики, потому что только таким путём можно выработать в себе чутьё границ.
2. Комбинаторные методы
В отличие от анализа границ, техники комбинирования данных не требуют особого творчества, здесь нужна кропотливая работа и полезно обладать некоторыми познаниями в области математики - комбинаторики и математической статистики. Но, разумеется, если у вас нет высшего математического образования, или вы просто забыли то, что когда-то изучали - это не повод бросать тестирование. Всё необходимое вам расскажут, а большую часть чёрной работы будут выполнять за вас инструменты.
3. Тестирование последовательностей операций
Эта область тестирования в настоящее время исследована гораздо меньше, чем две вышеупомянутые, а применяемые техники сложны в использовании и слабо поддержаны инструментами. Тем не менее, на тренинге мы рассмотрим несколько подходов различной степени сложности к построению последовательностей - на основе вариантов использования, на основе диаграмм взаимодействия, но основе автоматных моделей, и конечно же генерацию случайных последовательностей.
4. Тестовое покрытие: как понять, что тестов достаточно
Тестировщику важно не только уметь придумывать много тестов, но и вовремя остановиться. Это очень непростое решение, учитывая уже упомянутый факт, что сколько ни тестируй, это не гарантирует обнаружения всех дефектов. Тем не менее, в какой-то момент мы должны сказать, в первую очередь себе, что тестирование выполнено "полностью". Для этого требуется некоторый критерий "полноты". И в качестве такого критерия обычно используется покрытие чего-нибудь -- требований, программного кода, модели поведения, модели данных и т.д. Мы рассмотрим различные покрытия и проследим их связь с техниками проектирования тестов.
Часть 2: понимание принципов тест-дизайна
Вторая часть основана на внимательном изучении двух наборов эвристик, описанных в документе "Heuristic Test Strategy Model", созданном Джеймсом Бахом.
5. Product Elements: SFDPOT
При рассмотрении программного продукта можно выделить различные аспекты:
-
Structure: физическое устройство продукта, из чего он состоит;
-
Functions: логическое устройство продукта, что он может делать;
-
Data: какими данными может оперировать продукт;
-
Platform: как продукт взаимодействует с окружением;
-
Operations: как продукт используется;
-
Time: всё, связанное со временем.
Если тестировщик концентрирует внимание только на некоторых аспектах, упуская из внимания остальные, он рискует пропустить серьёзные дефекты. И наоборот, ориентируясь на различные аспекты, тестировщик может создать более разнообразные тесты, что позволит выявить больше разных дефектов. Мы увидим, как применение одних и тех же техник даёт новые результаты, если применять их к различным аспектам.
6. General Test Techniques: FDFS CURS
Последнее занятие будет посвящено обзору различных приёмов проектирования тестов, в том числе тех, которые ранее в явном виде не встречались в ходе тренинга. Мы рассмотрим классификацию техник тест-дизайна, выделив восемь "обобщенных техник":
-
Functions testing
-
Domain testing
-
Flow testing
-
Scenario testing
-
Claims testing
-
User testing
-
Risk testing
-
Stress testing
Для каждой из обобщенных техник будут приведены примеры, а также показано, как можно конструировать новые тесты путём комбинирования обобщенных техник друг с другом.