За пределами одномерных границ

Анализ граничных значений (Урок 3.2) тестирует одну переменную за раз. Но реальное ПО имеет входные пространства, определяемые отношениями между несколькими переменными. Рассмотрим систему одобрения кредитов:

  • Одобрено, если: income >= 30000 AND debt_ratio < 0.4 AND credit_score >= 650

Это создаёт трёхмерный входной домен. Граница — не точка, а поверхность в 3D-пространстве. Тестирование каждой переменной независимо (как делает BVA) пропускает дефекты на пересечении границ.

Доменный анализ, формализованный Бейзером и позднее Биндером, расширяет BVA для систематической работы с многомерными входными пространствами.

Базовые концепции

Входной домен

Множество всех возможных комбинаций входных данных.

Граница домена

Условие, разделяющее входное пространство на области с различным поведением.

Точки On и Off

On point: Значение точно на границе.

Off point: Значение, минимально отличающееся от on point, по другую сторону границы.

ГраницаOn PointOff Point
x <= 10 (домен x <= 10)10 (в домене)11 (вне)
x < 10 (домен x < 10)9 (в домене)10 (вне)
x >= 5 (домен x >= 5)5 (в домене)4 (вне)
x > 5 (домен x > 5)6 (в домене)5 (вне)

In Points

Значения явно внутри домена — далеко от границ.

Out Points

Значения явно вне домена.

Типы доменных ошибок

Сдвиг границы

Граница в неверной позиции. Должно быть x <= 100, но реализовано x <= 99.

Ошибка замыкания

Граница неверного типа. Должно быть x <= 10, реализовано x < 10.

Отсутствующая граница

Граница, которая должна быть, отсутствует.

Лишняя граница

Граница существует, но не должна.

Наклонённая граница

Для многомерных границ типа x + y <= 100 граница имеет неверный наклон.

Метод доменного анализа

Шаг 1: Определить переменные и границы

Пример: Страховая котировка

  • Переменные: age (18-80), driving_years (0-62), accidents (0-10)
  • Границы: age >= 25, driving_years >= 3, accidents <= 2 → стандартный тариф

Шаг 2: Для каждой границы выбрать точки On и Off

ГраницаПеременнаяOn PointOff Point
age >= 25age2524
driving_years >= 3driving_years32
accidents <= 2accidents23

Шаг 3: Построить доменную матрицу

Тестagedriving_yearsaccidentsТестируемая границаОжидаемый
125100age ONСтандартный
224100age OFFВысокий тариф
33530years ONСтандартный
43520years OFFВысокий тариф
535102accidents ONСтандартный
635103accidents OFFВысокий тариф
735100IN pointСтандартный

2 теста на границу + 1 внутренняя точка = 2B + 1 всего.

Многомерные границы

Пример: Бесплатная доставка если quantity * price >= 100

On points на линии quantity * price = 100: (10, 10), (20, 5), (50, 2) Off points чуть ниже: (10, 9.99), (20, 4.99), (50, 1.99)

Тестируйте несколько пар on/off вдоль границы для обнаружения ошибок наклона.

Упражнение: Доменный анализ

Задача 1

Калькулятор парковки использует правила:

  • Первый час: $5.00
  • Часы 2-4: $3.00/час
  • Часы 5-8: $2.00/час
  • Часы 9-24: $1.50/час
  • Более 24 часов: $1.00/час
  • Максимальный тариф: $50/день
Решение

Границы и тест-кейсы:

#durationОжидаемая стоимостьТестирует
10.5$5.00IN point
21.0$5.00ON граница 1
31.01$5.03OFF граница 1
44.0$14.00ON граница 2
54.01$14.02OFF граница 2
68.0$22.00ON граница 3
724.0$46.00ON граница 4
848$50.00 (лимит)Граница макс. тарифа

Задача 2

Фитнес-приложение категоризирует пользователей по двум переменным:

  • BMI: недовес (<18.5), норма (18.5-24.9), избыточный вес (25-29.9), ожирение (>=30)
  • Уровень активности: сидячий (<150 мин/нед), умеренный (150-300), активный (>300)
Решение

Границы:

#ПеременнаяГраницаOnOff
1BMI18.518.518.4
2BMI25.024.925.0
3BMI30.029.930.0
4Активность150150149
5Активность300300301

Доменная матрица:

#BMIАктивностьКатегория
118.4100Недовес + Сидячий
218.5100Норма + Сидячий
322.0149Норма + Сидячий (OFF граница активности)
422.0150Норма + Умеренный (ON граница активности)
522.0225Норма + Умеренный (IN point)
624.9225Норма + Умеренный (ON граница BMI)
725.0225Избыточный + Умеренный
830.0225Ожирение + Умеренный

Когда использовать доменный анализ

Используйте когда:

  • Несколько переменных взаимодействуют для определения поведения
  • Границы включают отношения между переменными
  • Нужно обнаружить ошибки off-by-one, замыкания и сдвига

Предпочтите простой BVA когда:

  • Переменные независимы
  • Одномерных границ достаточно

Ключевые выводы

  • Доменный анализ расширяет BVA на многомерные входные пространства
  • On points лежат точно на границах; off points — минимально по другую сторону
  • 2 точки на границу (on + off) + внутренние точки = 2B + 1 минимум
  • Четыре типа ошибок: сдвиг границы, замыкание, отсутствующая граница, наклонённая граница
  • Стройте доменные матрицы, варьируя одну границу при фиксации остальных на внутренних значениях
  • Для многомерных границ тестируйте несколько пар on/off для обнаружения ошибок наклона