Этот вопрос проверяет понимание метрик качества тестирования и разумных ожиданий от покрытия кода тестами.
Универсального "достаточного" покрытия не существует, но общепринятые рекомендации: 70-80% для большинства проектов, 90%+ для критически важных систем. Однако важно помнить, что высокое покрытие не гарантирует качество тестов. 100% покрытие редко достижимо и экономически нецелесообразно. Гораздо важнее тестировать ключевые бизнес-логики и сложные алгоритмы, чем гнаться за процентами. Качество тестов важнее их количества.
Покрытие кода тестами — это метрика, показывающая процент кода, который выполняется при запуске тестов.
70-80%: Хороший уровень для большинства коммерческих проектов
80-90%: Высокий уровень для проектов со строгими требованиями к качеству
90%+: Для критически важных систем (медицина, авиация, финансы)
<70%: Требует улучшения, возможны серьезные пробелы в тестировании
Качество тестов: Лучше 70% meaningful тестов, чем 95% бесполезных
Тестирование сложной логики: Критически важные алгоритмы должны быть протестированы thoroughly
Edge cases: Тестирование граничных условий и исключительных ситуаций
Интеграционные тесты: Проверка взаимодействия между компонентами
# Код для тестирования
def calculate_discount(price, user_type, is_premium=False):
if price <= 0:
raise ValueError("Price must be positive")
if user_type == "vip":
discount = 0.2
elif user_type == "regular" and is_premium:
discount = 0.1
else:
discount = 0.0
return price * (1 - discount)
# Плохой тест - только happy path
def test_discount_basic():
assert calculate_discount(100, "vip") == 80
# Хорошие тесты - покрывают разные сценарии
def test_discount_comprehensive():
# Happy path
assert calculate_discount(100, "vip") == 80
assert calculate_discount(100, "regular", True) == 90
# Edge cases
try:
calculate_discount(0, "vip")
assert False, "Should raise exception"
except ValueError:
pass
# Default case
assert calculate_discount(100, "regular") == 100Вывод: Стремитесь к разумному балансу между покрытием и качеством тестов. Используйте покрытие как инструмент для выявления непротестированных областей, а не как самоцель. Фокус на тестировании бизнес-логики и сложных алгоритмов принесет больше пользы, чем погоня за 100% покрытием.