Зачем это нужно
Разработчик пишет условие if (count < 100), хотя в требованиях сказано «до 100 включительно». При 50 всё работает, а сотый товар ошибочно отклоняется. Проверки у края диапазона помогают целенаправленно искать такие расхождения.
Здесь ты по готовому требованию найдёшь пределы одного поля, применишь указанный набор проверок и запишешь ожидания. Сначала нужно уметь отличать допустимый класс от недопустимого. Чтение и учебная самопроверка сами по себе уровень навыка не подтверждают.
Как найти границы
Учебное количество 1–100 включительно, шаг 1. Записи проходят формат. Здесь показаны соседи двух допустимых пределов, а не все границы всех классов.
Возьмём явные условия учебного магазина:
- Количество обязательно, формат — только цифры без знака, пробелов и дробного разделителя; ведущие нули допустимы.
- Числовой диапазон — от 1 до 100 включительно.
- При «Продолжить» допустимое количество открывает следующий шаг.
- Иначе показывается «Введите целое количество от 1 до 100», перехода нет. Остальные поля корректны.
Это собственные условия упражнения, а не правила всех магазинов. Сейчас исследуем диапазон на значениях, не нарушающих формат.
- Раздели значения на классы. Здесь их три: меньше 1 (недопустимо), от 1 до 100 (допустимо), больше 100 (недопустимо).
- Найди края каждого класса. У допустимого класса края — 1 и 100. У соседних недопустимых — 0 и 101.
- Определи шаг. Поле целое, значит соседнее значение отличается на 1. Для цены в рублях с копейками шаг был бы 0,01.
Граница — это край класса, а не любое «круглое» число. Значение 50 — хороший представитель допустимого класса, но граничным оно не является.
Два метода: двухзначный и трёхзначный
Какой метод применять, часто задают в задании или в правилах команды. Важно не перепутать.
В этом уроке задан ограниченный набор вокруг двух пределов допустимого диапазона: 1 и 100. Шесть значений ниже относятся именно к этим двум пределам. Это не утверждение, что любой трёхзначный анализ всегда содержит шесть проверок: при рассмотрении границ всех классов набор может быть шире.
- Двухзначный анализ. Для каждой границы берём само граничное значение и ближайшее значение из соседнего класса. Для нашего поля: 0 и 1, 100 и 101. Итого 4 проверки.
- Трёхзначный анализ. Для каждой границы берём само значение и обоих соседей. Для границы 1: 0, 1, 2. Для границы 100: 99, 100, 101. Итого 6 проверок.
Трёхзначный метод добавляет проверки внутренних соседей — 2 и 99. Например, программа может правильно обрабатывать 0 и 1, но ошибочно отклонять 2: двухзначный набор выше этого не покажет, а трёхзначный покажет. Ошибку count > 1 вместо count >= 1 обнаружат оба набора, потому что оба содержат 1.
В этом уроке метод задан: применяй его и используй шаг поля. Самостоятельный выбор метода и обоснование по риску — отдельная задача следующего уровня.
Запиши ожидание для каждого значения
0 · 1 · 100 · 101
Предел и ближайшее значение из соседнего класса.
0 · 1 · 2 · 99 · 100 · 101
Добавлены внутренние соседи 2 и 99.
Оба набора включают 1 и 100. Проверка формата и весь внутренний диапазон остаются отдельными целями.
Для заданного набора вокруг допустимых пределов получаются проверки: 0 отклоняется; 1, 2, 99, 100 принимаются; 101 отклоняется. Каждая запись содержит выбранное количество, действие «Продолжить» и ожидаемый переход либо сообщение с запретом перехода. Фраза «проверить границу» без входа и ожидания не позволяет повторить проверку.
Ошибка ожидания и пропуск значения — разные проблемы. Если ты выбрал 100, но ожидаешь отказ, граница выбрана правильно, а правило включения понято неверно. Если вместо 99 взят 50, ожидание может быть правильным, но ближайший внутренний сосед верхней границы не проверен.
Сосед определяется шагом данных. Для собственного примера суммы 2,50–7,50 включительно с шагом 0,01 заданный набор вокруг двух допустимых пределов будет таким: 2,49, 2,50, 2,51, 7,49, 7,50, 7,51. Крайние значения отклоняются, четыре остальных принимаются. Шаг 1 рубль исследовал бы другие значения. Предполагаем, что все шесть записей соответствуют разрешённому формату суммы; проверка лишних дробных знаков — отдельная цель.
Почему число проверок зависит от цели
Заданные шесть — не вся возможная проверка поля. В CTFL v4.0.1 §4.2.2 границы определяются для упорядоченных классов, а трёхзначный анализ рассматривает границу с обоими соседями. Поэтому сначала нужно назвать классы и выбранные объекты покрытия.
Для отдельного числового примера возьмём область всех математических целых чисел, включая отрицательные; формат текстового поля магазина здесь не рассматриваем. Допустим интервал 10–20, шаг 1. У классов «меньше 10», «10–20», «больше 20» конечные границы — 9, 10, 20, 21. Если взять каждую из этих четырёх границ с обоими соседями и убрать повторы, получится восемь значений: 8, 9, 10, 11, 19, 20, 21, 22. Это применение определения к выбранной области, а не требование всегда писать восемь кейсов.
Например, ошибочная программа дополнительно принимает 8. Наши шесть значений вокруг только допустимых пределов 10 и 20 этой ошибки не покажут, восемь названных значений покажут. Дополнительные проверки полезны, когда понятно, какую цель они закрывают. В учебном упражнении ниже метод и область заданы заранее; самостоятельный выбор глубины по риску не требуется.
Тест-кейс по шаблону
Одно проверяемое значение — один тест-кейс. Для одной границы получится несколько кейсов: в трёхзначном методе — на саму границу и на каждого из двух соседей. Так при падении видно, какое значение обработано неверно.
- Название: Количество товаров = 100 (верхняя граница) принимается
- Предусловие: пользователь на шаге оформления заказа, товар в корзине
- Шаги: ввести в поле «Количество» значение 100, нажать «Продолжить»
- Ожидаемый результат: заказ переходит к оплате, ошибок нет
Для значения 101 ожидаемый результат другой: сообщение «Введите целое количество от 1 до 100», следующий шаг не открывается. Ожидаемый результат для недопустимого значения бери из требований, а не придумывай: если в требованиях текста ошибки нет, это вопрос к аналитику.
Как это выглядит в автотесте
Если ты пишешь автотесты, граничные значения удобно передавать параметрами одного теста. Ниже схематичные фрагменты: объект order должен быть предоставлен тестовым окружением, импорты и его реализация не показаны. Эти фрагменты сами по себе не являются запущенными автотестами продукта.
java
@ParameterizedTest
@CsvSource({"0, false", "1, true", "100, true", "101, false"})
void quantityBoundaries(int quantity, boolean accepted) {
assertEquals(accepted, order.setQuantity(quantity));
}python
@pytest.mark.parametrize("quantity, accepted", [(0, False), (1, True), (100, True), (101, False)])
def test_quantity_boundaries(quantity, accepted):
assert order.set_quantity(quantity) == accepted
Типичные ошибки
- Проверить только допустимые границы 1 и 100 и забыть соседей 0 и 101.
- Взять шаг 1 для дробного поля: для суммы 0,01–1000,00 соседи нижней границы — 0,00 и 0,02, а не 0 и 2.
- Смешать в одном тест-кейсе несколько граничных значений: при падении непонятно, какое из них виновато.
Разобранные примеры
Далее — два собственных синтетических условия. Набор задан вокруг допустимых пределов, а не как универсальное полное покрытие всех границ классов.
Пример 1. Два допустимых целых значения
Условие. Поле принимает целые 4–5 включительно; числовой ввод вне диапазона даёт «Допустимо 4 или 5», допустимый — «Принято». Действие — «Проверить». Задан набор: каждый допустимый предел и оба ближайших соседа с шагом 1.
Ход разбора. Для нижнего предела 4 получаем 3, 4, 5; для верхнего 5 — 4, 5, 6. Значения 4 и 5 повторились. После удаления дублей итоговый набор — 3, 4, 5, 6, а не шесть разных чисел.
Проверки и вывод. На «Проверить» 3/6 дают заданную ошибку, 4/5 — «Принято». Соседи выбраны вокруг двух указанных пределов правильно, хотя уникальных проверок четыре. Обязательность и строковый формат отдельными случаями не покрыты. Число проверок нельзя механически брать из названия метода.
Пример 2. Сумма с шагом в одну копейку
Условие. Учебное поле суммы использует запись с точкой и двумя цифрами после неё; диапазон 10.00–20.00 включительно, шаг 0.01. На «Применить» допустимое даёт «Сумма принята», иначе «Сумма вне диапазона». Формат в этих проверках корректен. Задан двухзначный набор у обоих допустимых пределов.
Ход разбора. Переводим суммы в целые сотые: пределы 1000 и 2000, шаг 1. Снаружи рядом стоят 999 и 2001. Возвращаем запись сумм: 9.99, 10.00, 20.00, 20.01. Значения 9 и 21 не являются ближайшими соседями при этом шаге.
Проверки и вывод. На «Применить» 9.99/20.01 дают ошибку диапазона, 10.00/20.00 принимаются. Метод применён к заданным допустимым пределам; внутренняя точка вроде 15.00 может быть полезна отдельно, но этот набор её не требует. Здесь нет реальных денежных операций или запуска программы.
Попробуй по образцу
Учебное поле принимает целое количество от 5 до 12 включительно. Формат — только цифры, без знака, пробелов и разделителя; поле обязательное. На «Проверить» допустимое значение даёт «Количество принято», иначе «Введите целое количество от 5 до 12». Для упражнения задан набор: каждый из двух допустимых пределов и оба ближайших соседа с шагом 1. Остальные условия не меняются.
Выпиши шесть значений и ожидание для каждого. Затем объясни, почему это не проверка всех возможных ошибок поля. Разбор открывай после своей попытки.
Показать разбор самопроверки
Один корректный ответ: 4 и 13 отклоняются с заданным сообщением; 5, 6, 11, 12 принимаются. Во всех случаях нажимаем «Проверить». Это заданный набор вокруг допустимых пределов; он не проверяет все значения классов, весь формат ввода или все комбинации с другими полями.
Что оставить себе
Укажи область данных, включение пределов, шаг и требуемый метод до выбора чисел. Для каждого числа запиши ожидание по требованию. Называй, что именно покрывает набор: шесть выбранных значений не являются обещанием отсутствия всех дефектов.
Понятия сверены с ISTQB CTFL Syllabus v4.0.1, §4.2.2, с. 40, 05.11.2026. Источник и его Copyright Notice указывают авторов и правообладателя © ISTQB. Магазин, дробный пример, контрпример и самопроверка — собственные учебные примеры «Твой Ментор», не контрольные задания пилота и не официальный курс ISTQB.