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

«Что такое метод анализа граничных значений (Boundary Value Analysis)?» — вопрос из категории Техники тест-дизайна, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод анализа граничных значений (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 значений) эффективно обнаруживать ошибки, связанные с некорректными операторами сравнения (например, > вместо >=).