Code Инструмент анализа покрытия кода: тестирование операторов, ветвлений и решений.

⚡ Умное резюме

Code Покрытие кода — это метод измерения «белого ящика», который показывает, насколько исходный код был протестирован набором тестов.ping Команды выявляют непроверенные утверждения, ветви, условия и пути, в которых могут скрываться дефекты.

  • 🎯 Определение: Code Показатель покрытия кода количественно оценивает, какую часть исходного кода фактически выполняют ваши тесты.
  • 📊 Методы: Существует пять методов: покрытие по утверждениям, по решениям, по ветвлениям, по условиям и по конечным автоматам.
  • 🧩 Выписка по счету против филиала: Проверка покрытия выписки проверяет строки, а проверка покрытия филиала проверяет каждый результат принятого решения.
  • Code против функционального: Code Меры охвата, применяемые в коде; меры функционального охвата, охватывающие требования.
  • 🇧🇷 Инструменты: Cobertura, OpenCloverEMMA и Sonar автоматизируют измерение зоны покрытия.
  • 🤖 Помощь ИИ: Инструменты искусственного интеллекта автоматически генерируют тесты и выявляют непроверенные, представляющие высокий риск пробелы в охвате тестирования.

Code Учебное пособие по анализу покрытия кода

Что такое Code Покрытие?

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

В большинстве случаев система анализа покрытия кода собирает информацию о работающей программе. Затем она объединяет эту информацию с данными исходного кода для создания отчета о покрытии кода тестовым набором.

Зачем использовать Code Тестирование покрытия кода?

Вот несколько основных причин использования покрытия кода:

  • Это помогает измерить эффективность реализации тестов.
  • Это позволяет проводить количественную оценку результатов тестирования.
  • Он определяет степень проверки исходного кода.

Code Методы покрытия

Ниже перечислены основные методы анализа покрытия кода:

  • Покрытие заявления
  • Охват решений
  • Покрытие филиала
  • TogglЭлектронное покрытие
  • Покрытие ФСМ

Покрытие заявления

Покрытие заявления Тестирование методом «белого ящика» — это метод тестирования, при котором все исполняемые инструкции в исходном коде выполняются как минимум один раз. Он используется для подсчета количества выполненных инструкций в исходном коде. Основная цель покрытия инструкций — охватить все возможные пути, строки и инструкции в исходном коде.

Покрытие операторов используется для определения сценариев на основе структуры тестируемого кода.

Покрытие заявления

При тестировании методом «белого ящика» тестировщик концентрируется на том, как работает программное обеспечение. Другими словами, тестировщик фокусируется на внутренней работе исходного кода, касающейся графов потока управления или блок-схем.

Как правило, в любом программном обеспечении, если вы посмотрите на исходный код, вы обнаружите множество различных элементов, таких как операторы, функции, циклы.pingобработчики исключений и так далее. В зависимости от входных данных программы, некоторые операторы кода могут не выполняться. Цель покрытия операторов — охватить все возможные пути, строки и операторы в коде.

Давайте разберемся на примере расчета охвата отчетности. Рассмотрим два разных сценария, чтобы проверить процент охвата отчетности для каждого из них.

Источник Code:

Prints (int a, int b) {                       ------------  Printsum is a function
    int result = a + b;
    If (result > 0)
        Print ("Positive", result)
    Else
        Print ("Negative", result)
    }                                        -----------   End of the source code

Сценарий 1: Если А = 3, В = 9

Сценарий покрытия заявления 1

Операторы, отмеченные желтым цветом, — это те, которые выполняются в соответствии со сценарием. Количество выполненных операторов = 5, общее количество операторов = 7, следовательно, покрытие операторов = 5/7 = 71%.

Сценарий 2: Если А = -3, В = -9

Сценарий покрытия заявления 2

Операторы, отмеченные желтым цветом, — это те, которые выполняются в соответствии со сценарием. Количество выполненных операторов = 6, общее количество операторов = 7, следовательно, покрытие операторов = 6/7 = 85%.

Но в целом, как вы видите, все утверждения охватываются обоими сценариями. Таким образом, мы можем заключить, что общий охват утверждений составляет 100%.

На что распространяется покрытие заявлений?

  1. Неиспользованные операторы
  2. Dead Code
  3. Неиспользуемые ветки
  4. Отсутствующие заявления

Тестирование покрытия решений

Охват решений Тестирование с использованием метода «белого ящика» сообщает о результатах выполнения каждого логического выражения в исходном коде: истинно или ложно. Цель тестирования с использованием метода покрытия решений — охватить и проверить весь доступный исходный код, убедившись, что каждая ветвь каждой возможной точки принятия решения выполнена хотя бы один раз.

В этом типе покрытия выражения могут становиться сложными, что затрудняет достижение 100% покрытия. Именно поэтому для оценки этого показателя используются различные методы. Эти методы отдают приоритет наиболее важным комбинациям. Хотя он похож на покрытие ветвлений, он обеспечивает большую чувствительность к потоку управления.

Тестирование покрытия решений

Пример покрытия решения

Рассмотрим следующий код:

Demo(int a) {
    If (a > 5)
        a = a * 3
    Print (a)
    }

Сценарий 1: Значение параметра a равно 2. Если отмечен результат «Нет» (a>5), то охват решения равен 50%.

Сценарий 2: Значение параметра a равно 6. Если отмечено «Да» в решении (a>5), то охват решения равен 50%.

Тестовый кейс Значение А Результат Охват решений
1 2 2 50%
2 6 18 50%

Тестирование покрытия филиалов

Покрытие филиала Это метод тестирования «белого ящика», при котором проверяется каждый результат выполнения модуля кода (оператор или цикл). Цель покрытия ветвей — гарантировать, что каждое условие принятия решения в каждой ветви выполняется хотя бы один раз. Это помогает измерить долю независимых сегментов кода и выявить участки, не имеющие ветвей.

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

Формула для расчета охвата филиалов:

Формула покрытия филиалов

Пример покрытия филиалов

Чтобы изучить покрытие ветвлений, рассмотрим тот же пример, что и ранее. Покрытие ветвлений также учитывает безусловное ветвление.

Тестовый кейс Значение А Результат Охват решений Покрытие филиала
1 2 2 50% 33%
2 6 18 50% 67%

Преимущества покрытия филиала:

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

Тестирование покрытия условий

Покрытие условийПокрытие выражений — это метод тестирования, используемый для проверки и оценки переменных или подвыражений в условном операторе. Цель покрытия выражений — проверить отдельные результаты для каждого логического условия. Покрытие выражений обеспечивает лучшую чувствительность к потоку управления, чем покрытие решений. В этом случае рассматриваются только выражения с логическими операндами.

Например, если выражение содержит логические операции, такие как И, ИЛИ или Исключающее ИЛИ, это указывает на общее количество возможных вариантов. Покрытие условий не гарантирует полного покрытия решений.

Формула для расчета покрытия условий:

Формула покрытия условий

Для выражения с двумя операндами существует четыре возможных комбинации: TT, FF, TF и ​​FT. Рассмотрим входные данные X=3, Y=4 (x). б) ЛОЖЬ, что дает покрытие по условиям 1/4 = 25%.

Покрытие конечного автомата

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

Какой тип Code Выбор страхового покрытия

Это, безусловно, самый сложный ответ. Для выбора метода анализа покрытия кода тестировщик должен проверить, выполняется ли следующее:

  • В тестируемом коде обнаружен один или несколько невыявленных дефектов.
  • стоимость потенциального штрафа,
  • Цена утраченной репутации.
  • стоимость упущенной выгоды и так далее.

Чем выше вероятность того, что дефекты приведут к дорогостоящим производственным сбоям, тем более серьезный уровень страхового покрытия вам придется выбрать.

Code Страховое покрытие против функционального страхового покрытия

Code Покрытие Функциональное покрытие
Показывает, насколько хорошо исходный код был протестирован вашим тестовым стендом. Измеряет, насколько хорошо функциональность конструкции была проверена на вашем испытательном стенде.
Никогда не использует техническое задание. Использует техническое задание.
Сделано разработчиками. Выполнено тестировщиками.

Code Инструменты анализа покрытия

Вот список важных инструментов для анализа покрытия кода:

Имя инструмента Описание
Cobertura Инструмент для анализа покрытия кода с открытым исходным кодом. Он измеряет покрытие тестов, инструментируя кодовую базу и анализируя, какие строки кода выполняются, а какие нет при запуске набора тестов.
Клевер Клевер (OpenCloverКроме того, это сокращает время тестирования, поскольку запускаются только те тесты, которые охватывают код приложения, измененный с момента предыдущей сборки.
DevPartner DevPartner позволяет разработчикам анализировать Java код для оценки качества и сложности кода.
Эмма EMMA поддерживает покрытие кода на уровне классов, методов, строк и базовых блоков, агрегированное на уровне исходного файла, класса и метода.
Калистик Kalistick — это стороннее приложение, которое анализирует код с разных точек зрения.
CoView и CoAnt Инструмент для анализа покрытия кода, позволяющий собирать метрики, создавать фиктивные объекты, повышать тестируемость кода, анализировать покрытие путей и ветвей и многое другое.
Яблочко для C++ BullseyeCoverage — это инструмент для анализа покрытия кода. C++ и C.
Сонар Sonar — это инструмент с открытым исходным кодом для анализа покрытия кода, который помогает управлять качеством кода.

Преимущества и недостатки использования Code Покрытие

Преимущества Недостатки
Полезно оценить количественный показатель покрытия кода. Даже если конкретная функция не реализована в проекте, отчет о покрытии кода все равно показывает 100%.
Позволяет создавать дополнительные тестовые случаи для увеличения охвата тестирования. Невозможно определить, были ли проверены все возможные значения характеристики с помощью анализа покрытия кода.
Позволяет найти области программы, не задействованные в наборе тестовых случаев. Code Показатель охвата не указывает на то, насколько подробно и хорошо вы изложили свою логику.

Часто задаваемые вопросы (FAQ)

Многие команды ставят перед собой цель достичь 70-80% выполнения кода. Достижение 100% редко бывает экономически целесообразным. Лучше сосредоточиться на обеспечении работоспособности критически важной и высокорискованной логики, а не гнаться за одним показателем по всему коду.

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

Code Покрытие тестов измеряет, какой объем исходного кода выполняется во время тестирования. Покрытие тестов — более широкий показатель. tracнасколько хорошо тесты соответствуют требованиям, функциям и рискам. Code Покрытие теста — это один из параметров, влияющих на общее покрытие теста.

Нет. Можно достичь 100% покрытия операторов, не проверяя ветвления, например, отсутствующий путь else. Покрытие ветвлений (решений) сильнее, потому что оно включает в себя покрытие операторов и проверяет каждый результат.

Искусственный интеллект анализирует исходный код и существующие тесты, чтобы выявить непроверенные, высокорискованные пути, а затем предлагает или генерирует новые кейсы. Машинное обучение также определяет приоритетность запускаемых тестов, сокращая время обратной связи и поддерживая...ping Высокий уровень покрытия.

Да. Инструменты искусственного интеллекта, такие как Diffblue Cover, сканируют код и автоматически пишут модульные тесты для непокрытой логики. Они нацелены на рискованные ветви и условия, повышая покрытие с гораздо меньшими усилиями вручную.

OpenClover Измеряет покрытие операторов, ветвей и методов и собирает более 20 метрик. CoberturaЭмма и JaCoCo существуют и другие широко распространенные бесплатные варианты для Java проектов.

Модифицированное покрытие условий/решений требует, чтобы каждое условие в решении независимо влияло на результат. Оно более строгое, чем покрытие ветвей, и является обязательным для критически важного программного обеспечения, такого как авионика, в соответствии со стандартом DO-178C.

Подведем итог этой публикации следующим образом: