Как применить технику анализа граничных значений для тестирования числового поля ввода?

«Как применить технику анализа граничных значений для тестирования числового поля ввода?» — вопрос из категории Техники тест-дизайна, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Анализ граничных значений (Boundary Value Analysis, BVA) — это техника тест-дизайна для поиска ошибок на границах разделов эквивалентности. Для числового поля, принимающего значения в диапазоне [min, max], мы тестируем значения на границах и непосредственно за ними.

Правило "3 точки на границу" (для двусторонней границы): Для каждой границы (минимум и максимум) мы проверяем:

  1. Значение на самой границе (valid).
  2. Значение непосредственно ниже границы (invalid).
  3. Значение непосредственно выше границы (invalid).

Пример: Поле "Возраст участника" принимает целые числа от 18 до 65 включительно.

Тип значения Тестовое значение Ожидаемый результат Пояснение
Ниже минимума 17 Невалидно Значение за нижней границей.
Минимум 18 Валидно Нижняя граница диапазона.
Выше минимума 19 Валидно Типичное значение внутри диапазона (проверка "счастливого пути").
Ниже максимума 64 Валидно Типичное значение внутри диапазона.
Максимум 65 Валидно Верхняя граница диапазона.
Выше максимума 66 Невалидно Значение за верхней границей.
Особый случай Пустая строка Невалидно Проверка обработки отсутствия ввода (часто забываемая граница "ниже минимума").

Реализация в виде юнит-тестов (JavaScript / Jest):

describe('Валидация поля "Возраст" (диапазон 18-65)', () => {
  const validateAge = (value) => {
    const age = Number.parseInt(value, 10);
    return !isNaN(age) && age >= 18 && age <= 65;
  };

  // Валидные граничные значения и внутри диапазона
  test.each([18, 19, 50, 64, 65])('Принимает валидный возраст %i', (age) => {
    expect(validateAge(age)).toBe(true);
  });

  // Невалидные значения (за границами и некорректный ввод)
  test.each([17, 66, '', ' ', 'abc', '18.5', null, undefined])(
    'Отклоняет невалидное значение: %s',
    (invalidInput) => {
      expect(validateAge(invalidInput)).toBe(false);
    }
  );
});

Важные нюансы:

  • Если границы исключающие (например, (18, 65> — старше 18, до 65 включительно), тестовые значения смещаются (минимумом будет 19).
  • Всегда стоит дополнять BVA тестированием классов эквивалентности (например, отрицательное число, ноль, нечисловой ввод).
  • Для полей с плавающей точкой нужно учитывать точность (эпсилон).