Классы эквивалентности и границы
Сократите перебор данных и сохраните проверки типов, границ и побочных эффектов.
- Разбивать область входов на классы с одинаковым ожидаемым поведением.
- Применять трёхточечный анализ границ к целым длинам.
- Изолировать одну причину отказа в негативном примере.
Классы строятся из правила
Класс эквивалентности объединяет значения, для которых мы ожидаем одинаковое поведение по выбранному условию. Для длины title есть три диапазона: меньше 1, от 1 до 80 включительно, больше 80. Это не заменяет проверку типа: null, число и отсутствующее обязательное поле не относятся к строковым длинам. Их стоит выделить отдельно. Для priority диапазона вообще нет: существует конечный набор разрешённых значений, отдельное отсутствие поля с default и недопустимые значения.
Один представитель класса помогает экономить время, но эквивалентность является рабочей гипотезой. Длинный текст с переносом и один пробел могут пройти одну проверку длины и отличаться при публикации. Поэтому модель должна учитывать цель: при создании пробельный заголовок разрешён Q1, при публикации его запрещает Q5. Называть такой вход просто «невалидным» без операции — потерять существенное условие.
Граница — место изменения результата
Для дискретной длины с допустимым интервалом 1–80 используйте точки 0, 1, 2 и 79, 80, 81. Трёхточечный подход берёт границу и соседние значения; после объединения получается шесть разных длин. На 0 и 81 ожидается отказ, на 1, 2, 79 и 80 — успех создания при остальных корректных данных. Длина 40 полезна как обычный представитель, но не добавляет покрытие этих границ.
Получайте значения воспроизводимо: «А», повторённая N раз, задаёт N кодовых точек. В JavaScript строковая length считает кодовые единицы UTF-16; для проверки именно кодовых точек используйте Array.from(value).length. Не делайте вывод о валидности сложной последовательности эмодзи по внешнему виду. Для базового набора достаточно однозначной кириллицы, а отдельный пример «😀» повторённый 80 раз проверит, что реализация не спутала единицы измерения.
Меняйте одно условие, наблюдайте результат целиком
Если одновременно отправить пустой title и priority="urgent", отказ подтверждает только то, что хотя бы одна проблема обнаружена. Он не доказывает две независимые проверки. Возьмите базовый валидный вход и изменяйте одно условие за раз; для каждого отказа сравнивайте состояние до и после по Q7. Если задача всё же появилась в списке после сообщения об ошибке, ответ интерфейса скрывает побочный эффект.
Покрытие должно иметь знаменатель. «Проверили шесть границ title из шести выбранных точек» — корректная ограниченная метрика. «Полное покрытие формы» по этим шести примерам неверно: остались description, priority, роли, сессия и операции. В таблице храните правило, класс, конкретный вход, ожидание и статус. Такая таблица остаётся понятной при изменении верхней границы с 80 на 100: видно, какие значения и ожидания требуется пересмотреть, а не угадывать по случайным названиям тестов.
Минимальная модель
| Измерение | Классы | Примеры |
|---|---|---|
| title: длина | 0; 1–80; 81+ | ""; "А"; "А" × 81 |
| title: тип | строка; null; число; отсутствие | "План"; null; 42; {} |
| priority | разрешённое; отсутствие; недопустимое | high; без поля → normal; urgent |
Источники и проверка фактов
ISTQB CTFL 4.0.1 — официальный syllabusСправочник терминов и техник: главы 1, 3–5. Курс QA Orbit — самостоятельный авторский практикум; аккредитация и подготовка к экзамену не заявляются.MDN — Array.fromИтерация строки при построении массива; учитывайте выбранную в контракте единицу длины.Авторский учебный материал · Редакция QA Orbit · версия 2026-10-28.1