Как вы измеряете покрытие кода тестами?

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

Ответ

Покрытие кода измеряется с помощью специализированных инструментов, которые отслеживают, какие строки, ветви или методы были выполнены во время прогона тестов. Это ключевая метрика для оценки полноты тестового набора.

Основные метрики покрытия:

  • Покрытие строк (Statement Coverage): Процент исполненных строк исходного кода.
  • Покрытие ветвей (Branch Coverage): Процент протестированных возможных путей выполнения (например, условия if/else). Более строгая метрика.
  • Покрытие методов (Function/Method Coverage): Процент вызванных методов или функций.

Популярные инструменты:

  • Java: JaCoCo, Cobertura
  • Python: pytest-cov (на базе Coverage.py)
  • JavaScript/TypeScript: Istanbul (часто через nyc), Jest встроенный

Пример для Python с pytest и pytest-cov:

  1. Код (math_ops.py):

    def add(a, b):
        return a + b
    
    def is_positive(num):
        if num > 0:
            return True
        else:
            return False
  2. Тест (test_math_ops.py):

    from math_ops import add, is_positive
    
    def test_add():
        assert add(2, 3) == 5
    
    def test_is_positive_true():
        assert is_positive(5) is True
    # Тест для ветки `else` отсутствует -> неполное покрытие ветвей
  3. Запуск и отчёт:

    pytest --cov=math_ops --cov-report=term-missing test_math_ops.py

    Вывод покажет процент покрытия и конкретные непокрытые строки.

Важно: 100% покрытие не гарантирует отсутствие ошибок, но помогает выявить явно непротестированные участки кода. Его следует сочетать с другими техниками (тестирование граничных значений, свойств и т.д.).