Подтвердить что ты не робот

Каковы различия между тремя методами анализа покрытия кода?

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

  • Инструментарий исходного кода (используется Clover)
  • Инструментарий автономного байтового кода (используется Cobertura)
  • Инструментарий байтового кода на лету (используется Jacoco)

Каковы эти три метода, и какой из них наиболее эффективен и почему? Если ответ на вопрос об эффективности "зависит", то объясните, почему?

4b9b3361

Ответ 1

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

Оффлайн байт-код состоит из добавления тех же инструкций, но после компиляции непосредственно в байтовый код.

Инструментарий байтового кода "на лету" состоит в том, чтобы добавлять те же инструкции в байт-код, но динамически, во время выполнения, когда байт-код загружается JVM.

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

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

Ответ 2

В общем, эффект на покрытие одинаковый.

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

Предположим, что у меня есть два вложенных оператора if (или эквивалентно, , если (a & b)... *) в одной строке. Средство анализатора исходного кода может видеть их и предоставлять информацию о покрытии для нескольких плеч в пределах if, в пределах линии источника; он может сообщать блоки на основе строк и столбцов. Инструмент байтового кода видит только одну линию, обернутую вокруг условий. Означает ли строка в строке "покрыто", если условие a выполняется, но является ложным?

Вы можете утверждать, что это редкое обстоятельство (и это, вероятно, есть), и поэтому не очень полезно. Когда вы получаете фиктивный охват, а затем сбой поля, вы можете изменить свое мнение об утилите.

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

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