Clover и Jacoco дают разные результаты покрытия кода

#java #unit-testing #code-coverage #jacoco #clover

#java #модульное тестирование #покрытие кода #jacoco #clover

Вопрос:

Я только что провел анализ покрытия кода в своем проекте с помощью Clover, и результат составляет около 60%. Я провел анализ в том же проекте с Jacoco, и результат составил около 52%. Является ли разница в 8% нормальной? Я и раньше проводил анализ покрытия кода с помощью этих инструментов, и разница никогда не была такой огромной.

Ответ №1:

Пожалуйста, обратите внимание, что Clover и JaCoCo используют разные показатели покрытия кода:

  • Clover имеет покрытие метода, оператора и ветви (плюс общий показатель покрытия, который является суммой всех трех)
  • JaCoCo имеет покрытие метода, блока кода, строки, ветви и инструкции

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

Ох. Кстати. Имейте в виду, что JaCoCo использует инструментарий байтового кода, что означает, что он также будет использовать синтетические методы, созданные компилятором javac и которые не видны в исходном коде.

Комментарии:

1. JaCoCo не использует синтетические методы; он обнаруживает и игнорирует их (за исключением неявных конструкторов без аргументов, которые технически не являются синтетическими). Кроме того, JaCoCo действительно имеет только оператор и покрытие ветвей (см. eclemma.org/jacoco/trunk/doc/counters.html ); остальные (строка, блок кода, метод) — это просто производные показатели.