Инструменты анализа сложности кода за пределами цикломатической сложности - PullRequest
11 голосов
/ 17 июля 2009

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

Какие еще инструменты доступны для идентификации проблемного кода Java?

Обратите внимание, что мы уже используем PMD и FindBugs, которые, как мне кажется, отлично подходят для выявления проблем на уровне методов.

Ответы [ 6 ]

11 голосов
/ 17 июля 2009

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

  • Цикломатическая сложность, для определения больших кусков кода, которые, вероятно, трудно понять / изменить.
  • Глубина вложения, чтобы найти похожие места (большая глубина вложения автоматически увеличивает CC, но не обязательно наоборот, поэтому важно оценивать оба варианта).
  • Разверните / разверните, чтобы лучше понять взаимосвязь между методами / классами и фактическую важность отдельных методов.

При изучении кода, написанного другими, часто полезно включать динамические методы. Просто запустите распространенные сценарии использования через инструмент профилирования / покрытия кода, чтобы обнаружить:

  • Код, который на самом деле выполняется много (для этого отлично подойдет профилировщик, просто проигнорируйте информацию о времени и посмотрите вместо этого на счетчик обращений).
  • Покрытие кода прекрасно, чтобы найти (почти) мертвый код. Чтобы вы не тратили время на рефакторинг кода, который редко выполняется в любом случае.

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

7 голосов
/ 17 июля 2009

Google Testability Explorer проверяет, например, на одиночные и другие статические вещи, которые плохо пахнут в дизайне. Metrics - это плагин Eclipse, который измеряет почти все метрики кода, известные человечеству. Я использовал и могу легко рекомендовать оба.

5 голосов
/ 17 июля 2009

Сонар пытается определить «горячие точки» сложности и удобства обслуживания, объединяя результаты различных инструментов с открытым исходным кодом (включая PMD и Findbugs). Он хорошо интегрируется с серверами Maven и CI (особенно Hudson).

РЕДАКТИРОВАТЬ по extraneon

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

Здесь - это объяснение метрики.

1 голос
/ 17 июля 2009

Я никогда не использовал его, но нашел это довольно интересным и многообещающим:

http://erik.doernenburg.com/2008/11/how-toxic-is-your-code/

И я воспользовался этим и нашел его чрезвычайно полезным, потому что хорошая визуализация зависимостей

http://www.headwaysoftware.com/products/structure101/index.php

0 голосов
/ 28 августа 2010

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

... включая анализ зависимостей и правила кода по запросам LINQ (CQLinq) , предназначенные для того, чтобы спросить, что сложного в моем коде, и написать правило. Вокруг 200 предусмотрены правила кодов по умолчанию . Они касаются анти-шаблонов, таких как Singleton , обнаружение проблем с потоками , обнаружение проблем связывания, таких как Уровень пользовательского интерфейса не должен напрямую использовать типы DB ...

Некоторое время назад я написал статью, в которой обобщил несколько аспектов сложности кода: Боевая сфабрикованная сложность

0 голосов
/ 17 июля 2009

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

Эмма предоставляет анализ покрытия кода, хотя это действительно для тестирования.

...