Ответ
Классы эквивалентности (Equivalence Partitioning) — это техника тест-дизайна, при которой все возможные входные данные разбиваются на группы (классы), элементы которых должны обрабатываться программой одинаково. Тестирование проводится одним представителем из каждого класса.
Пример: Функция расчета скидки на основе суммы покупки.
Требование:
- Сумма < 1000: скидка 0%.
- 1000 ≤ Сумма < 5000: скидка 5%.
- Сумма ≥ 5000: скидка 10%.
- Отрицательная сумма: ошибка.
Разделение на классы эквивалентности:
| Класс | Диапазон/Тип | Ожидаемая обработка | Представитель |
|---|---|---|---|
| E1 | Сумма < 1000 (валидный) |
Скидка 0% | 500 |
| E2 | 1000 ≤ Сумма < 5000 (валидный) |
Скидка 5% | 2500 |
| E3 | Сумма ≥ 5000 (валидный) |
Скидка 10% | 7000 |
| E4 | Сумма < 0 (невалидный) |
Ошибка/Исключение | -100 |
| E5 | Нечисловой ввод, например, строка (невалидный) | Ошибка/Исключение | "abc" |
Пример кода на Python для тестирования:
def calculate_discount(amount):
if not isinstance(amount, (int, float)):
raise ValueError("Сумма должна быть числом")
if amount < 0:
raise ValueError("Сумма не может быть отрицательной")
if amount < 1000:
return amount
elif amount < 5000:
return amount * 0.95
else:
return amount * 0.90
# Тесты на основе классов эквивалентности
def test_equivalence_partitioning():
# E1
assert calculate_discount(500) == 500
# E2
assert calculate_discount(2500) == 2375.0 # 2500 * 0.95
# E3
assert calculate_discount(7000) == 6300.0 # 7000 * 0.90
# E4
try:
calculate_discount(-100)
assert False, "Ожидалось исключение для отрицательной суммы"
except ValueError as e:
assert str(e) == "Сумма не может быть отрицательной"
# E5
try:
calculate_discount("abc")
assert False, "Ожидалось исключение для нечислового ввода"
except ValueError as e:
assert str(e) == "Сумма должна быть числом"
Преимущество метода: Позволяет значительно сократить количество тестов, сохраняя при этом высокое покрытие.