Ответ
Метод анализа граничных значений (BVA) — это фундаментальная техника тест-дизайна. Её суть в том, что дефекты чаще всего возникают на границах разделения областей допустимых и недопустимых входных значений, а не в "середине". Поэтому мы тестируем значения на самих границах и непосредственно рядом с ними.
Стандартный подход (двухточечный): Для диапазона [min, max] тестируются:
- Минимальное значение (min).
- Значение чуть ниже минимума (min - 1).
- Максимальное значение (max).
- Значение чуть выше максимума (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. Ты проверяешь:
- Саму нижнюю границу (
min). Всё должно работать. - Значение чуть ниже этой границы (
min - 1). Тут уже должна быть ошибка, иначе логика — хуй с горы. - Саму верхнюю границу (
max). Опять же, окей. - Значение чуть выше (
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 значений) ловишь самые тупые и частые косяки вроде того, что программист написал > вместо >= или < вместо <=. А это, поверь, случается чаще, чем хотелось бы. Так что не еби собаку, тестируй границы.