Попарное тестирование — это одна из техник тест-дизайна, основанная на комбинаторике и разделению входных параметров «по парам» (почему и называется pairwise testing). Проводится комбинирование вариантов и подбор нужных, то есть оцениваются все возможные комбинации (сочетания) входных переменных, и из них выбираются только нужные (значимые). Техника основана на том, что 99,9…% дефектов возникают при взаимодействии не более двух факторов одновременно.
Преимущество техники состоит в экономии времени и усилий, поскольку так называемый «полный исчерпывающий подход» (exhaustive), когда вручную (или даже автоматически) тестируются абсолютно все сочетания параметров, в 99% случаев оказывается избыточным.
Не путать с «парным тестированием» (pair testing), методом командной работы в ИТ, когда создаются пары из тестировщика и другого тестировщика/разработчика/бизнес-аналитика для работы над участком проекта.
Матан
Если нужно разобраться более фундаментально, на помощь придет «матан», а именно такой раздел математики как комбинаторика: попарное тестирование является одним из частных случаев так называемого «тестирования N пар», или ортогональных матриц (подробнее по ссылке).
Видео 33. Pairwise testing. Попарное тестирование. Программа PICT для попарного тестирования
Быстрый пример
QA-команде передали приложение, в которое пользователь должен вводить свои значения. Всего 10 полей ввода, может быть по 10 вариантов в каждом. Получается всего 10х10=100 комбинаций нужно будет протестировать, если пойти по ошибочному пути «исчерпывающего тестирования».
Или, например, есть простое приложение, в которое ввод подается выбором значений из таких объектов ввода: выпадающего списка (с числами от 0 до 9), чекбокса, радиокнопки, текстового поля, и кнопки ОК. Текстовое поле принимает только числа от 0 до 100. Получаются варианты следующие:
Чекбокс: Отмечен / нет
Радиокнопка: Выбрана / не выбрана
Текстовое поле: числа 0…100
Сколько же тест-кейсов нужно создать? Невероятно много. Исчерпывающее тестирование такого приложения предполагает (умножаем все количества вариантов) 10*2*2*100 = 4000 тест-кейсов. Если же к этому добавить «негативные варианты» (то есть с вводом заведомо некорректных значений, а так обязательно случается в реальном мире), то количество будет «сильно выше» 4000.
Как же сократить это количество, упрощая себе задачу? То есть, в чем заключается суть попарного тестирования?
Во первых: что здесь можно сократить? Нельзя — варианты радиокнопки и чекбокса, они всегда будут иметь только возможных 2 значения. С текстовым полем можно ограничиться тремя числами: валидное целое, невалидное целое, буква или спецсимвол.
Со списком: здесь предположим, для упрощения, что значение будет или 0, или “любое другое кроме 0”, то есть получается только 2 варианта, «0» и «другое». Считаем количество вариантов (тест-кейсов) теперь: 2*2*2*3 = всего 24. То есть, при «обычном» подходе у нас 24 тест-кейса, что уже неплохо.
Идем дальше по пути сокращения:
- Упорядочиваем объекты ввода так, чтобы объект ввода с самым большим количеством вариантов шел первым, и т.п.
- Делаем таблицу. Список у нас будет принимать 2 значения.
- Следующая колонка — чекбокс, тоже 2 значения.
- Проверяем, что у нас «покрыты» все комбинации списка и чекбокса
- То же делаем с радиокнопкой (2 значения)
- Проверяем, что все пары «покрыты».
Таким образом, пользуясь техникой попарного тестирования, сократили количество тест-кейсов сначала с 4000 до 24, затем до 6 как в таблице, что уже вполне посильно. И при этом надежность такого метода вполне нормальная.
Pairwise Testing | Обзор веб инструментов для попарного тестирования
Полезности метода
- Уменьшает количество тест-кейсов
- Позволяет быстро повысить тестовое покрытие
- Достаточно эффективно повышает % найденных багов
- Ускоряет создание и выполнение тест-кейсов
- Снижает издержки проекта
Недостатки
- Не работает с некоторыми типами переменных
- Нужен опыт в определении комбинаций
- Трудоемкость
Источник: testengineer.ru
Путь обеспечения качества
Как многие уже знают, «протестировать все невозможно» — и это утверждение в частности, базируется на том, что полный перебор всех параметров некоторой системы и проверка ее работы при таких параметрах займет миллиарды лет, даже при условии что каждый тест занимает 1 миллисекунду и даже если их запускать параллельно (просто ОЧЕНЬ много возможных комбинаций).
Но к счастью, умные люди уже придумали и доказали почему нет смысла проверять все-все комбинации всех параметров (ведь есть классы эквивалентности), а так же придумали как составить список, содержащий наименьшее число комбинаций всех параметров так, чтобы при этом проверить все уникальные комбинации каждой пары параметров (спасибо Алексею за замечание, обновил это предложение).
Есть исследования (http://www.pairwise.org/papers.asp), которые доказывают, что подавляющее число ошибок в программном обеспечении так или иначе связано с комбинацией оригинальных значений любых двух параметров сложной системы. Конечно, есть ошибки, для воспроизведения которых может потребоваться определенная комбинация определенных значений сразу трех параметров, но вероятность воспроизведения такой ошибки значительно меньше, чем вероятность воспроизведения ошибки, которая воспроизводится при комбинации значений двух параметров.
Поэтому придумали Pairwise Testing:
Pairwise Testing — техника составления комбинаций значений для нескольких параметров таким способом, который позволяет составить наименьшее число комбинаций и при этом обязательно соблюсти условие, что в этих комбинациях будут присутствовать все возможные парные комбинации значений всех параметров.
Разберем на простом примере. Есть три параметра:
— Возраст (разбиваем на категории — до 18ти, от 18ти до 24, от 24х до 35ти и от 35 до бесконечности)
— Пол (М/Ж)
— Цвет глаз (карие, голубые, серые, зеленые, черные)
Теперь нам нужно составить комбинации из этих параметров так, чтобы в этих комбинациях для каждого значения параметра «Возраст» присутствовали все значения полей «Пол» и «Цвет глаз». И то же самое для всех остальных параметров. При этом обратите внимание, что это отличается от полного Декартового произведения (где мы бы просто написали все возможные комбинации всех значений), потому что перед нами стоит задача максимально сократить число комбинаций.
Для составления набора комбинаций воспользуемся инструментом PICT (кросс платформенный, с открытым исходным кодом)
Создадим файл data.txt:
И сгенерируем уникальные комбинации, используя метод pairwise:
Эти комбинации мы теперь можем использовать в наших тестах и можно быть уверенными, что эти комбинации отловят 80+% всех багов (эмпирически научно доказано, так что пользуйтесь).
В рассмотренном примере PICT сгенерировал 20 комбинаций, а полное декартово произведение бы дало 40 комбинаций.
Обратите внимание, что метод особенно хорошо работает там, где декартово произведение дало бы нам больше 1000 уникальных комбинаций, при этом pairwise техника может помочь значительно сократить количество таких комбинаций, что сделает задачу «протестировать все уникальные комбинации» — вполне выполнимой (но конечно же всегда есть вероятность супер редких багов, для воспроизведения которых потребуется определенная комбинация 3-4 параметров — помним об этом).
Источник: xwizard-test.blogspot.com
Попарное тестирование: суть техники, инструменты и примеры
Что такое попарное тестирование и почему оно является эффективной техникой тест-дизайна? Поговорим об этом ниже. Статья предназначена для начинающих специалистов по тестированию.
В этой статье пойдет речь о комбинаторной технике попарного тестирования (известной также как Pairwise testing или All-pairs testing).
Умное тестирование служит во благо экономии времени. Часто команда тестировщиков вынуждена работать в рамках жестких сроков 90% своего времени. По этой причине техники тест-дизайна должны быть эффективными, чтобы с их помощью можно было достичь максимально возможной степени покрытия тестами и вероятности обнаружения дефектов.
Что такое попарное тестирование?
Попарное тестирование — это техника тест-дизайна, которая обеспечивает полное тестовое покрытие.
ISTQB определяет попарное тестирование как технику тест-дизайна методом черного ящика, при которой тест-кейсы создаются таким образом, чтобы выполнить все возможные отдельные комбинации каждой пары входных параметров.
Результат работы приложения зависит от многих факторов, например, входных параметров, переменных состояний и конфигураций среды. Для определения возможных значений могут быть полезны такие техники, как анализ граничных значений и использование классов эквивалентности. Однако тестировать все возможные комбинации значений для всех факторов — непрактично. Поэтому, чтобы удовлетворить все факторы, генерируется подмножество комбинаций.
Техника попарного тестирования очень помогает при разработке тестов для приложений, включающих множество параметров. Тесты разрабатываются таким образом, что для каждой пары входных параметров существуют все возможные комбинации этих параметров. Тестовые наборы (тест-сьюты, Test suite) охватывают все комбинации. Поэтому техника хоть и не обеспечивает исчерпывающее тестирование, но все же является эффективной для поиска ошибок.
Давайте посмотрим, как применять технику попарного тестирования на примере.
Пример применения попарного тестирования
Приложение для заказа автомобиля:
- С помощью приложения можно покупать и продавать машины. Приложение должно поддерживать оказание услуг в Дели и Мумбаи.
- В приложении должны содержаться регистрационные номера, которые могут быть валидными и невалидным. Оно должно разрешать продажу следующих марок автомобилей: BMW, Audi и Mercedes.
- Доступны два типа бронирования: бронирование через интернет и в офлайн-магазине.
- Заказы доступны к размещению только в рабочие часы.
Шаг 1. Перечислим задействованные переменные.
- Категория заказа
а. Купить
б. Продать - Местоположение
а. Дели
б. Мумбаи - Марка автомобиля
а. BMW
б. Audi
в. Mercedes - Регистрационные номера
а. Валидные (5000)
б. Невалидные - Тип заказа
а. Заказ через Интернет
б. Заказ в магазине - Время заказа
а. Рабочие часы
б. Нерабочие часы
Если тестировать все возможные допустимые комбинации: 2 X 2 X 3 X 5000 X 2 X 2 = получаем 240 тысяч комбинаций 🙁 Кроме того, недопустимых комбинаций вообще может быть бесконечное количество.
Шаг №2: Давайте упростим
- Используем умную репрезентативную выборку.
- Используем классы эквивалентности и граничные значения, даже если данные — непрерывные.
- Сокращаем регистрационные номера до двух типов:
- Валидный регистрационный номер
- Невалидный регистрационный номер
Теперь посчитаем количество возможных комбинаций: = 2 X 2 X 3 X 2 X 2 X 2 = 96
Шаг 3. Упорядочивание задействованных переменных и значений.
Когда мы классифицируем задействованные переменные и значения, то получим что-то вроде этого:
Теперь отсортируем переменные так, чтобы переменные с наибольшим количеством значений шли первыми, а с наименьшим — последними.
Шаг 4. Расставляем переменные для создания набора тестов.
Давайте начнем заполнять таблицу столбец за столбцом. Изначально таблица выглядит примерно таким образом. Три значения в столбце «Марка авто» (переменная с наибольшим количеством значений) напишем дважды каждое (потому что следующая переменная, «Категория заказа», содержит два значения.
Столбец «Категория заказа» содержит два значения. И именно столько раз нам надо вставить значения первого столбца «Марка авто».
Для каждого набора значений в первом столбце мы помещаем оба значения второго столбца. Повторяем то же самое для третьего столбца.
Теперь у нас есть ПокупкаМумбаи. Есть ПродажаДели. Давайте поменяем значения из второго набора в третьем столбце.
Так уже выглядит получше.
Повторим шаги для столбцов 3 и 4.
Если сравнить столбцы 3 и 4, каждое значение из столбца 3 имеет пару с обоими значениями из столбца 4. Но если сравнить второй и четвертый столбец, у нас есть комбинации ПокупкаНевалидный, но нет комбинаций ПокупкаВалидный. Следовательно, нам надо поменять местами последний набор значений в четвертом столбце.
С шестым столбцом (Время заказа) у нас проблемка: не хватает пар ПокупкаРабочие часы. Нам не удастся получить недостающие пары, поменяв значения местами, поскольку мы ранее уже поменяли местами все строки, и если мы снова начнём их менять, то есть риск пропустить другие возможные пары. Поэтому добавим еще два тестовых случая, которые содержат эти пары. Заполним пустые строки!
Теперь мы заполним пустые ячейки на свое усмотрение, потому что другие значения переменных являются произвольными (обозначим знаком тильды ~).
Итого мы получили всего 8 тест-кейсов вместо 96.