Покрытие тестов в тестировании программного обеспечения: как его измерить.
⚡ Умное резюме
Покрытие тестами в тестировании программного обеспечения измеряет, насколько полно приложение фактически проверяется набором тестов. Оно выявляет непротестированные требования, пути выполнения кода и риски, позволяя командам добавлять целевые тестовые случаи и выпускать релизы с измеримой уверенностью.
Что такое тестовое покрытие?
Покрытие тестами определяется как показатель в тестировании программного обеспечения, который измеряет объем тестирования, выполненного набором тестов. Он будет включать сбор информации о том, какие части программы выполняются при запуске набора тестов, чтобы определить, какие ветви условных операторов были приняты.
Проще говоря, это метод, позволяющий гарантировать, что ваши тесты проверяют ваш код или ту часть вашего кода, которую вы проверили, запустив тест.
Что делает тестовое покрытие?
В рамках реального проекта покрытие тестами поддерживает четыре практических вида деятельности:
- Поиск области требования, не реализованной с помощью набора тестовых примеров
- Помогает создать дополнительные тестовые примеры для увеличения охвата.
- Определение количественной меры тестового покрытия, которая является косвенным методом проверки качества.
- Выявление бессмысленных тестовых случаев, которые не увеличивают охват
Преимущества тестового покрытия в разработке программного обеспечения
Эти действия приводят к конкретным инженерным преимуществам.
- Это может гарантировать качество теста
- Это может помочь определить, какие части кода были фактически изменены при выпуске или исправлении.
- Это позволяет определить все точки принятия решений и пути в вашем приложении, которые не были протестированы, что дает возможность увеличить покрытие тестами.
- Предотвращать дефект утечка
- Время, объем и стоимость можно держать под контролем
- Предотвращение дефектов на ранней стадии жизненного цикла проекта
- Пробелы в требованиях, тестовых примерах и дефектах на уровне модуля и кода можно легко обнаружить.
Типы тестового покрытия
Показатель охвата никогда не выражается одним числом. Команды tracМы можем обрабатывать несколько типов одновременно, поскольку каждый из них отвечает на разные вопросы об одном и том же наборе данных. В таблице ниже сгруппированы типы, с которыми вы сталкиваетесь чаще всего.
| Тип покрытия | Что он измеряет | лучшее Используется для |
|---|---|---|
| Покрытие заявления (строки) | Исполняемые строки выполняются как минимум один раз. | Модульные тесты и аудит устаревшего кода |
| Отделение или покрытие принятия решений | Истинный и ложный результат каждого решения | Условная логика и логика проверки |
| Покрытие условий | Каждое логическое подвыражение может быть как истинным, так и ложным. | Составные выражения И или ИЛИ |
| Покрытие пути | Уникальные маршруты, пройденные в рамках модуля. | Потоки, критически важные для безопасности, и финансовые потоки |
| Функциональное покрытие | Функции или методы, вызываемые тестами. | API и уровни сервисов |
| Покрытие требований | Требования соотнесены как минимум с одним тестом. | Принятие и согласиеtracокончательное утверждение |
| Покрытие рисков | Выявленные зоны высокого риска подверглись учению. | Короткие циклы выпуска |
Первые пять типов представляют собой меры на уровне кода и относятся к тестирование белого ящикаВ то время как требования и охват рисков находятся на уровне плана тестирования.
Каковы основные различия между Code Покрытие и покрытие теста?
Code охват и тестовое покрытие — это методы измерения, которые позволяют оценить качество кода вашего приложения.
Вот некоторые важные различия между стендами этих методов освещения:
| Параметры | Code Покрытие | Покрытие тестов |
|---|---|---|
| Определение | Code Термин «покрытие кода» используется, когда код приложения проверяется во время его работы. | Тестовое покрытие означает общий план тестирования. |
| Цель | Code Показатели покрытия кода могут помочь команде отслеживать результаты автоматизированных тестов. | Тестовое покрытие содержит подробную информацию об уровне, на котором был протестирован письменный код приложения. |
| Подтипы | Code Страховое покрытие разделено на подтипы, такие как покрытие на основе заявлений, покрытие на основе условий, покрытие на основе филиалов. Toggle покрытие, покрытие FSM. | Нет подтипа метода тестового покрытия. |
Формула тестового покрытия
Чтобы рассчитать тестовое покрытие, вам необходимо выполнить следующие шаги:
Шаг 1) Количество Yобщее количество строк кода в разрабатываемом вами программном обеспечении. тестов
Шаг 2) Количество X, количество строк кода, которые в данный момент выполняют все тестовые случаи.
Теперь вам нужно найти (X, разделенный на Y), умноженное на 100. Результатом этого расчета является процент покрытия тестами.
Например:
Если количество строк кода в компоненте системы равно 500, а количество строк, выполненных во всех существующих тестовых случаях, равно 50, то ваше тестовое покрытие составляет:
(50 / 500) * 100 = 10% // executed lines divided by total lines
Примеры тестового покрытия
Процентное соотношение само по себе никогда не отражает всей картины, как показывают приведенные ниже примеры.
Пример 1:
Например, если вы хотите протестировать «нож», то вам нужно сосредоточиться на проверке того, насколько точно он режет овощи или фрукты. Однако есть и другие аспекты, на которые следует обратить внимание, например, удобство использования для пользователя.
Пример 2:
Например, если вы хотите проверить приложение «Блокнот», то проверка его основных функций является обязательной. Однако необходимо также учесть и другие аспекты, такие как: корректная работа приложения «Блокнот» при использовании с другими приложениями, понимание пользователем его функционала, отсутствие сбоев при попытке выполнения необычных действий и т.д.
Методы покрытия тестами
Оба примера приводят к одному и тому же выводу: достижение целевого уровня покрытия зависит не столько от написания большего количества тестов, сколько от выбора правильного метода проектирования тестов. Приведенные ниже методы расширяют покрытие, сохраняя при этом...ping номер небольшой.
- Анализ граничных значений: Выбирает входные данные на границах каждого допустимого диапазона, где дефекты сгруппированы наиболее интенсивно. См. анализ граничных значений для рассмотренных случаев.
- Разделение на эквивалентные категории: Группирует входные данные, которые приложение обрабатывает одинаково, поэтому один случай может безопасно представлять целый класс значений.
- Тестирование таблиц решений: Рассматривает комбинации условий и ожидаемые результаты в рамках одной сетки.
- тестирование перехода состояний: Выполняет проверку всех допустимых и недопустимых перемещений между состояниями приложения.
- Базовое тестирование пути: Выводит минимальный набор независимых путей из графа потока управления.
- Тестирование на основе оценки рисков: Система ранжирует функции по степени влияния на бизнес и в первую очередь рассматривает наиболее рискованные из них.
- Исследовательское тестирование: Выявляет пробелы, которые никогда не обнаруживаются в заранее подготовленных сценариях и отчетах о результатах.
Как можно обеспечить покрытие тестов?
После выбора методов, покрытие обеспечивается четырьмя установленными маршрутами.
- Покрытие тестами можно обеспечить, применяя методы статической проверки, такие как экспертные оценки, проверки и пошаговое руководство.
- Путем преобразования специальных дефектов в исполняемые тестовые примеры.
- На уровне кода или модульного тестирования покрытие тестирования может быть достигнуто с помощью инструментов автоматического покрытия кода или покрытия модульными тестами.
- Покрытие функциональным тестированием может быть выполнено с помощью соответствующих инструментов управления тестированием.
Как улучшить покрытие тестов
Определение уровня покрытия — это отправная точка; его повышение — повторяющаяся процедура. Выполняйте эту последовательность действий в начале каждого цикла выпуска.
- Определите исходное значение текущего показателя. Создайте отчет о покрытии кода и запишите данные о покрытии операторов, ветвей и требований отдельно, чтобы пробелы оставались видимыми для каждого модуля, а не скрывались в общем среднем показателе по проекту.
- Сопоставьте тесты с требованиями. Построить tracТаблица проверки работоспособности, связывающая каждое требование как минимум с одним тестовым случаем. Любая пустая строка указывает на подтвержденное нарушение, а не на подозрение.
- Ранжируйте модули по степени риска. Логика платежей, аутентификации и миграции данных заслуживает гораздо более глубокого внимания, чем просто статичный экран справки, поэтому следует направить бюджет туда, где сбой нанесет наибольший ущерб.
- Добавьте отрицательные и граничные случаи. Пустые входные данные, значения слишком большого размера, сетевые таймауты и ошибки доступа приводят к проблемам, которые никогда не затрагиваются при выполнении стандартных тестов.
- Наложите уровни тестирования друг на друга. Сочетать модульное тестирование, интеграционное тестированиеа также сквозные проверки, поскольку каждый уровень охватывает то, что структурно не могут охватить другие.
- Автоматизируйте набор регрессионных тестов. Promoстабильные случаи в автоматизация тестирования и выполнить их внутри Конвейер CI / CD после каждого коммита.
- Удалите избыточные случаи. Удалите дублирующиеся тесты, которые увеличивают время выполнения, не добавляя ни одной непокрытой строки.
- RevОтслеживайте тренд в каждом спринте. Track покрытие рядом плотность дефектовУвеличение утечек света при плоском покрытии является ранним признаком наличия «слепой зоны».
⚠️ Предупреждение: Не стоит стремиться к 100 процентам. Набор проверок, обеспечивающий 85 процентов защиты с использованием надежных утверждений, защищает релиз гораздо лучше, чем 95 процентов поверхностных проверок, которые выполняют код, не проверяя при этом результат.
Недостатки тестового покрытия
Страховое покрытие по-прежнему ценно, но оно имеет свои ограничения, о которых стоит упомянуть, прежде чем сообщать какие-либо проценты.
- Большинство задач в тестовом покрытии выполняются вручную, поскольку нет инструментов для автоматизации. Поэтому требуется много усилий для анализа требований и создания тестовых примеров.
- Тестовое покрытие позволяет подсчитывать функции, а затем сравнивать их с несколькими тестами. Однако всегда есть место для ошибок в суждениях.

