Cyclomatic сложность с использованием файлов JAR - PullRequest
0 голосов
/ 14 января 2010

Я работаю над проектом, который требует, чтобы я нашел цикломатическую сложность муравья Apache (версии 1.1 - 1.6). Меня попросили использовать файлы jar для этой цели. Я использовал несколько инструментов (пробную версию Xdepend и Cyvis), чтобы посмотреть на результаты. Затем я попытался проверить результаты с результатами из исходного кода Ant Ver1.6. Для анализа источника я использовал плагин Netbeans, а также вручную обнаружил CC некоторых методов.

Что я обнаружил, так это то, что во многих случаях CC из файлов jar был почти одинаковым, но в некоторых было много расхождений. Я изучил один такой метод и обнаружил, что в нем довольно мало блоков try и catch. Мои вопросы:

  1. Выполняет ли java-компилятор оптимизацию (например, разматывание цикла), которая может существенно повлиять на значение CC? Желательно ли использовать jar-файлы для такого анализа?
  2. Есть ли какая-то конкретная проблема с блоками try и catch, и в этом случае я могу рассмотреть другие методы анализа?
  3. Существуют ли лучшие (более точные) инструменты для такого анализа?

Пожалуйста, поделитесь своим опытом по этой теме. Заранее спасибо.

Приветствия

Ответы [ 2 ]

2 голосов
/ 14 января 2010

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

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

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

1 голос
/ 14 января 2010

Это не полный ответ на ваш вопрос ..

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

Но Java Точка доступа является механизмом исполнения байт-кода Java, который динамически компилирует байт-код для его оптимизации во время выполнения.

Таким образом, существует много факторов, которые перекосят код src CC в байт-код CC, но это не означает, что улучшение CC не является ценной работой, оценка CC кода src жизненно важна для поддерживаемого чистого кода.

...