Что такое метод анализа граничных значений (Boundary Value Analysis)?

Ответ

Метод анализа граничных значений (BVA) — это фундаментальная техника тест-дизайна. Её суть в том, что дефекты чаще всего возникают на границах разделения областей допустимых и недопустимых входных значений, а не в "середине". Поэтому мы тестируем значения на самих границах и непосредственно рядом с ними.

Стандартный подход (двухточечный): Для диапазона [min, max] тестируются:

  1. Минимальное значение (min).
  2. Значение чуть ниже минимума (min - 1).
  3. Максимальное значение (max).
  4. Значение чуть выше максимума (max + 1).
Пример для поля "Возраст пользователя" от 18 до 65 лет включительно: Тестовое значение Ожидаемый результат Пояснение
17 Ошибка Ниже нижней границы (min-1)
18 Успех Нижняя граница (min)
50 Успех Номинальное значение внутри диапазона
65 Успех Верхняя граница (max)
66 Ошибка Выше верхней границы (max+1)

Применение не только к числам:

  • Длина строки: Максимально допустимая длина, длина на 1 символ больше.
  • Количество элементов в списке: Минимальное/максимальное количество, 0 элементов, на 1 больше максимума.
  • Даты: Первый и последний день допустимого периода, день перед и день после.

Практический пример в автотесте (Python, Pytest):

# Функция, которую тестируем (условно)
def is_valid_discount_coupon(code: str) -> bool:
    # Купон должен быть длиной от 5 до 10 символов и состоять из букв и цифр
    return 5 <= len(code) <= 10 and code.isalnum()

# Тесты на граничные значения для длины
import pytest

def test_coupon_length_boundaries():
    # Граничные и недопустимые значения длины
    assert is_valid_discount_coupon("A1234") == True   # min длина = 5
    assert is_valid_discount_coupon("A123") == False  # min-1 = 4
    assert is_valid_discount_coupon("A123456789") == True  # max длина = 10
    assert is_valid_discount_coupon("A1234567890") == False # max+1 = 11
    # Номинальное значение внутри диапазона
    assert is_valid_discount_coupon("ABC123") == True

Сила метода: Позволяет небольшим набором тестовых данных (4-6 значений) эффективно обнаруживать ошибки, связанные с некорректными операторами сравнения (например, > вместо >=).

Ответ 18+ 🔞

Давай разберем эту тему, а то у некоторых в голове бардак, как в коммуналке. Метод анализа граничных значений — это, блядь, классика, которую должен понимать даже тот, кто тестирует только нажатие кнопки «Отправить». Суть проще пареной репы, но охуенно эффективная.

Представь себе: дефекты — это как тараканы. Они не сидят по центру комнаты при всех включённых светильниках. Они жмутся по углам, щелям, под плинтусами. То есть на границах между «можно» и «нельзя». Вот и весь секрет. Не надо тыкать в середину диапазона сто раз, надо бить точно по краям и рядом с ними — там и вылезет всякая пиздопроебибна.

Стандартный подход, он же двухточечный, он же «четыре удара на диапазон»: Допустим, у тебя поле принимает числа от min до max. Ты не просто проверяешь 18 и 65. Ты проверяешь:

  1. Саму нижнюю границу (min). Всё должно работать.
  2. Значение чуть ниже этой границы (min - 1). Тут уже должна быть ошибка, иначе логика — хуй с горы.
  3. Саму верхнюю границу (max). Опять же, окей.
  4. Значение чуть выше (max + 1). И снова ждём пощёчины от системы.

Пример, чтобы не быть голословным: Поле «Возраст», от 18 до 65 включительно.

Значение Что должно быть? Объяснение для тех, кто в бронепоезде
17 Ошибка! Это min-1. Ниже плинтуса. Не пущать.
18 Успех Сама нижняя граница. Проходи, гражданин.
50 Успех Любое значение внутри. Всё ок.
65 Успех Сама верхняя граница. Ещё можно.
66 Ошибка! Это max+1. Перебор, дед, отдыхай.

И это работает не только для циферок, ёпта!

  • Длина строки: Максимально 20 символов? Тестируй строку в 20 символов и в 21. Увидишь, как всё накрывается медным тазом, если проверка кривая.
  • Количество элементов: От 1 до 5 файлов? Пробуй 0, 1, 5 и 6.
  • Даты: Период с 1 по 31 января? Дерись за 31 декабря, 1 января, 31 января и 1 февраля.

Смотри, как это в коде выглядит, на реальном примере:

Допустим, есть функция для проверки промокода. Купон должен быть длиной от 5 до 10 символов и состоять из букв и цифр.

# Сама функция (условно)
def is_valid_discount_coupon(code: str) -> bool:
    return 5 <= len(code) <= 10 and code.isalnum()

# А вот наши тесты, которые ловят залупу конскую в логике
import pytest

def test_coupon_length_boundaries():
    # Проверяем границы, блядь!
    assert is_valid_discount_coupon("A1234") == True   # min длина = 5 (должно работать)
    assert is_valid_discount_coupon("A123") == False   # min-1 = 4 (должно сломаться)
    assert is_valid_discount_coupon("A123456789") == True  # max длина = 10 (работать)
    assert is_valid_discount_coupon("A1234567890") == False # max+1 = 11 (ломаться)
    # И для очистки совести — серединка
    assert is_valid_discount_coupon("ABC123") == True

В чём сила, брат? В том, что этим методом ты малым количеством тестов (буквально 4-6 значений) ловишь самые тупые и частые косяки вроде того, что программист написал > вместо >= или < вместо <=. А это, поверь, случается чаще, чем хотелось бы. Так что не еби собаку, тестируй границы.