3.8 Тестирование с помощью техник тест-дизайна
Тест-дизайн – это этап процесса тестирования ПО, на котором проектируются и создаются тест-кейсы в соответствии с определенными ранее критериями качества и целями тестирования.
Позволяет выбрать из большого набора данных малую часть, которая с большей вероятностью позволит обнаружить те же проблемы, что и большой набор данных. И в целом нужен для облегчения и ускорения работы.
Цели тест-дизайна:
- Придумать тесты которые смогли бы обнаружить наиболее серьезные ошибки для ПО
- Минимизация количества тестов
Часто используемые техники тест дизайна:
Тестирование классов эквивалентности
Класс эквивалентности – входные данные которые обрабатываются нашим приложением одинаково или обработка которых приводит к одному и тому же результату.
Коротко: выбранные тестировщиком наборы данных (диапазоны), которые подаются на ввод в модуль, и это должно приводить к одинаковым результатам.
Статья про классы эквивалентности
Пример: Существует компания, в которой решение о принятии на работу будет зависеть от возраста кандидатов.
0 - 13 лет - не принимаем
14 - 17 лет - part time (частичная занятость)
18 - 55 лет - full time
56 - 99 лет - не нанимаем
У нас есть 4 класса эквивалентности.
Например, предположим, у вас есть функция, принимающая на входе целое число от 1 до 100. Вы можете определить классы эквивалентности следующим образом:
Класс 1: Входные данные от 1 до 25
Класс 2: Входные данные от 26 до 50
Класс 3: Входные данные от 51 до 75
Класс 4: Входные данные от 76 до 100
Для тестирования можно выбрать по одному представителю из каждого класса эквивалентности: 10, 35, 60, 90. Тестовые случаи будут содержать данные из каждого класса, чтобы обеспечить полное покрытие всех возможных сценариев обработки входных данных.
Анализ граничных значений
Анализ граничных значений - это техника проверки поведения продукта на крайних (граничных) значениях входных данных.
- определение класса эквивалентности
- определение границ диапазонов
- проведение трех тестов для границ (на самой границе, +/-1 значение)
Допустим, у нас есть интернет-магазин, и мы хотим реализовать фильтр по цене для товаров. Вот пример тестирования граничных значений для этого фильтра:
Предположим, что в нашем магазине есть товары с ценами от 10 до 1000 долларов.
- Нижняя граница: 10 долларов
- Проверяем, что при вводе цены ниже 10 долларов в фильтре отображаются толь товары стоимостью 10 долларов и выше.
- Проверяем, что товары с ценой 9 долларов или ниже не отображаются.
- Внутренние значения: 100 долларов (в середине диапазона)
- Проверяем, что при вводе цены 100 долларов в фильтре отображаются товары со стоимостью ровно 100 долларов.
- Проверяем, что товары со стоимостью ниже 100 долларов и выше 100 долларов отображаются правильно.
- Верхняя граница: 1000 долларов
Остальные техники тест-дизайна
Остальные техники тест-дизайна с которыми Вы можете ознакомиться самостоятельно и которые применяются гораздо реже чем выше перечисленные:
Попарное тестирование
Попарное тестирование (pairwise testing) — это техника формирования наборов тестовых данных из полного набора входных данных в системе, которая позволяет существенно сократить количество тест-кейсов.
Более простое объяснение: метод комбинаторики, который позволяет комбинацией двух случаев (например, Exel - тестируем Формат текста - берем шрифт и размер, то при этом взаимодействии будет сконцентрировано наибольшее количество дефектов) выявить наибольшее количество дефектов.
Если берется взаимодействие трех случаев, процент концентрации дефектов снижается.
То есть это достаточно точный метод, который позволяет с минимальными усилиями, с минимальным количеством тестовых случаев, провести тестирование.
Нужно протестировать все эти сочетания. Если составлять все тесты, то это получается 96 тестов (то есть нужно перемножить все значения 2*2*2*2*3*2)
Для проведения попарного тестирования (Pairwise testing) существует 2 подхода:
На основании таблички выше, мы должны создать свою для попарного тестирования:
- Первый столбец - это шрифт. На первое место ставим тот параметр, который имеет наибольшее количество значений.
Строки в столбце заполняем по 2 значения каждого параметра. То есть 2 раза Arial (друг под другом), 2 раза Colibri, 2 раза TNR - Остальные параметры должны разместить по мере их убывания.
А дальше просто расставляем чтобы образовались пары (см. таблицу ниже).
В этом случае будет 8 тестов и сможем обнаружить 97% дефектов. А в случае, если проводить каждый тестовый случай - будет 96 тестов и обнаружено 100% дефектов. Разница в 3% компенсируется большой экономией времени.
Для автоматического составления плана Pairewise testing воспользуйся этим инструментом
Попарное тестирование (pairwise testing) - техника тестирования методом черного ящика, при которой тестовые сценарии разрабатываются таким образом, чтобы выполнить тестирование для всех комбинаций параметр-значение
Для формирования пар используется два подхода: ортогональные массивы и алгоритм All Pairs. В практике тестирования вы будете использовать последний, поэтому давайте сконцентрируемся на нем.
Алгоритм All Pairs позволяет генерировать все пары автоматически. Самым популярным инструментом для этого является PICT, но существует еще несколько десятков других решений. Подробнее об использовании PICT в видео-уроке.
Выходные данные полученные этим способом могут отличаться от данных, полученных в результате применения ортогональных массивов. Про ортогональные массивы можно прочитать в пособии Lee Copeland, «A practitioner’s guide to software test design».
Давайте рассмотрим пример применения этого алгоритма с тестированием фильтрации на примере интернет-магазина.
Пользователь может осуществить фильтрацию по следующем параметрам:
- Цвет: красный, белый, черный, серый
- Размер: S, M, L, XL
- Пол: мужской, женский, унисекс
- Доставка: есть, нет
Общее количество всех проверок без применения попарного тестирования: 4*4*3*2 = 96.
Согласитесь, что проводить 96 тестов всех комбинаций времязатратно. Для оптимизации нам пригодится Pairwise.
Согласно этой технике, необходимо протестировать взаимодействие всех пар параметров и их значений, что будет соответствовать практически полному тестовому покрытию, если бы мы тестировали все комбинации.
Для выполнения задания будем использовать ресурс https://pairwise.teremokgames.com, который не требует предварительной установки.
1. Создадим таблицу с параметрами и значениями. Всегда начинаем с параметра, у которого больше всего значений.
2. Для генерации пар необходимо нажать кнопку
3. После нажатия сформируется таблица с необходимыми тестовыми данными. Количество проверок сократится с 96 до 16. Таблицу необходимо использовать для создания чек-листа или тест-кейсов.
Тестирование на основе состояний и переходов
Тестирование на основе состояний и переходов (State-Transition Testing) — применяется для фиксирования требований и описания дизайна приложения.
Таблицы принятия решений
Таблицы принятия решений (Decision Table Testing) — техника тестирования, основанная на методе чёрного ящика, которая применяется для систем со сложной логикой.
Доменный анализ
Доменный анализ (Domain Analysis Testing) — это техника основана на разбиении диапазона возможных значений переменной на поддиапазоны, с последующим выбором одного или нескольких значений из каждого домена для тестирования.
Сценарий использования
Сценарий использования (Use Case Testing) — Use Case описывает сценарий взаимодействия двух и более участников (как правило — пользователя и системы).
Дополнения к уроку к граничным значениям
1. Существует 2 подхода к граничным значениям:
- 2 граничных значения на границе (значение ниже/выше границы и значение границы).
Пример: Мы можем ввести в поле от 2 до 6 букв. Границы для позитивного класса 2 и 6. Граничные значения 1, 2 и 6, 7 - 3 граничных значения на границе (граница, значение выше граничного и ниже граничного).
Пример: Мы можем ввести в поле от 2 до 6 букв. Границы для позитивного класса 2 и 6. Граничные значения 1, 2, 3 и 5, 6, 7
2. Граничные значения определяются как для позитивных, так и негативных классов.
3. Вне зависимости от того, есть ли у нас отдельный класс с 0 или пустым значением, его тоже стоит протестировать отдельно.
4. Значение из середины можно не тестировать и уж тем более указывать в граничные значения.
5. Если в поле можно ввести буквы - не надо ограничиваться только буквами. Числа, спецсимволы должны быть тоже проверены. А так же стоит проверять инъекции.
6. Классы эквивалентности можно использовать и для других аспектов тестирования, не только полей для ввода. Например, в случае организации мобильной лаборатории вы можете выделить устройство по одинаковым характеристикам в класс, и тестировать определенные кейсы только на одном девайсе.
7. Если в поле есть ограничение на количество символов и одновременно валидация на тип данных, то включайте в тестовые данные значения, попадающие в этот диапазон. Например, в поле можно ввести от 2 до 6 чисел. Тестирование с буквами и спецсимволами начинайте от 2 символов. Иначе есть вероятность что валидация не сработает и не будет проверена.
8. Не забывайте о самых неочевидных характеристиках для типов данных.
Например, буквы могут быть в разном регистре или написаны на разной раскладке. Числа могут быть быть целыми и десятичными. Все это стоит учесть при тестировании и в случае анализа требований задать уточняющие вопросы.
9. В случае числа обращайте внимание на количество знаков после запятой. Они будут индикаторами того, какие граничные значения стоит тестировать.
Пример: поле принимает значения от 1.00 до 3.00. Значит граничные значения для позитивного класса будут следующие: 0.99, 1.00, 1.01 и 2.99, 3.00, 3.01
10. Классический подход к граничным значениям предполагает использовать значения от -∞ до +∞. Само собой не всегда есть возможность ввести такие величины. Поэтому допустимо начинать с того значения, которое можно ввести. Как минимум, это 1 символ или пустое значение в зависимости от требований.