# Попарное тестирование

### Что такое попарное тестирование <a href="#definition" id="definition"></a>

Попарное тестирование — это одна из техник тест-дизайна, основанная на комбинаторике и разделению входных параметров «по парам» (почему и называется pairwise testing). Проводится комбинирование вариантов и подбор нужных, то есть оцениваются все возможные комбинации (сочетания) входных переменных, и из них выбираются только нужные (значимые). Техника основана на том, что 99,9…% дефектов возникают при взаимодействии не более двух факторов одновременно.

Преимущество техники состоит в экономии времени и усилий, поскольку так называемый «полный исчерпывающий подход» (exhaustive), когда вручную (или даже автоматически) тестируются абсолютно все сочетания параметров, в 99% случаев оказывается избыточным.

Не путать с [«парным тестированием» (](https://testengineer.ru/chto-takoe-ad-hoc-testirovanie/#:~:text=3.-,%D0%9F%D0%B0%D1%80%D0%BD%D0%BE%D0%B5%20%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5,-%D0%9F%D0%B0%D1%80%D0%BD%D0%BE%D0%B5%20%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D1%85%D0%BE%D0%B6%D0%B5)*pair testing*), методом командной работы в ИТ, когда создаются пары из тестировщика и другого тестировщика/разработчика/бизнес-аналитика для работы над участком проекта.

### Быстрый пример <a href="#example" id="example"></a>

QA-команде передали приложение, в которое пользователь должен вводить свои значения. Всего 10 полей ввода, может быть по 10 вариантов в каждом. Получается всего 10х10=100 комбинаций нужно будет протестировать, если пойти по ошибочному пути «[исчерпывающего тестирования](https://testengineer.ru/exhaustive-testing/)».&#x20;

Или, например, есть простое приложение, в которое ввод подается выбором значений из таких объектов ввода: выпадающего списка (с числами от 0 до 9), чекбокса, радиокнопки, текстового поля, и кнопки ОК. Текстовое поле принимает только числа от 0 до 100. Получаются варианты следующие:

Список: `0,1,2,3,4,5,6,7,8,9`

Чекбокс: `Отмечен / нет`

Радиокнопка: `Выбрана / не выбрана`

Текстовое поле: `числа 0…100`

Сколько же тест-кейсов нужно создать? Невероятно много. *Исчерпывающее тестирование* такого приложения предполагает (умножаем все количества вариантов) 10\*2\*2\*100 = 4000 тест-кейсов. Если же к этому добавить «негативные варианты» (то есть с вводом заведомо некорректных значений, [а так обязательно случается](https://testengineer.ru/negativnoe-testirovanie-chto-ehto/) в реальном мире), то количество будет «сильно выше» 4000.&#x20;

Как же сократить это количество, упрощая себе задачу? То есть, в чем заключается суть попарного тестирования?

Во первых: что здесь можно сократить? Нельзя — варианты радиокнопки и чекбокса, они всегда будут иметь только возможных 2 значения. С текстовым полем можно ограничиться тремя числами: валидное целое, невалидное целое, буква или спецсимвол. Со списком: здесь предположим, для упрощения, что значение будет или 0, или “любое другое кроме 0”, то есть получается только 2 варианта, «0» и «другое». Считаем количество вариантов (тест-кейсов) теперь: 2\*2\*2\*3 = всего 24. То есть, при «обычном» подходе у нас 24 тест-кейса, что уже неплохо.

Идем дальше по пути сокращения:

1. Упорядочиваем объекты ввода так, чтобы объект ввода с самым большим количеством вариантов шел первым, и т.п.
2. Делаем таблицу. Список у нас будет принимать 2 значения.
3. Следующая колонка — чекбокс, тоже 2 значения.
4. Проверяем, что у нас «покрыты» все комбинации списка и чекбокса
5. То же делаем с радиокнопкой (2 значения)
6. Проверяем, что все пары «покрыты».

| Текстовое поле   | Выпадающий список        | Чекбокс    | Радиокнопка |
| ---------------- | ------------------------ | ---------- | ----------- |
| Валидное целое   | 0                        | Отмечен    | Включена    |
| Валидное целое   | “Другое значение” (не 0) | Не отмечен | Выключена   |
| Невалидное целое | 0                        | Отмечен    | Включена    |
| Невалидное целое | “Другое значение”        | Не отмечен | Выключена   |
| Буква            | 0                        | Отмечен    | Включена    |
| Буква            | “Другое значение”        | Не отмечен | Выключена   |

Таким образом, пользуясь техникой попарного тестирования, сократили количество тест-кейсов сначала с 4000 до 24, затем до 6 как в таблице, что уже вполне посильно. И при этом надежность такого метода вполне нормальная.

### Полезности метода <a href="#advantages" id="advantages"></a>

* Уменьшает количество тест-кейсов
* Позволяет быстро повысить [тестовое покрытие](https://testengineer.ru/testovoe-pokritie/)&#x20;
* Достаточно эффективно повышает % найденных багов
* Ускоряет создание и выполнение тест-кейсов
* Снижает издержки проекта

### Недостатки <a href="#disadvantages" id="disadvantages"></a>

* Не работает с некоторыми типами переменных
* Нужен опыт в определении комбинаций
* Трудоемкость


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://qabook.gitbook.io/start/teoriya-testirovaniya/test-dizain/poparnoe-testirovanie.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
