- Training
Вы наверняка читали о том, что гарантированно найти все ошибки в сколь-нибудь сложной программе средствами тестирования невозможно. Равно как невозможно доказать, что ошибок в программе нет.
Это в теории. А на практике некоторые тестировщики находят дефектов в программе больше, чем другие, в том числе они умеют находить весьма нетривиальные дефекты. Почему? Как им это удаётся? Что за секретные техники они применяют?
Увы, никаких особых приёмов проектирования тестов, о которых не было бы написано в любой книжке, не существует. Эффективные тестировщики применяют те же самые техники, что и все остальные. Разница лишь в том, КАК они их применяют.
На этом тренинге я не буду ничего говорить о том, как и в каком формате записывать тесты, я буду рассказывать только о том, как их придумывать.
Мы постоянно будем держать в уме два противоборствующих фактора:
- с одной стороны, тестов надо придумать достаточно много и они должны быть достаточно разнообразными, чтобы выявить как можно больше дефектов;
- с другой стороны, тестов надо придумать как можно меньше, чтобы не делать лишней работы.
Тренинг логически состоит из двух частей.
Первая часть посвящена практике применения базовых техник проектирования тестов. Тех самых, которые описаны в каждой книжке, но которые могут давать совершенно различные результаты в зависимости от того, как их использовать.
Во второй части мы постараемся более глубоко проникнуть в понимание принципов тест-дизайна. Это даст вам возможность придумывать тесты, не ограничиваясь базовыми техниками.
Часть 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
Для каждой из обобщенных техник будут приведены примеры, а также показано, как можно конструировать новые тесты путём комбинирования обобщенных техник друг с другом.