Раздел 06 — Таблицы решений, состояния, попарное тестирование

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

Прогресс курса Раздел 6 из 12

Что вы освоите в этом разделе

6 академических часов: 2 теории, 4 практики. На практике — фильтры, поиск и статусы «Задачника». Для попарного тестирования понадобится PICT (Windows) или таблица вручную.
01

Таблица решений

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

Требование службы доставки: «Доставка бесплатна, если сумма заказа от 3000 ₽ или у покупателя подписка „Плюс“. Для подписчиков доставка в день заказа, если заказ сделан до 14:00». Три условия, у каждого два значения — 23 = 8 правил:

П1П2П3П4П5П6П7П8
Сумма ≥ 3000 ₽дадададанетнетнетнет
Подписка «Плюс»даданетнетдаданетнет
Заказ до 14:00данетданетданетданет
Бесплатно✓✓✓✓✓✓——
В день заказа✓———✓———

Каждый столбец — проверка: П3 — «заказ на 3500 ₽ без подписки в 11:00: бесплатно, но не в день заказа». Строя таблицу, тестировщик заодно проверяет требование: что, если подписчик заказал на 1000 ₽ в 13:59 — доставят сегодня? По тексту да (П5), и стоит спросить, так ли задумано.

Сокращение. П3, П4 и П7, П8 отличаются только временем, а время без подписки ни на что не влияет. Их можно объединить, поставив «—» (неважно) в строке времени: П3+П4 и П7+П8. Получится 6 правил вместо 8. Сокращают только тогда, когда уверены, что условие действительно не влияет, — иначе потеряется именно та комбинация, где программа ошибается.

Условие может иметь больше двух значений: «способ оплаты: карта, СБП, наличные». Тогда правил — произведение числа значений. Если их стало больше 20–30, переходят к попарному тестированию (п. 04).
02

Переходы состояний

У многих объектов есть состояния: заказ, заявка, документ, учётная запись. Результат действия зависит от того, в каком состоянии объект сейчас. Требование: «Заказ: Оформлен → Оплачен → Отправлен → Доставлен. Оформленный или оплаченный заказ можно отменить; при отмене оплаченного деньги возвращаются».

              оплатить          отправить          вручить
  [Оформлен] ──────────► [Оплачен] ──────────► [Отправлен] ──────────► [Доставлен]
      │                      │
      │ отменить             │ отменить (+ возврат денег)
      ▼                      ▼
  [Отменён] ◄────────────────┘

Диаграмму переводят в таблицу переходов: строки — состояния, столбцы — действия, в ячейке — новое состояние или «запрещено». Таблица показывает то, что диаграмма прячет: все запрещённые переходы.

Состояние \ действиеоплатитьотправитьвручитьотменить
ОформленОплачензапрещенозапрещеноОтменён
ОплачензапрещеноОтправлензапрещеноОтменён + возврат
ОтправлензапрещенозапрещеноДоставлензапрещено
Доставлензапрещенозапрещенозапрещенозапрещено
Отменёнзапрещенозапрещенозапрещенозапрещено

Что проверять:

03

Комбинаторный взрыв

Интернет-магазин нужно проверить в 4 браузерах (Chrome, Firefox, Edge, Яндекс), 3 системах (Windows, Android, iOS), с 3 способами оплаты (карта, СБП, наличные) и 3 способами доставки (курьер, пункт выдачи, самовывоз). Все сочетания: 4 × 3 × 3 × 3 = 108 оформлений заказа. Если одно занимает 5 минут — 9 часов на одну функцию.

Наблюдение, на котором держится попарное тестирование: большинство дефектов взаимодействия вызывает сочетание двух параметров — «СБП не работает в Firefox», «самовывоз не выбирается на iOS». Дефектов, для которых нужно точное сочетание трёх и более параметров, намного меньше. Значит, достаточно, чтобы каждая пара значений встретилась хотя бы в одной проверке.

04

Попарное тестирование: PICT

Подобрать набор, где встречаются все пары, вручную можно для 3–4 параметров, дальше удобнее программа. PICT — бесплатная консольная программа Microsoft: на странице выпусков скачайте pict.exe и положите в папку с моделью. Модель — текстовый файл в UTF-8 (Блокнот Windows 11 сохраняет так по умолчанию):

Браузер: Chrome, Firefox, Edge, Яндекс
ОС: Windows, Android, iOS
Оплата: Карта, СБП, Наличные
Доставка: Курьер, Пункт, Самовывоз

IF [ОС] = "iOS" THEN [Браузер] <> "Edge";

Последняя строка — ограничение: на iOS не проверяем Edge. Запуск в командной строке (cmd):

pict model.txt > pairs.txt

Получилось 12 строк вместо 108 — в каждой паре параметров все сочетания значений встречаются хотя бы раз (прогон в Windows 11, PICT 3.7.4; порядок строк у вас может отличаться):

Браузер	ОС	Оплата	Доставка
Edge	Windows	Карта	Самовывоз
Chrome	Windows	Наличные	Курьер
Chrome	Android	СБП	Самовывоз
Firefox	iOS	СБП	Курьер
Chrome	iOS	Карта	Пункт
Яндекс	iOS	Наличные	Самовывоз
Firefox	Android	Наличные	Пункт
Edge	Windows	СБП	Пункт
Яндекс	Android	Карта	Курьер
Firefox	Windows	Карта	Самовывоз
Edge	Android	Наличные	Курьер
Яндекс	Windows	СБП	Пункт

Файл разделён табуляциями — его можно открыть в LibreOffice Calc или Excel и дописать столбцы «Ожидаемо» и «Итог».

В PowerShell перенаправление портит кириллицу. pict model.txt > pairs.txt в PowerShell 5.1 сохраняет файл в UTF-16 с искажёнными русскими буквами. Запускайте в cmd или из PowerShell так: cmd /c "pict model.txt > pairs.txt". В Linux PICT собирается из исходников — проще сделать таблицу вручную.

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

05

Предугадывание ошибок

Предугадывание ошибок (error guessing) — проверки, которые подсказывает опыт: «здесь обычно ломается». Это не замена техникам, а дополнение после них. Список типичных мест:

Найденное предугадыванием записывают в чек-лист — в следующий раз это будет уже не догадка, а проверка.

06

Какую технику выбрать

В требованииТехникаРаздел
Поле с диапазоном, длиной, форматомКлассы эквивалентности и граничные значения05
«Если … и … , то …», несколько условийТаблица решений06
Статусы, этапы, «можно только после»Переходы состояний06
Много независимых параметров: окружения, настройки, фильтрыПопарное тестирование06
Любая функция после систематических проверокПредугадывание ошибок06
Новая функция без требованийИсследовательский проход, затем техники01, 02

Техники сочетаются: в таблице решений условие «сумма ≥ 3000 ₽» само по себе требует границ 2999,99 и 3000,00, а у каждого состояния заказа есть поля, к которым применимы классы.

Ключевые выводы раздела

Запомните главное

  • Таблица решений: условия × правила; каждое правило — проверка; сокращать, только если условие точно не влияет
  • Таблица переходов показывает все запрещённые переходы, которых не видно на диаграмме
  • Проверяют разрешённые переходы с побочными действиями, запрещённые и цепочки
  • Попарное тестирование: каждая пара значений встречается хотя бы раз — 12 проверок вместо 108
  • Предугадывание ошибок дополняет техники проверками «где обычно ломается»
  • Технику выбирают по форме требования: поле, правило, состояния, комбинации
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Раздел 05: Классы эквивалентности и граничные значения Все разделы Раздел 07: Дефекты и баг-репорты