Ответ
Анализ граничных значений (Boundary Value Analysis, BVA) — это техника тест-дизайна для поиска ошибок на границах разделов эквивалентности. Для числового поля, принимающего значения в диапазоне [min, max], мы тестируем значения на границах и непосредственно за ними.
Правило "3 точки на границу" (для двусторонней границы): Для каждой границы (минимум и максимум) мы проверяем:
- Значение на самой границе (valid).
- Значение непосредственно ниже границы (invalid).
- Значение непосредственно выше границы (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 тестированием классов эквивалентности (например, отрицательное число, ноль, нечисловой ввод).
- Для полей с плавающей точкой нужно учитывать точность (эпсилон).