Учебное пособие по покрытию кода: ветвь, утверждение, решение, конечный автомат

Содержание:

Anonim

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

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

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

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

  • Что такое покрытие кода?
  • Зачем использовать покрытие кода?
  • Методы покрытия кода
  • Покрытие заявления
  • Покрытие решений
  • Покрытие филиала
  • Покрытие условий
  • Покрытие конечного автомата
  • Какой тип покрытия кода выбрать
  • Покрытие кода против функционального покрытия
  • Инструменты покрытия кода
  • Преимущества и недостатки использования покрытия кода

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Prints (int a, int b) {------------ Printsum - это функцияint результат = a + b;Если (результат> 0)Печать («Положительно», результат)ЕщеПечать («Отрицательный», результат)} ----------- Конец исходного кода

Сценарий 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) {Если (а> 5)а = а * 3Печать (а)}

Сценарий 1:

Значение a равно 2

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

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

Сценарий 2:

Значение a равно 6

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

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

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

Покрытие филиала

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

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

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

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

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

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

Demo (int a) {Если (а> 5)а = а * 3Печать (а)}

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

Прецедент Значение 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

(а> б)

ЛОЖНЫЙ

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

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

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

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

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

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

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

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

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

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

Название инструмента Описание
Cobertura Это инструмент покрытия открытого исходного кода. Он измеряет тестовое покрытие, используя базу кода и анализируя, какие строки кода выполняются, а какие не выполняются при запуске набора тестов.
Клевер Clover также сокращает время тестирования, выполняя только те тесты, которые охватывают код приложения, который был изменен с момента предыдущей сборки.
DevPartner DevPartner позволяет разработчикам анализировать код Java на предмет качества и сложности кода.
Эмма EMMA поддерживает покрытие классов, методов, строк и базовых блоков, агрегированный исходный файл, классы и уровни методов.
Kalistick Kalistick - это стороннее приложение, которое анализирует коды с разных точек зрения.
CoView и CoAnt Программное обеспечение для кодирования - это инструмент покрытия кода для метрик, создания макетов объектов, тестируемости кода, покрытия путей и ветвей и т. Д.
Bullseye для C ++ BulseyeCoverage - это инструмент покрытия кода для C ++ и C.
Сонар Sonar - это инструмент покрытия открытого кода, который помогает вам управлять качеством кода.

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

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

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

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

Резюме

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