Учебники

Покрытие кода

Что такое покрытие кода?

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

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

В этом уроке вы узнаете

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

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

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

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

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

  • Заявление покрытия
  • Охват решений
  • Охват филиала
  • Переключить покрытие
  • Охват FSM

Заявление покрытия

Что такое покрытие заявления?

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

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

В White Box Testing тестер концентрируется на том, как работает программное обеспечение. Другими словами, тестер будет концентрироваться на внутренней работе исходного кода, касающегося управляющих потоковых диаграмм или блок-схем.

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

Давайте разберемся с этим на примере, как рассчитать покрытие выписки.

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

Исходный код:

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:

Если A = 3, B = 9

Операторы, отмеченные желтым цветом, — это те операторы, которые выполняются в соответствии со сценарием.

Количество выполненных выписок = 5, Общее количество выписок = 7

Охват выписки: 5/7 = 71%

Аналогично мы увидим сценарий 2,

Сценарий 2:

Если A = -3, B = -9

Операторы, отмеченные желтым цветом, — это те операторы, которые выполняются согласно сценарию.

Количество выполненных заявлений = 6

Общее количество заявлений = 7

Охват выписки: 6/7 = 85%

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

Что входит в покрытие заявления?

  1. Неиспользованные заявления
  2. Мертвый код
  3. Неиспользуемые филиалы
  4. Недостающие заявления

Охват решений

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

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

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

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

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

Сценарий 1:

Значение а 2

Код, выделенный желтым цветом, будет выполнен. Здесь «Нет» результат решения If (a> 5) проверяется.

Охват решения = 50%

Сценарий 2:

Значение а 6

Код, выделенный желтым цветом, будет выполнен. Здесь «Да» результат решения Если (а> 5) проверяется.

Охват решения = 50%

Прецедент Значение А Вывод Охват решений
1 2 2 50%
2 6 18 50%

Охват филиала

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

Это помогает вам гарантировать, что каждая возможная ветвь из каждого условия решения выполняется по крайней мере один раз.

Используя метод покрытия Branch, вы также можете измерить долю независимых сегментов кода. Это также поможет вам узнать, какие разделы кода не имеют ветвей.

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

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

Чтобы узнать охват ветвей, давайте рассмотрим тот же пример, который использовался ранее

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

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

Покрытие филиала также будет учитывать безусловное отделение

Прецедент Значение А Вывод Охват решений Охват филиала
1 2 2 50% 33%
2 6 18 50% 67%

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

Тестирование покрытия филиала предлагает следующие преимущества:

  • Позволяет проверить все ветки в коде
  • Помогает вам убедиться, что никакие разветвления не приведут к каким-либо нарушениям работы программы
  • Метод покрытия филиалов устраняет проблемы, возникающие из-за тестирования покрытия операторов
  • Позволяет найти те области, которые не тестируются другими методами тестирования
  • Это позволяет найти количественную меру покрытия кода
  • Покрытие ветви игнорирует ветви внутри булевых выражений

Состояние покрытия

Условное покрытие или покрытие выражений покажет, как оцениваются переменные или подвыражения в условном выражении. В этом покрытии рассматриваются только выражения с логическими операндами.

Например, если в выражении есть логические операции, такие как AND, OR, XOR, которые указывают общие возможности.

Условное покрытие обеспечивает лучшую чувствительность к потоку управления, чем покрытие принятия решения. Условие покрытия не дает гарантии о полном покрытии решения

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

Пример:

Для приведенного выше выражения у нас есть 4 возможных комбинации

  • TT
  • FF
  • TF
  • FT

Рассмотрим следующий вход

Х = 3

Y = 4

(Х <у)

ПРАВДА

Состояние покрытия = 25%

А = 3

В = 4

(А> Ь)

ЛОЖНЫЙ

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

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

Какой тип покрытия кода выбрать

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

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

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

Покрытие кода против функционального покрытия

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

Инструменты покрытия кода

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

Имя инструмента Описание
кокос Это кросс-платформенный и кросс-компиляторный анализ покрытия кода для C, C ++, SystemC, C #, Tcl и QML. Автоматизированное измерение тестового покрытия выписок, веток и условий. Не нужно вносить изменения в приложение. Узнать больше о кокосе
Cobertura Это инструмент покрытия открытого исходного кода. Он измеряет охват тестами, используя инструментальную базу кода и анализируя, какие строки кода выполняются, а какие не выполняются при выполнении набора тестов.
Клевер Clover также сокращает время тестирования, выполняя только те тесты, которые охватывают код приложения, который был изменен с момента предыдущей сборки.
DevPartner DevPartner позволяет разработчикам анализировать код Java на предмет качества и сложности кода.
Эмма EMMA поддерживает покрытие класса, метода, строки и базового блока, агрегированный исходный файл, класс и уровни метода.
Kalistick Kalistick — это стороннее приложение, которое анализирует коды с разных точек зрения.
CoView и CoAnt Coding Software — инструмент покрытия кода для метрик, создания фиктивных объектов, тестируемости кода, покрытия путей и веток и т. Д.
Яблочко для C ++ BulseyeCoverage — это инструмент покрытия кода для C ++ и C.
сонар Sonar — это инструмент покрытия открытого кода, который помогает вам управлять качеством кода.

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

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

Недостатки использования покрытия кода

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

Резюме

  • Покрытие кода — это мера, которая описывает степень тестирования исходного кода программы.
  • Это поможет вам измерить эффективность выполнения теста
  • Пять методов покрытия кода: 1.) покрытие заявления 2.) покрытие условий 3) покрытие филиала 4) переключение покрытия 5) покрытие FSM
  • Охват операторов включает в себя выполнение всех исполняемых операторов в исходном коде по крайней мере один раз
  • Охват решений сообщает об истинных или ложных результатах каждого логического выражения
  • В ветке покрытия каждый результат из модуля кода проверяется
  • Условно покажет, как оцениваются переменные или подвыражения в условном выражении
  • Покрытие конечного автомата, безусловно, является наиболее сложным методом покрытия кода.
  • Чтобы выбрать метод покрытия, тестер должен проверить стоимость потенциального штрафа, потерянной репутации, потерянной продажи и т. Д.
  • Покрытие кода говорит вам, насколько хорошо исходный код был выполнен вашим тестовым стендом, в то время как функциональное покрытие измеряет, насколько хорошо была охвачена функциональность проекта.
  • Cobertura, JTest, Clover, Emma, ​​Kalistick — несколько важных инструментов покрытия кода
  • Code Coverage позволяет создавать дополнительные тестовые случаи для увеличения охвата
  • Покрытие кода не помогает вам определить, проверяли ли мы все возможные значения функции