2015-08-14 2 views
2

Я немного запутался в вычислении покрытия линии.Тестирование модулей - как рассчитать покрытие линии с помощью Jacoco

Вот снимок отчета, который был сгенерирован с помощью Jacoco -

enter image description here

Какой смысл каждого из тегов? - Instruction, branch, complexity, line, method, class.

Также есть M и C Подставка для?

+0

Какая версия Jacoco? –

ответ

2

М означает отсутствие линии #/процент из общих и C средств, охватываемых линии/процент от общего количества.

PS: Jacoco Дженкинс панель показывает недостающее и покрыты ТОЛЬКО (из общего объема), но не показывает общее количество/значение /%. Но если вы используете Gradle's jakocoTestReport сгенерированный отчет задачи (то есть index.html), то он показывает только пропущенные # s/percent и не показывает Covered # s /% (думаю, в этом случае, если вы знаете, сколько пропущено и что общего, тогда отдыхают # /%). Хорошо, если вы сопоставляете/вычисляете информацию, предоставленную этими двумя отчетами, для отсутствующих/охватываемых/тоталитарных томов в .html (index.html) или того, что вы видите на панели инструментов задания Jenkins (плагин Jacoco, который читает файлы .exec также), они совпадают !! (поскольку они генерируются теми же .exec-файлами).

Подробнее см. Счетчики покрытия Jacoco.

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

http://www.eecis.udel.edu/~zmanchun/vsl_osx64-1.1/src/jacoco/doc/counters.html

Покрытие Счетчики

JaCoCo использует набор различных счетчиков для расчета показателей охвата. Все эти счетчики получены из информации, содержащейся в файлах классов Java, которые в основном представляют собой инструкции байтового кода Java и информацию об отладке, которые могут быть встроены в файлы классов. Такой подход позволяет эффективно применять «на лету» и анализировать приложения, даже если исходный код отсутствует. В большинстве случаев собранная информация может быть отображена обратно в исходный код и визуализирована до степени детализации на уровне строк. Во всяком случае, существуют ограничения этого подхода. Файлы классов должны быть скомпилированы с информацией об отладке, чтобы рассчитать покрытие уровня линии и обеспечить выделение источника. Не все конструкции языка Java могут быть напрямую скомпилированы в соответствующий байт-код. В таких случаях компилятор Java создает так называемый синтетический код, который иногда приводит к неожиданным результатам покрытия кода.

Инструкции (C0 покрытия)

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

Отрасли (C1) Покрытие

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

Если пристанище файлов классы было собранно с точками отладки информации решения может быть сопоставлен с линиями истока и выделен соответственно:

No coverage: No branches in the line has been executed (red diamond) 
Partial coverage: Only a part of the branches in the line have been executed (yellow diamond) 
Full coverage: All branches in the line have been executed (green diamond) 

цикломатической Сложность

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

Формальное определение цикломатического сложности V (G) основан на представлении графа потока управления методой в качестве ориентированного графа:

v(G) = E - N + 2 

где Е числа ребер и N количества узлы. JaCoCo вычисляет цикломатическую сложность метода со следующим эквивалентным уравнением на основе количества ответвлений (В) и количество точек решения (D):

v(G) = B - D + 1 

на основе статуса покрытия каждой ветви JaCoCo также вычисляет охватываемого и пропущенная сложность для каждого метода. Пропущенная сложность снова указывает на то, что количество тестовых случаев отсутствует, чтобы полностью покрыть модуль. Обратите внимание, что поскольку JaCoCo не рассматривает обработку исключений, так как ветви try/catch блоки также не будут увеличивать сложность. Линии

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

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

No coverage: No instruction in the line has been executed (red background) 
Partial coverage: Only a part of the instruction in the line have been executed (yellow background) 
Full coverage: All instructions in the line have been executed (green background) 

Методы

Каждое из -абстрактный метод содержит хотя бы одну инструкцию. Метод считается выполненным, когда выполняется хотя бы одна инструкция. Поскольку JaCoCo работает на уровне байтового кода, конструкторы и статические инициализаторы учитываются как методы. Некоторые из этих методов могут не иметь прямого соответствия в исходном коде Java, таких как неявные и, следовательно, созданные конструкторы по умолчанию или инициализаторы для констант.

Классы

Класс рассматривается как выполняется, когда по меньшей мере один из его методов была выполнена. Обратите внимание, что JaCoCo рассматривает конструкторы, а также статические инициализаторы как методы. Поскольку типы интерфейсов Java могут содержать статические инициализаторы, такие интерфейсы также рассматриваются как исполняемые классы. JaCoCo 0.6.3.20130409-1102 Copyright © 2009, 2013 Mountainminds GmbH & Co. KG и участники

 Смежные вопросы

  • Нет связанных вопросов^_^