Учебное пособие по покрытию кода: тестирование ветвей, операторов и решений
Что такое покрытие кода?
Покрытие кода — это показатель, который описывает степень проверки исходного кода программы. Это одна из форм тестирования «белого ящика», при которой выявляются области программы, не задействованные в наборе тестовых примеров. Он также создает несколько тестовых примеров для увеличения покрытия и определения количественной меры покрытия кода.
В большинстве случаев система покрытия кода собирает информацию о запущенной программе. Он также объединяет эту информацию с информацией об исходном коде для создания отчета о покрытии кода набора тестов.
Зачем использовать тестирование покрытия кода?
Вот несколько основных причин использования покрытия кода:
- Это поможет вам измерить эффективность реализации тестов.
- Он предлагает количественное измерение.
- Он определяет степень проверки исходного кода.
Методы покрытия кода
Ниже приведены основные методы покрытия кода.
- Покрытие заявлений
- Охват решений
- Покрытие филиала
- TogglЭлектронное покрытие
- Покрытие ФСМ
Покрытие заявления
Покрытие заявления — это метод тестирования «белого ящика», при котором все исполняемые операторы исходного кода выполняются хотя бы один раз. Он используется для подсчета количества выполненных операторов в исходном коде. Основная цель покрытия операторов — охватить все возможные пути, строки и операторы в исходном коде.
Покрытие операторов используется для создания сценария на основе структуры тестируемого кода.
In Белый Box Тестирование, тестер концентрируется на том, как работает программное обеспечение. Другими словами, тестер будет концентрироваться на внутренней работе исходного кода, касающейся графов или блок-схем управления.
Как правило, в любом программном обеспечении, если мы посмотрим на исходный код, там будет большое количество элементов, таких как операторы, функции, циклы, исключительные обработчики и т. д. В зависимости от ввода в программу некоторые операторы кода могут не выполняться. . Цель покрытия операторов — охватить все возможные пути, строки и операторы в коде.
Давайте разберемся в этом на примере, как рассчитать покрытие операторов.
Сценарий расчета покрытия операторов для данного исходного кода. Здесь мы рассмотрим два разных сценария, чтобы проверить процент покрытия операторов для каждого сценария.
Исходный код:
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Заявления, отмеченные желтым цветом, — это те, которые выполняются в соответствии со сценарием.
Количество выполненных операторов = 5, Общее количество операторов = 7
Покрытие заявлений: 5/7 = 71%
Аналогично мы увидим сценарий 2,
Сценарий 2:
Если А = -3, В = -9
Заявления, отмеченные желтым цветом, — это те, которые выполняются в соответствии со сценарием.
Количество выполненных операторов = 6
Общее количество утверждений = 7
Покрытие заявлений: 6/7 = 85%
Но в целом, если вы видите, все заявления подпадают под оба сценария. Таким образом, мы можем сделать вывод, что общее покрытие операторов составляет 100%.
На что распространяется покрытие заявлений?
- Неиспользованные операторы
- Мертвый код
- Неиспользуемые ветки
- Отсутствующие заявления
Тестирование покрытия решений
Охват решений — это метод тестирования «белого ящика», который сообщает об истинных или ложных результатах каждого логического выражения исходного кода. Цель тестирования покрытия решений — охватить и проверить весь доступный исходный код, проверяя и гарантируя, что каждая ветвь каждой возможной точки принятия решения выполняется хотя бы один раз.
В этом типе покрытия выражения могут стать сложными, что затрудняет достижение 100% покрытия. Вот почему для сообщения этой метрики используются различные методы. Эти методы отдают приоритет наиболее критическим комбинациям. Хотя это похоже на покрытие решений, оно обеспечивает большую чувствительность к потоку управления.
Пример покрытия решений
Рассмотрим следующий код:
Demo(int a) {
If (a> 5)
a=a*3
Print (a)
}
Сценарий 1:
Значение a равно 2
Код, выделенный желтым, будет выполнен. Здесь проверяется результат «Нет» решения If (a>5).
Охват решений = 50 %
Сценарий 2:
Значение a равно 6
Код, выделенный желтым, будет выполнен. Здесь проверяется результат «Да» решения If (a>5).
Охват решений = 50 %
| Тестовый кейс | Значение А | Результат | Охват решений |
|---|---|---|---|
| 1 | 2 | 2 | 50%. |
| 2 | 6 | 18 | 50%. |
Тестирование покрытия филиалов
Покрытие филиала — это метод тестирования «белого ящика», при котором проверяется каждый результат модуля кода (оператора или цикла). Целью покрытия ветвей является обеспечение того, чтобы каждое условие решения из каждой ветки выполнялось хотя бы один раз. Это помогает измерить доли независимых сегментов кода и обнаружить участки, не имеющие ответвлений.
Например, если результаты являются двоичными, вам необходимо проверить как истинные, так и ложные результаты.
Формула для расчета охвата филиалов:
Пример покрытия филиалов
Чтобы изучить покрытие филиалов, давайте рассмотрим тот же пример, который использовался ранее.
Рассмотрим следующий код:
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 |
(а>б) | НЕПРАВДА |
Покрытие конечного автомата
Покрытие конечного автомата, безусловно, является наиболее сложным типом метода покрытия кода. Это потому, что это влияет на поведение конструкции. В этом методе покрытия вам нужно посмотреть, сколько состояний с конкретным временем посещено и пройдено. Он также проверяет, сколько последовательностей включено в конечный автомат.
Какой тип покрытия кода выбрать
Это, конечно, самый трудный ответ. Чтобы выбрать метод покрытия, тестировщику необходимо проверить, что
- тестируемый код имеет один или несколько необнаруженных дефектов
- стоимость потенциального штрафа
- цена утраченной репутации
- стоимость упущенной выгоды и т. д.
Чем выше вероятность того, что дефекты приведут к дорогостоящим производственным сбоям, тем более серьезный уровень страхового покрытия вам придется выбрать.
Покрытие кода и функциональное покрытие
| Покрытие кода | Функциональное покрытие |
|---|---|
| Покрытие кода показывает, насколько хорошо исходный код был проверен на вашем тестовом стенде. | Функциональный охват показывает, насколько хорошо функциональность проекта охвачена вашим испытательным стендом. |
| Никогда не используйте спецификацию проекта | Использовать проектную спецификацию |
| Сделано разработчиками | Сделано тестировщиками |
Инструменты покрытия кода
Вот список важных инструментов покрытия кода:
| Имя инструмента | Описание |
|---|---|
| Cobertura | Это инструмент покрытия кода с открытым исходным кодом. Он измеряет покрытие тестами путем инструментирования базы кода и анализирует, какие строки кода выполняются, а какие не выполняются при запуске набора тестов. |
| Клевер | Clover также сокращает время тестирования, запуская только те тесты, которые охватывают код приложения, который был изменен со времени предыдущей сборки. |
| DevPartner | DevPartner позволяет разработчикам анализировать Java код для качества и сложности кода. |
| Эмма | EMMA поддерживает покрытие класса, метода, строки и базового блока, уровни агрегированного исходного файла, класса и метода. |
| Калистик | Kalistick — стороннее приложение, которое анализирует коды с разных точек зрения. |
| CoView и CoAnt | Программное обеспечение для кодирования — это инструмент покрытия кода для метрик, создания макетов объектов, тестируемости кода, покрытия путей и ветвей и т. д. |
| Яблочко для C++ | BulseyeCoverage — это инструмент покрытия кода для C++ и C. |
| Сонар | Sonar — это инструмент покрытия открытого кода, который помогает вам управлять качеством кода. |
Преимущества и недостатки использования покрытия кода
| Преимущества покрытия кода | Недостатки покрытия кода |
|---|---|
| Полезно оценить количественный показатель покрытия кода. | Даже если какая-либо конкретная функция не реализована в проекте, покрытие кода все равно составляет 100%. |
| Это позволяет вам создавать дополнительные тестовые примеры для увеличения покрытия. | Невозможно определить, протестировали ли мы все возможные значения признака с помощью покрытия кода. |
| Это позволяет вам находить области программы, которые не проверяются набором тестовых примеров. | Покрытие кода также не говорит о том, насколько хорошо вы рассмотрели свою логику. |
| В случае, если указанная функция не реализована или не включена в спецификацию, методы, основанные на структуре, не смогут обнаружить эту проблему. |
Резюме
- Покрытие кода — это показатель, который описывает степень проверки исходного кода программы.
- Это поможет вам измерить эффективность реализации тестов.
- Пять методов покрытия кода: 1.) Покрытие операторов 2.) Покрытие условий 3) Покрытие ветвей 4) Toggle Покрытие 5) Покрытие FSM
- Покрытие операторов предполагает выполнение всех исполняемых операторов в исходном коде хотя бы один раз.
- Покрытие решений сообщает об истинных или ложных результатах каждого логического выражения.
- В охвате филиала проверяется каждый результат модуля кода.
- Условное выражение покажет, как оцениваются переменные или подвыражения в условном операторе.
- Метод конечного автомата, безусловно, является наиболее сложным типом метода покрытия кода.
- Чтобы выбрать метод покрытия, тестировщику необходимо проверить стоимость потенциального штрафа, потери репутации, потери продаж и т. д.
- Покрытие кода показывает, насколько хорошо исходный код был проверен вашим тестовым стендом, а функциональное покрытие измеряет, насколько хорошо охвачена функциональность проекта.
- Cobertura, JTest, Clover, Emma, Kalistick — несколько важных инструментов покрытия кода.
- Code Coverage позволяет создавать дополнительные тестовые примеры для увеличения покрытия.
- Покрытие кода не помогает вам определить, протестировали ли мы все возможные значения функции.













