Pairwise тестирование. Почему, зачем и как?

от автора

Всем привет! Попарное тестирование (pairwise testing) — одна из самых распространённых техник тест дизайна. Уверена, вы уже про неё читали в книгах, сертификациях, статьях…

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

Что это?

Чтобы ответить на этот вопрос, предлагаю заглянуть в глоссарий терминов ISTQB:

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

На английском в том же самом глоссарии звучит несколько иначе:

Pairwise testing — a black-box test technique in which test cases are designed to exercise pairs of parameter-value pairs.

Специально привожу оба определения, чтобы показать, что в определении на русском языке дважды упущено одно очень важное слово: pairs (пары). Поэтому немного изменим определение, чтобы оно стало точнее:

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

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

Почему пары?

Тестирование предполагает довольно много проверок входных и выходных данных, сценариев, негативных кейсов и т.д. И в арсенале специалистов множество техник, которые помогают оптимизировать переборы параметров.

Также мы помним, что одна из задач тестирования — предоставление информации о качестве системы и обеспечение этого самого качества на определённом уровне. А о каком качестве можно говорить, если при тестировании мы осознанно не рассматриваем часть кейсов?

Ответ на этот вопрос вытекает из эмпирических исследований, которые выявили, например, что для приложения NASA: 67% ошибок были спровоцированы одним параметром, 93% проблем были вызваны одним параметром или взаимодействием двух параметров, 98% — одним параметром, взаимодействием двух параметров или взаимодействием трёх параметров.

Сводные данные для разных приложений и девайсов отображены на графике (график взят из книги «Introduction to Combinatorial Testing» By D. Richard Kuhn, Raghu N. Kacker, Yu Lei):

Результаты исследований

Результаты исследований

По оси абсцисс — количество параметров провоцирующих проблемы, а по оси ординат — общий процент ошибок. Из приведенного графика авторы делают вывод:

Most failures are induced by single factor faults or by the joint combinatorial effect (interaction) of two factors, with progressively fewer failures induced by interactions between three or more factors.

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

Применение

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

Для параметров с большим количеством значений может требоваться предварительный отбор значений (например, эквивалентным разбиением) и только потом их использование в попарном тестировании.

Принцип

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

Попарные комбинации можно получить на основе нескольких подходов (подробнее можно почитать в книге Lee Copeland «A Practitioner’s Guide to Software Test Design»):

  • Ортогональные массивы. Здесь идея в том, чтобы найти/сгенерировать подходящий ортогональный массив и затем доработать данные. Этот подход может дать больше комбинаций из-за «сбалансированности» ортогональных массивов.

  • Алгоритм Allpairs генерирует все пары комбинаций, не прибегая к ортогональным массивам или чему-то ещё.

Примеры

Рассмотрим ручную «генерацию» данных для нескольких простых примеров:

Пример 1. Рассмотрим расчёт стоимости телефона по двум параметрам:

  • Цвет: белый и чёрный.

  • Объём памяти: 128Гб и 256Гб.

Тогда попарный перебор будет совпадать с полным перебором, и мы получим 4 набора:

Пример 1

Пример 1

Пример 2. Если у нас есть те же два параметра, но теперь они принимают больше значений:

  • Цвет: белый, чёрный, синий.

  • Объём памяти: 128Гб и 256Гб.

Тогда получим 6 комбинаций при полном переборе и попарном переборе:

Пример 2

Пример 2

Пример 3. Теперь стоимость будет зависеть от трёх параметров:

  • Цвет: белый, чёрный, синий.

  • Объём памяти: 128Гб, 256Гб, 512Гб.

  • Оперативная память: 4Гб, 8Гб.

Тогда полный перебор даст 3 * 3 * 2 = 18 комбинаций, а попарный перебор — всего 9 (в данном случае просто заполняем данные по столбцам и затем проверяем пары):

Пример 3

Пример 3

При попарном переборе мы смотрим, чтобы каждое значение параметра использовалось с каждым значением всех других параметров. Т.е. каждый Цвет используется с каждым значением параметра Объём памяти и с каждым значением параметра Оперативная память. Каждое значение Объёма памяти используется с каждым Цветом и значением параметра Оперативная память и т.д.

Пример 4. Далее добавим ещё параметров, от которых зависит цена на телефон:

  • Цвет: белый, чёрный, синий, серый, жёлтый.

  • Объём памяти: 128Гб, 256Гб, 512Гб, 1Тб.

  • Оперативная память: 4Гб, 8Гб, 16Гб.

  • Бренд: бренд1, бренд2, бренд3, бренд4.

  • Наличие или отсутствие зарядного устройства в комплекте.

Тогда полный перебор даст 5 * 4 * 3 * 4 * 2 = 480 комбинаций, что не так уж и много, конечно. Но попарный перебор даст всего 20 комбинаций, что намного меньше 480:

Пример 4

Пример 4

Поясню, как получились эти данные:

  1. Считаем количество строк (перемножаем два наибольших количества значений параметров).

  2. Заполняем столбцы, чередуя значения параметров:

    Шаг 2

    Шаг 2
  3. Проверяем пары комбинаций и видим, что 128Гб памяти используется только с брендом1. Сдвигаем значения параметра Бренд и таким образом «перемешиваем» данные:

    Шаг 3

    Шаг 3
  4. Проверяем пары комбинаций и видим, что 4Гб оперативки не используется с брендом2. Дальше начинаем переставлять значения, периодически проверяя комбинации. В итоге один из вариантов, который может получится:

    Шаг 4

    Шаг 4

Пример 5. Стоимость будет также зависеть от 5 параметров:

  • Цвет: белый, чёрный, синий, серый, жёлтый.

  • Объём памяти: 128Гб, 256Гб, 512Гб, 1Тб.

  • Оперативная память: 4Гб, 8Гб, 16Гб.

  • Бренд: бренд1, бренд2, бренд3, бренд4.

  • Наличие или отсутствие зарядного устройства в комплекте.

Только теперь есть условия:

  • Цвет белый есть только для бренда2.

  • Если объём памяти 1Тб, тогда оперативная память — 16Гб.

  • Бренд4 поставляется без зарядного устройства.

  • Бренд3 поставляется только в синем и чёрном цветах.

  • Бренд1 не производит телефоны с объёмом памяти 128Гб и оперативной памятью 8Гб.

  • Жёлтый телефон поставляется только брендом2 и только с объёмом памяти 512Гб и оперативной памятью 16Гб с зарядным устройством.

Тогда при составлении тест кейсов изначально нужно учесть условия.

Если условия не учитывать сразу, то довольно большая часть работы будет проведена впустую. Например, применив условия к тест кейсам, полученным в примере 4, половина тест кейсов становится деструктивными:

Пример 4 с применением условий

Пример 4 с применением условий

Если же изначально учесть условия, то получим 181 кейс при полном переборе и 21 кейс при попарном переборе:

Пример 5

Пример 5

Количество тест кейсов

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

Например, для Примера 4 упорядоченный список будет таким: цвет (5), объём памяти (4), бренд (4), оперативная память (3), зарядное устройство (2). Тогда общее количество тест кейсов будет 5 * 4 = 20. Таким образом можно получить минимальное количество тест кейсов, необходимых для покрытия данным методом, если нет ограничений и условий взаимодействия параметров.

Конечно, в реальности у нас возникают ограничения и условия взаимодействия параметров, в таком случае минимальное количество тест кейсов будет другим.

Негативные кейсы

В примерах выше специально опустила все негативные кейсы, точнее рассматривала все кейсы, попадающие под ограничения и условия как деструктивные и их не учитывала.

А что делать, если негативные кейсы нам всё таки нужны? В таком случае рассмотрим все негативные кейсы отдельно так, чтобы в одном негативном кейсе использовалось только одно значение или ограничение.

Например, рассмотрим условия из примера 5 и подготовим для них негативные кейсы:

  • Цвет белый есть только для бренда2.

  • Если объём памяти 1Тб, тогда оперативная память — 16Гб.

  • Бренд4 поставляется без зарядного устройства.

  • Бренд3 поставляется только в синем и чёрном цветах.

  • Бренд1 не производит телефоны с объёмом памяти 128Гб и оперативной памятью 8Гб.

  • Жёлтый телефон поставляется только брендом2 и только с объёмом памяти 512Гб и оперативной памятью 16Гб с зарядным устройством.

Начнём с первых 5 условий (потому что они простые, и мы можем довольно быстро рассмотреть эти кейсы):

Негативные кейсы (часть 1)

Негативные кейсы (часть 1)

«-» означает любое значение.

Теперь остаётся рассмотреть кейсы, противоположные условию «Жёлтый телефон поставляется только брендом2 и только с объёмом памяти 512Гб и оперативной памятью 16Гб с зарядным устройством.». Здесь тоже применим попарный перебор (в реальности, нужно учитывать риски, приоритеты и т.д. и нам может понадобиться другой подход) только теперь для параметров:

  • Цвет: жёлтый.

  • Объём памяти: 128Гб, 256Гб, 512Гб, 1Тб.

  • Оперативная память: 4Гб, 8Гб, 16Гб.

  • Бренд: бренд1, бренд2, бренд3, бренд4.

  • Наличие или отсутствие зарядного устройства в комплекте.

Ограничения будут:

  • Если объём памяти 1Тб, тогда оперативная память — 16Гб.

  • Бренд4 поставляется без зарядного устройства.

  • Бренд3 не поставляется.

  • Бренд1 не производит телефоны с объёмом памяти 128Гб и оперативной памятью 8Гб.

  • Телефон не поставляется брендом2 с объёмом памяти 512Гб и оперативной памятью 16Гб с зарядным устройством.

Тогда получим следующие наборы:

Негативные кейсы (часть 2)

Негативные кейсы (часть 2)

Таким образом, получается 9 + 12 = 21 негативный сценарий.

Инструменты

Вручную комбинации полезно уметь делать, но обычно мы имеем дело с довольно большим количеством параметров и их значений, поэтому расписать комбинации вручную может быть затруднительно.

Здесь нам на помощь приходят инструменты, которые генерируют попарные комбинации. Довольно большой список инструментов (браузерных, консольных, платных, бесплатных и т.д.) можете найти на сайте.

В этой статье рассмотрю 2 инструмента, которыми пользуюсь: Pairwise Online Tool и Pairwise Pict Online и отдельно покажу эксперимент с deepseek.

Pairwise Online Tool — инструмент с удобным интерфейсом, который может генерировать все комбинации и попарные комбинации

В колонках задаются параметры, а в столбцах — значения этих параметров. Условия взаимодействий задаются отдельно и имеют два варианта: cannot exist with и can exist only with:

Pairwise Online Tool для примера 5

Преимущества инструмента:

  1. Удобный интерфейс.

  2. Поддержка кириллицы.

  3. Генерация полного перебора и попарного перебора.

  4. Можно создать постоянную ссылку на подготовленные данные.

  5. Генерирует документ в формате xlsx.

Недостатки инструмента:

  1. Можно задавать только простые условия формата cannot exist with и can exist only with.

  2. Пропускает кейсы, если заданы условия на параметры.

    Например, для примера 5 инструмент сгенерирует 141 кейс (должно быть 181) при полном переборе и потеряет бренд3 совсем, и 7 кейсов (должно быть 21) при попарном переборе и потеряет кейсы с брендом3 и жёлтым цветом:

    Попарные комбинации для примера 5

    Попарные комбинации для примера 5
  3. Генерирует не самое оптимальное количество тест кейсов.

    Например, для примера 4 инструмент сгенерирует 26 кейсов (должно быть 20) при попарном переборе:

    Попарные комбинации для примера 4

    Попарные комбинации для примера 4

Pairwise Pict Online — инструмент, который можно использовать онлайн или установить его на свой ПК (можно скачать здесь).

Pairwise Online Tool для примера 5

Преимущества инструмента:

  1. Удобно задавать и хранить входные данные.

  2. Можно задавать сложные условия.

  3. Генерация в разных форматах (для десктопной версии).

Недостатки инструмента:

  1. Нет поддержки кириллицы.

  2. Генерирует не самое оптимальное количество тест кейсов, но это не точно:) Каждый раз Pict будет генерировать новый набор данных, поэтому с некой попытки количество тест кейсов может стать оптимальным.

    Например, для примера 4 инструмент сгенерирует 23 кейса (должно быть 20) при попарном переборе:

    Попарные комбинации для примера 4

    Попарные комбинации для примера 4

    Для примера 5 инструмент сгенерирует 22 кейса (должно быть 21) при попарном переборе:

    Попарные комбинации для примера 5

    Попарные комбинации для примера 5

deepseek полагаю, знаете, что это:)

Была удивлена, но получилось довольно неплохо. Для примера 4 я задала следующий промпт:

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

— Цвет: белый, чёрный, синий, серый, жёлтый.

— Объём памяти: 128Гб, 256Гб, 512Гб, 1Тб.

— Оперативная память: 4Гб, 8Гб, 16Гб.

— Бренд: бренд1, бренд2, бренд3, бренд4.

— Наличие или отсутствие зарядного устройства в комплекте.

Сделай таблицу

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

Попарные комбинации для примера 4

Попарные комбинации для примера 4

А вот при добавлении условий сильно накосячил:

Попарные комбинации для примера 5. Попытка 1

Попарные комбинации для примера 5. Попытка 1

Потом мы пообщались ещё, но оптимального варианта я так и не добилась. Лучший набор получился такой:

Попарные комбинации для примера 5. Результат

Попарные комбинации для примера 5. Результат

Вместо заключения

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

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

Важно помнить, что pairwise-тестирование — не «серебряная пуля» и требует осознанного подхода. Пробуйте, анализируйте результаты и выбирайте то, что работает именно для вашего проекта.

Еженедельные вопросы по QA, разбор теории, практика, рабочие кейсы и истории из жизни —  в телеграм-канале QA or not QA?.

Присоединяйтесь!


ссылка на оригинал статьи https://habr.com/ru/articles/876580/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *