По каким критериям вы оцениваете качество и достаточность тестового покрытия кода?

«По каким критериям вы оцениваете качество и достаточность тестового покрытия кода?» — вопрос из категории Тестирование, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оценка строится не только на метрике покрытия, но на комплексных критериях:

1. Типы и уровни тестов:

  • Модульные (Unit) тесты: Проверяют изолированную бизнес-логику.
    func testLoginWithInvalidCredentials() {
        let service = AuthService()
        let result = service.login(email: "wrong", password: "123")
        XCTAssertEqual(result, .failure(.invalidCredentials))
    }
  • Интеграционные тесты: Проверяют взаимодействие модулей (сеть, БД, сервисы).
  • UI-тесты (E2E): Автоматизируют ключевые пользовательские сценарии.

2. Качество тестов (важнее процента покрытия):

  • Читаемость: Тест должен четко описывать сценарий (Given-When-Then).
  • Изоляция: Тесты не зависят друг от друга и порядка выполнения.
  • Скорость: Unit-тесты выполняются быстро (миллисекунды).
  • Надежность: Отсутствие flaky-тестов, которые падают случайно.

3. Смысловое покрытие (Scope):

  • Happy Path: Основной успешный сценарий.
  • Edge Cases: Граничные значения, пустые данные, пределы.
  • Обработка ошибок: Корректная реакция на сетевые сбои, невалидные данные.
  • Критичный путь: Наиболее важная для бизнеса логика покрыта в первую очередь.

4. Метрика покрытия (Code Coverage): Используется как индикатор, а не цель. 70-80% осмысленного покрытия часто лучше, чем 95%, достигнутые тестированием геттеров/сеттеров. Резкие падения процента покрытия сигнализируют о потенциальных рисках.