Ответ
Для всесторонней проверки числового интервала применяется техника анализа граничных значений (Boundary Value Analysis). Тестируются значения на границах и рядом с ними.
Рекомендуемый набор проверок для интервала [min, max]:
-
Допустимые граничные значения (валидные):
min— минимальное допустимое значение.max— максимальное допустимое значение.- Любое значение внутри интервала (например,
(min + max) / 2).
-
Недопустимые граничные значения (невалидные):
min - 1— значение сразу ниже нижней границы.max + 1— значение сразу выше верхней границы.
-
Специальные и крайние случаи:
- Пустое значение (если поле не обязательное).
- Нулевое значение (0), если оно входит или не входит в интервал.
- Отрицательные числа (если логика домена это допускает).
- Дробные числа (если тип поля это поддерживает).
- Очень большие числа (проверка на переполнение).
- Нечисловые значения (буквы, символы) — должна быть обработка ошибки.
Практический пример на Python для интервала [1, 10]:
def is_value_in_interval(value):
"""Проверяет, входит ли значение в интервал [1, 10]."""
return 1 <= value <= 10
# Валидные тест-кейсы (ожидается True)
assert is_value_in_interval(1) # Нижняя граница
assert is_value_in_interval(10) # Верхняя граница
assert is_value_in_interval(5) # Внутреннее значение
# Невалидные тест-кейсы (ожидается False)
assert not is_value_in_interval(0) # Ниже границы
assert not is_value_in_interval(11) # Выше границы
# Для нечислового ввода потребуется отдельная проверка с обработкой исключений.
Такой подход позволяет выявить ошибки в условиях сравнения (<= vs <).
Ответ 18+ 🔞
А, ну вот, опять эти ваши границы, блядь! Сидишь, тестируешь, а потом бац — и всё падает, потому что какой-то пидрила в коде написал не <=, а <. И кто потом виноват? Я, блядь, тестировщик!
Так вот, слушай сюда, раз уж полез в эту тему. Есть такая штука — анализ граничных значений. Суть проще, чем кажется, хоть и звучит, как ёперный театр. Берёшь свой интервал, допустим, от min до max, и начинаешь его ебашить со всех сторон.
Что надо проверять, чтобы не выглядеть потом конченым идиотом:
-
Нормальные, годные значения (должны проходить):
- Самый нижний порог —
min. Если он заявлен как допустимый, то должен работать, блядь! - Самый верхний потолок —
max. Тоже должен. - Ну и что-то посерединке, типа
(min + max) / 2. Чтобы просто убедиться, что середина не провалилась в тартарары.
- Самый нижний порог —
-
Откровенно левые, негодные значения (должны отшиваться):
min - 1— значение, которое уже чуть-чуть не влезает. Прямо под самой границей.max + 1— значение, которое уже чуть-чуть вылезло. Прямо над границей. Вот на этих двух, сука, чаще всего и ловят баги, когда разработчик перепутал строгое и нестрогое сравнение.
-
И, конечно, всякая дополнительная хуйня, от которой система должна не сдохнуть, а красиво послать нахуй:
- Пустота. Ничего не ввёл — что будет?
- Ноль. Он часто бывает особо хитрожопым значением.
- Отрицалово, если по смыслу может быть.
- Дробные числа, если поле не целое.
- Числа, от которых комп зависнет — типа десять в сотой степени.
- Буквы, символы, смайлики. Программа не должна от этого взрываться, а должна сказать: «Чувак, ты долбоёб, вводи цифры».
Смотри, как это выглядит в коде, на примере интервала от 1 до 10:
def is_value_in_interval(value):
"""Проверяет, входит ли значение в интервал [1, 10]."""
return 1 <= value <= 10 # Вот тут, блядь, именно <=, а не <
# Проверяем, что годное проходит
assert is_value_in_interval(1) # Самая нижняя планка
assert is_value_in_interval(10) # Самая верхняя планка
assert is_value_in_interval(5) # Что-то из середины
# Проверяем, что негодное отшивается
assert not is_value_in_interval(0) # Чуть ниже — уже нет
assert not is_value_in_interval(11) # Чуть выше — тоже нет
# А с буквами тут будет исключение, его надо отдельно ловить, это уже другая история.
Вот такой подход, блядь, и позволяет поймать момент, когда дядя-программист, не выспавшись, написал value < 10 вместо value <= 10. И тогда на значении 10 всё ебётся, а ты сидишь и думаешь: «Ну ядрёна вошь, кто же так делает-то?». А делает так каждый второй, если его не проверять.