Что такое попарное тестирование и почему оно является эффективной техникой тест-дизайна? Поговорим об этом ниже. Статья предназначена для начинающих специалистов по тестированию.

В этой статье пойдет речь о комбинаторной технике попарного тестирования (известной также как Pairwise testing или All-pairs testing). 

Умное тестирование служит во благо экономии времени. Часто команда тестировщиков вынуждена работать в рамках жестких сроков 90% своего времени. По этой причине техники тест-дизайна должны быть эффективными, чтобы с их помощью можно было достичь максимально возможной степени покрытия тестами и вероятности обнаружения дефектов.

Что такое попарное тестирование?

Попарное тестирование — это техника тест-дизайна, которая обеспечивает полное тестовое покрытие.

ISTQB определяет попарное тестирование как технику тест-дизайна методом черного ящика, при которой тест-кейсы создаются таким образом, чтобы выполнить все возможные отдельные комбинации каждой пары входных параметров.

Результат работы приложения зависит от многих факторов, например, входных параметров, переменных состояний и конфигураций среды. Для определения возможных значений могут быть полезны такие техники, как анализ граничных значений и использование классов эквивалентности. Однако тестировать все возможные комбинации значений для всех факторов — непрактично. Поэтому, чтобы удовлетворить все факторы, генерируется подмножество комбинаций. 

Техника попарного тестирования очень помогает при разработке тестов для приложений, включающих множество параметров. Тесты разрабатываются таким образом, что для каждой пары входных параметров существуют все возможные комбинации этих параметров. Тестовые наборы (тест-сьюты, Test suite) охватывают все комбинации. Поэтому техника хоть и не обеспечивает исчерпывающее тестирование, но все же является эффективной для поиска ошибок.

Давайте посмотрим, как применять технику попарного тестирования на примере.

Пример применения попарного тестирования

Приложение для заказа автомобиля:

  • С помощью приложения можно покупать и продавать машины. Приложение должно поддерживать оказание услуг в Дели и Мумбаи.

  • В приложении должны содержаться регистрационные номера, которые могут быть валидными и невалидным. Оно должно разрешать продажу следующих марок автомобилей: BMW, Audi и Mercedes.

  • Доступны два типа бронирования: бронирование через интернет и в офлайн-магазине.

  • Заказы доступны к размещению только в рабочие часы.

Шаг 1. Перечислим задействованные переменные.

  1. Категория заказа
    а. Купить
    б. Продать

  2. Местоположение
    а. Дели
    б. Мумбаи

  3. Марка автомобиля
    а. BMW
    б. Audi
    в. Mercedes

  4. Регистрационные номера
    а. Валидные (5000)
    б. Невалидные

  5. Тип заказа
    а. Заказ через Интернет
    б. Заказ в магазине

  6. Время заказа
    а. Рабочие часы
    б. Нерабочие часы

Если тестировать все возможные допустимые комбинации: 2 X 2 X 3 X 5000 X 2 X 2 = получаем 240 тысяч комбинаций :( Кроме того, недопустимых комбинаций вообще может быть бесконечное количество.

Шаг №2: Давайте упростим

  • Используем умную репрезентативную выборку.

  • Используем классы эквивалентности и граничные значения, даже если данные — непрерывные.

  • Сокращаем регистрационные номера до двух типов:

  1. Валидный регистрационный номер

  2. Невалидный регистрационный номер

Теперь посчитаем количество возможных комбинаций: = 2 X 2 X 3 X 2 X 2 X 2 = 96

Шаг 3. Упорядочивание задействованных переменных и значений.

Когда мы классифицируем задействованные переменные и значения, то получим что-то вроде этого:

Теперь отсортируем переменные так, чтобы переменные с наибольшим количеством значений шли первыми, а с наименьшим — последними.

Шаг 4. Расставляем переменные для создания набора тестов.

Давайте начнем заполнять таблицу столбец за столбцом. Изначально таблица выглядит примерно таким образом. Три значения в столбце «Марка авто» (переменная с наибольшим количеством значений) напишем дважды каждое (потому что следующая переменная, «Категория заказа», содержит два значения.

Столбец «Категория заказа» содержит два значения. И именно столько раз нам надо вставить значения первого столбца «Марка авто».

Для каждого набора значений в первом столбце мы помещаем оба значения второго столбца. Повторяем то же самое для третьего столбца.

Теперь у нас есть Покупка&Дели, но нет Покупка&Мумбаи. Есть Продажа&Мумбаи, но нет Продажа&Дели. Давайте поменяем значения из второго набора в третьем столбце.

Так уже выглядит получше.

Повторим шаги для столбцов 3 и 4.

Если сравнить столбцы 3 и 4, каждое значение из столбца 3 имеет пару с обоими значениями из столбца 4. Но если сравнить второй и четвертый столбец, у нас есть комбинации Покупка&Валидный и Продажа&Невалидный, но нет комбинаций Покупка&Невалидный и Продажа&Валидный. Следовательно, нам надо поменять местами последний набор значений в четвертом столбце.

С шестым столбцом (Время заказа) у нас проблемка: не хватает пар Покупка&Нерабочие часы и Продажа&Рабочие часы. Нам не удастся получить недостающие пары, поменяв значения местами, поскольку мы ранее уже поменяли местами все строки, и если мы снова начнём их менять, то есть риск пропустить другие возможные пары. Поэтому добавим еще два тестовых случая, которые содержат эти пары. Заполним пустые строки!

Теперь мы заполним пустые ячейки на свое усмотрение, потому что другие значения переменных являются произвольными (обозначим знаком тильды ~).

Итого мы получили всего 8 тест-кейсов вместо 96.

Мы увидели, насколько эффективной может быть техника попарного тестирования. Она здорово повышает шансы найти баги, при этом сохранив время.

Однако эта техника имеет и некоторые ограничения. Она не сработает, если:

  • выбранные для тестирования значения некорректны;

  • мало внимания уделяется комбинациям, которые могут привести к ошибке с высокой долей вероятности;

  • взаимодействие между переменными недостаточно изучено.

Инструменты попарного тестирования:

Приведем примеры популярных инструментов, которые помогают эффективно автоматизировать процесс дизайна тест-кейсов путем создания компактного набора значений параметров в качестве желаемых тест-кейсов:

  • PICTПопарное независимое комбинаторное тестирование от Microsoft Corp.

  • IBM FoCuSЕдиное решение для функционального покрытия от IBM.

  • ACTSРасширенная комбинаторная система тестирования от NIST, агентства правительства США.

  • Hexawise

  • Jenny

  • Pairwise от Inductive AS

  • VPTag бесплатный инструмент попарного тестирования

Заключение:

Техника попарного тестирования помогает существенно уменьшить количество комбинаций проверок, достаточных для обеспечения необходимого уровня качества программного обеспечения. Это в самом деле умная техника тест-дизайна, которая гарантирует беспроигрышный результат как с точки зрения усилий и задействованных ресурсов, так и с точки зрения эффективности тестирования.

Об этой технике стоит помнить на этапе планирования тестирования. Независимо от того, генерируются ли тестовые случаи вручную или используется какой-либо вспомогательный инструмент, она становится необходимым компонентом тест-плана, потому что влияет на оценку тестирования.

Все актуальные техники и инструменты тестировщика можно освоить под руководством экспертов на специализации "QA Automation Engineer" в OTUS.