В таблицах решений из прошлого урока комбинаторный взрыв решался вручную: строки с одинаковым исходом объединялись в одну, потому что условий было три-четыре и заранее было видно, какие сочетания дают одинаковый результат. А что делать, если условий не три, а шесть-семь, и заранее неизвестно, какие комбинации совпадут по исходу? Проверка личного кабинета одновременно зависит от браузера, операционной системы, роли пользователя, способа оплаты и типа устройства — перемножьте количество значений каждого параметра, и перебор легко переваливает за сотню комбинаций. Прогнать их все руками за разумное время нереально.
Чему научишься за этот урок:
— объяснить идею попарного (pairwise) покрытия;
— построить сокращённый набор тестов вручную для нескольких параметров;
— назвать риск, который pairwise сознательно не закрывает, и не выдавать сокращение за полное покрытие.
Комбинаторный взрыв
Два параметра по три значения каждый — это 3×3 = 9 комбинаций, ещё терпимо. Три параметра по три значения — уже 27. Число комбинаций растёт как произведение количества значений каждого параметра, и это видно на реальном примере: пять параметров по три значения каждый — это 3×3×3×3×3 = 243 комбинации. Такое количество параметров у реальной формы или процесса — не редкость: тип устройства, браузер, операционная система, роль пользователя, способ оплаты — набирается быстро. Проверить 243 комбинации вручную для одной фичи — нерациональная трата времени, даже если бы позволяло время.
Идея pairwise: большинство багов — от пары параметров
Практика тестирования комбинаторных систем показывает: подавляющее большинство реальных багов проявляется от взаимодействия ДВУХ параметров одновременно, а не трёх и более сразу. Баг вида «форма не открывается в Safari на телефоне» — это взаимодействие пары «браузер + устройство». Баг, который проявляется только при одновременном сочетании конкретного браузера, конкретного устройства и конкретной роли сразу — статистически редкость.
Отсюда идея попарного покрытия: вместо полного перебора всех комбинаций строится набор тестов, в котором КАЖДАЯ пара значений разных параметров встречается хотя бы в одном тесте — а не каждая тройка, четвёрка и так далее. Набор получается заметно короче полного перебора, но сохраняет способность находить большинство реальных багов.
Пример: браузер × устройство × роль
Три параметра: Браузер (Chrome / Firefox / Safari), Устройство (десктоп / телефон), Роль (ученик / преподаватель). Полный перебор — 3×2×2 = 12 комбинаций.
ПОЛНЫЙ ПЕРЕБОР (12 строк) 1. Chrome десктоп ученик 2. Chrome десктоп преподаватель 3. Chrome телефон ученик 4. Chrome телефон преподаватель 5. Firefox десктоп ученик 6. Firefox десктоп преподаватель 7. Firefox телефон ученик 8. Firefox телефон преподаватель 9. Safari десктоп ученик 10. Safari десктоп преподаватель 11. Safari телефон ученик 12. Safari телефон преподаватель PAIRWISE-НАБОР (6 строк, каждая пара встретилась минимум раз) 1. Chrome десктоп ученик 2. Chrome телефон преподаватель 3. Firefox десктоп преподаватель 4. Firefox телефон ученик 5. Safari десктоп ученик 6. Safari телефон преподаватель
Проверка: пары «браузер + устройство» — все шесть сочетаний (Chrome-десктоп, Chrome-телефон, Firefox-десктоп, Firefox-телефон, Safari-десктоп, Safari-телефон) встретились. Пары «браузер + роль» — все шесть встретились. Пары «устройство + роль» — все четыре встретились. При этом строк не 12, а 6 — вдвое меньше.
Риск pairwise: это компромисс, а не бесплатное сокращение
Pairwise находит баги, которые проявляются от пары параметров. Но он не гарантирует, что найдётся баг, который проявляется только при одновременном сочетании ВСЕХ параметров сразу — например, если календарь записи ломается конкретно в Safari, конкретно на десктопе и конкретно у преподавателя, а по отдельности пары «Safari+десктоп», «Safari+преподаватель» и «десктоп+преподаватель» ничего не показывают. Такая тройка может не встретиться целиком ни в одной строке сокращённого набора, даже если все три пары формально покрыты в разных строках.
Это осознанный компромисс между покрытием и временем, а не бесплатное сокращение тестов. Тестировщик обязан проговорить его вслух заказчику или команде: «мы проверяем пары значений, а не все тройные сочетания — экономим время, принимая риск редкого тройного бага», а не молчаливо выдавать pairwise-набор за полный перебор.
Пример с полигона: оформление заявки на курс
Та же логика применяется к оформлению заявки на нашем полигоне. Параметры: Тариф (базовый / премиум), Способ оплаты (карта / счёт / промокод), Тип клиента (новый / повторный). Полный перебор — 2×3×2 = 12 комбинаций. Вместо всех двенадцати можно вручную построить 6 строк, где каждая пара «тариф-способ оплаты», «тариф-тип клиента» и «способ оплаты-тип клиента» встретится хотя бы раз — точно так же, как в примере с браузером выше, только вместо технических параметров тут параметры оформления заказа.
Итог:
— pairwise — способ управляемо сократить комбинаторный тест-набор, опираясь на то, что большинство реальных багов проявляются от пары параметров;
— набор строится так, чтобы каждая пара значений разных параметров встретилась хотя бы в одном тесте;
— это компромисс, а не бесплатное сокращение: тестировщик обязан уметь назвать риск (пропуск бага от тройного сочетания) вслух, а не выдавать сокращение за полное покрытие.
Контрольный вопрос. Попарное (pairwise) покрытие тестами — это набор тестов, в котором…
Подсказка: Ключевое слово — «пара» значений, а не «все» значения сразу.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Почему при росте числа параметров полный перебор комбинаций быстро становится нереальным для тестирования?
Подсказка: Вспомни пример: 5 параметров по 3 значения дают 243 комбинации.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Есть 4 параметра, у каждого по 2 возможных значения. Сколько всего комбинаций даёт полный перебор? Ответь числом.
Подсказка: Перемножь количество значений каждого параметра между собой.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. В уроке дан сокращённый pairwise-набор из 6 строк для параметров Браузер (Chrome/Firefox/Safari) × Устройство (десктоп/телефон) × Роль (ученик/преподаватель). Какие из следующих пар значений действительно встречаются хотя бы в одной из этих 6 строк (выбери все верные)?
Выберите все верные варианты.
Подсказка: Пара всегда берётся из значений РАЗНЫХ параметров — «ученик и преподаватель» это два значения одного параметра «Роль», такая пара не имеет смысла в pairwise.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. На чём основана идея pairwise-тестирования?
Подсказка: Речь про статистику реальных багов, а не про формальное правило.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Чего pairwise-набор НЕ гарантирует по сравнению с полным перебором?
Подсказка: Это тот самый риск, который нужно называть вслух заказчику.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Полный перебор для параметров Тариф (2 значения) × Способ оплаты (3 значения) × Устройство (3 значения) даёт 2×3×3 комбинаций. Сколько это? Ответь числом.
Подсказка: Просто перемножь три числа.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. Тестировщик составил таблицу из 12 строк, где перечислены ВСЕ комбинации Браузера (3 значения), Устройства (2 значения) и Роли (2 значения) без единого пропуска. Как называется такой набор тестов? Ответь одним словосочетанием, как в уроке.
Подсказка: 12 = 3×2×2 — это ровно все комбинации без исключений.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. Коллега предложил сократить тесты для Браузера (Chrome/Firefox/Safari) × Роли (две роли, разобранные в этом курсе, одна из них — «ученик») до 3 строк: (Chrome, ученик), (Firefox, ученик), (Safari, ученик). Какое из двух значений параметра «Роль» ни разу не встретилось ни в одной строке — из-за чего это НЕ корректное pairwise-покрытие? Ответь одним словом.
Подсказка: Посмотри на вторую колонку всех трёх строк — какое значение так и не появилось.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. На полигоне при оформлении заявки на курс есть три параметра: Тариф (базовый/премиум), Способ оплаты (карта/счёт/промокод), Тип клиента (новый/повторный). Полный перебор — 2×3×2=12 комбинаций. Построй вручную pairwise-набор из 6 строк, где каждая пара значений разных параметров встретится хотя бы один раз. Оформи как нумерованный список из 6 строк вида «Тариф — Способ оплаты — Тип клиента».
Принято любое расположение из 6 строк, где встретились все 6 пар Тариф×Способ оплаты (базовый-карта, базовый-счёт, базовый-промокод, премиум-карта, премиум-счёт, премиум-промокод), обе пары Тариф×Тип клиента (базовый-новый, базовый-повторный, премиум-новый, премиум-повторный) и все 4 пары Способ оплаты×Тип клиента. Пример корректного набора: (1) базовый-карта-новый, (2) базовый-счёт-повторный, (3) базовый-промокод-новый, (4) премиум-карта-повторный, (5) премиум-счёт-новый, (6) премиум-промокод-повторный.
Тариф: базовый, премиум. Способ оплаты: карта, счёт, промокод. Тип клиента: новый, повторный.
Подсказка: Сначала закрой все 6 пар «Тариф-Способ оплаты», а затем распредели значения «Тип клиента» так, чтобы пары «Тариф-Тип» и «Способ оплаты-Тип» тоже закрылись, без обязательного полного перебора.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Задание. Заказчик услышал про pairwise и попросил тестировщика «просто сократить тесты в 3 раза без потери качества». Опиши одним-двумя предложениями, что тестировщику важно сказать заказчику в ответ на слово «без потери качества».
Критерий приёмки: Нужно явно сказать, что pairwise — это компромисс: он находит баги от взаимодействия пары параметров, но может пропустить баг, который проявляется только при одновременном сочетании всех параметров сразу, поэтому «без потери качества» неточная формулировка — правильнее говорить про управляемое снижение риска, а не про его отсутствие.
Подсказка: Вспомни, какой риск pairwise не закрывает — и что это осознанный компромисс, а не бесплатное сокращение.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Задание. На проекте использовали pairwise-набор из 6 строк для Браузера × Устройства × Роли (как в уроке). После релиза обнаружили баг: календарь записи на курс не открывается только в комбинации Safari + десктоп + преподаватель — при этом пары (Safari и десктоп), (Safari и преподаватель), (десктоп и преподаватель) по отдельности в наборе встречались и багов не показывали. Объясни одним-двумя предложениями, почему pairwise-набор из урока не мог гарантированно найти этот баг, хотя все три пары были покрыты.
Критерий приёмки: Тройка (Safari, десктоп, преподаватель) в 6-строчном наборе из урока не встречается целиком ни в одной строке — там есть Safari+десктоп с ролью «ученик» и Safari+преподаватель на «телефоне», но не сама эта комбинация всех трёх сразу; pairwise гарантирует покрытие пар, а не троек, поэтому баг, требующий именно тройного сочетания, мог остаться незамеченным — это и есть осознанный риск, о котором предупреждали в уроке.
Подсказка: Проверь, встречалась ли тройка (Safari, десктоп, преподаватель) целиком хотя бы в одной из 6 строк набора из урока — или пары были покрыты в разных строках, а не все три вместе.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Что дальше
Все техники этой темы — классы эквивалентности, границы, таблицы решений, диаграммы состояний, pairwise — работают от структуры требования: они отталкиваются от того, что явно описано. Но что делать, если требование вообще молчит про целую категорию ситуаций — например, что произойдёт, если два администратора одновременно нажмут одну и ту же кнопку? В следующем уроке разберём error guessing — технику, которая опирается не на текст требования, а на накопленный опыт отрасли о типичных местах, где разработчики обычно ошибаются.
