Какие инструменты анализа кода вы используете для своих Java-проектов?[закрыто]

StackOverflow https://stackoverflow.com/questions/4080

Вопрос

Какие инструменты анализа кода вы используете в своих Java-проектах?

Меня интересуют все виды

  • инструменты статического анализа кода (FindBugs, PMD и любые другие)
  • инструменты покрытия кода (Cobertura, Emma и любые другие)
  • любые другие инструменты, основанные на инструментовке
  • что-нибудь еще, если я что-то упускаю

Если применимо, также укажите, какие инструменты сборки вы используете и насколько хорошо эти инструменты интегрируются как с вашими IDE, так и с инструментами сборки.

Если инструмент доступен только определенным способом (в виде плагина IDE или, скажем, плагина инструмента сборки), эту информацию также стоит отметить.

Это было полезно?

Решение

Для инструментов статического анализа я часто использую CPD, PMD, Найди жуков, и Контрольный стиль.

CPD - это инструмент PMD "Детектор копирования / вставки".Я использовал PMD некоторое время, прежде чем заметил Ссылка "Поиск дублированного кода" на Веб-страница PMD.

Я хотел бы отметить, что иногда эти инструменты могут быть расширены за пределы их "готового" набора правил.И не только потому, что у них открытый исходный код, так что вы можете их переписать.Некоторые из этих инструментов поставляются с приложениями или "крючками", которые позволяют расширять их.Например, PMD поставляется с инструмент "конструктор" это позволяет вам создавать новые правила.Кроме того, Checkstyle имеет Потомок Потоплен убедитесь, что у него есть свойства, позволяющие существенно настраивать его.

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

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

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

/absolute-path/filename:line-number:column-number: warning(tool-name): message

Это часто называют "форматом Emacs", но даже если вы не используете Emacs, это приемлемый формат для унификации отчетов.Например:

/project/src/com/example/Foo.java:425:9: warning(Checkstyle):Missing a Javadoc comment.

Мои преобразования формата предупреждения выполняются моим Ant-скриптом с помощью Ant фильтровальные цепи.

Вторая "интеграция", которую я делаю, предназначена для подавления предупреждений.По умолчанию каждый инструмент поддерживает комментарии или аннотации (или и то, и другое), которые вы можете поместить в свой код, чтобы отключить предупреждение, которое вы хотите проигнорировать.Но эти различные запросы на подавление предупреждений не имеют согласованного внешнего вида, что кажется несколько глупым.Когда вы подавляете предупреждение, вы подавляете предупреждение, так почему бы не всегда писать "SuppressWarning?"

Например, конфигурация PMD по умолчанию подавляет генерацию предупреждений в строках кода со строкой "NOPMD" в комментарии.Кроме того, PMD поддерживает Java @SuppressWarnings аннотация.Я настраиваю PMD для использования комментариев, содержащих "SuppressWarning(PMD." вместо того , чтобы NOPMD так что подавления PMD выглядят одинаково.Я заполняю конкретное правило, которое нарушается при использовании подавления стиля комментария:

// SuppressWarnings(PMD.PreserveStackTrace) justification: (false positive) exceptions are chained

Только тот , кто "SuppressWarnings(PMD." часть важна для комментария, но она согласуется с поддержкой PMD @SuppressWarning аннотация, которая распознает отдельные нарушения правил по имени:

@SuppressWarnings("PMD.CompareObjectsWithEquals") // justification: identity comparision intended

Аналогично, Checkstyle подавляет генерацию предупреждений между парами комментариев (поддержка аннотаций не предусмотрена).По умолчанию комментарии для отключения и включения Checkstyle содержат строки CHECKSTYLE:OFF и CHECKSTYLE:ON, соответственно.Изменение этой конфигурации (с помощью Checkstyle "SuppressionCommentFilter") для использования строк "BEGIN SuppressWarnings(CheckStyle." и "END SuppressWarnings(CheckStyle." делает элементы управления более похожими на PMD:

// BEGIN SuppressWarnings(Checkstyle.HiddenField) justification: "Effective Java," 2nd ed., Bloch, Item 2
// END SuppressWarnings(Checkstyle.HiddenField)

С комментариями Checkstyle конкретное нарушение проверки (HiddenField) является важно, потому что каждая проверка имеет свои собственные "BEGIN/END" пара комментариев.

FindBugs также поддерживает подавление генерации предупреждений с помощью @SuppressWarnings аннотации, поэтому для достижения некоторого уровня единообразия с другими инструментами дополнительная настройка не требуется.К сожалению, Findbugs должен поддерживать пользовательский @SuppressWarnings аннотация, потому что встроенный Java @SuppressWarnings аннотация содержит SOURCE политика хранения, которая недостаточно сильна, чтобы сохранить аннотацию в файле класса, где она нужна FindBugs.Я полностью квалифицирую подавление предупреждений FindBugs, чтобы избежать столкновения с Java @SuppressWarnings аннотация:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")

Благодаря этим методам все выглядит достаточно согласованно во всех инструментах.Обратите внимание, что при подавлении каждого предупреждения содержится строка "SuppressWarnings" упрощает запуск простого поиска, чтобы найти все экземпляры для всех инструментов по всей базе кода.

Другие советы

Я использую комбинацию Cobertura, Checkstyle, (Ecl) Emma и Findbugs.

ЭклЕмма является потрясающе Плагин Eclipse, который показывает покрытие кода путем раскрашивания исходного кода java в редакторе (скриншот) - покрытие генерируется путем запуска теста JUnit.Это действительно полезно, когда вы пытаетесь выяснить, какие строки покрыты определенным классом, или если вы хотите увидеть, какие только строки покрыты одним тестом.Это гораздо удобнее для пользователя и полезнее, чем создавать отчет, а затем просматривать его, чтобы увидеть, какие классы имеют низкий охват.

Плагины Checkstyle и Findbugs Eclipse также полезны, они генерируют предупреждения в редакторе по мере ввода текста.

В Maven2 есть плагины для создания отчетов, которые работают с вышеупомянутыми инструментами для создания отчетов во время сборки.Мы используем это для получения общих отчетов по проекту, которые более полезны, когда вам нужны сводные цифры.Они генерируются нашими сборками CI, которые выполняются с использованием Континуум.

Все нижеперечисленное мы используем и легко интегрируем как в наши сборки Maven 2.x, так и в Eclipse / RAD 7:

  • Тестирование - JUnit/TestNG
  • Анализ кода - FindBugs, PMD
  • Покрытие кода - Clover

Кроме того, в наших сборках Maven у нас есть:

  • JDepend
  • Средство проверки тегов (TODO, FIXME и т.д.)

Кроме того, если вы используете Maven 2.x, в CodeHaus есть коллекция удобных плагинов Maven Проект Mojo.

Примечание:Clover имеет готовую интеграцию с сервером Bamboo CI server (поскольку они оба являются продуктами Atlassian).Существуют также плагины Bamboo для FindBugs, PMD и CheckStyle, но, как уже отмечалось, на бесплатном сервере Hudson CI они тоже есть.

Я использую статический анализ, встроенный в IntelliJ IDEA.Идеальная интеграция.

Я использую покрытие кода, встроенное в Intellij IDEA (на основе EMMA).Опять же, идеальная интеграция.

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

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

Мы используем FindBugs и Checkstyle, а также Clover для покрытия кода.

Я думаю, что важно иметь какой-то статический анализ, поддерживающий вашу разработку.К сожалению, до сих пор не распространено мнение о важности этих инструментов.

Мы используем FindBugs и JDepend, интегрированные с Ant.Мы используем JUnit, но не используем никаких инструментов покрытия.

Я не использую его интегрированным в Rational Application Developer (IDE, которую я использую для разработки приложений J2EE), потому что мне нравится, как аккуратно это выглядит, когда вы запускаете javac в консоли Windows.:P

Мне повезло с Кобертурой.Это инструмент покрытия кода, который может быть выполнен с помощью вашего ant-скрипта как часть вашей обычной сборки и может быть интегрирован в Hudson.

Наша команда использует PMD и Cobertura, на самом деле наши проекты - это проекты maven, и включить плагины для анализа кода очень просто.Реальный вопрос был бы в том, какой анализ для конкретного проекта вам нужно использовать, мое мнение таково, что вы не могли бы использовать одни и те же плагины для каждого проекта.

в нашем проекте мы используем Sonar перед checkstyle, pmd....вместе с CI (Bamboo, Хадсон) мы также получаем приятную информацию о качестве наших исходных текстов и о том, в каком направлении мы работаем.Мне действительно нравится Sonar, потому что вы единственный центральный инструмент в стеке CI, который делает это за вас, и вы можете легко настраивать правила для каждого проекта.

Структура 101 хорош в анализе кода и нахождении циклических зависимостей пакетов.

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

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

  • Findbugs для поиска распространенных ошибок bad / coding - запускается из maven, а также легко интегрируется в Eclipse
  • Cobertura для наших отчетов о покрытии - запускайте из maven

У Hudson также есть плагин для сканирования задач, который отобразит количество ваших задач и исправлений, а также покажет, где они находятся в исходных файлах.

В нашем случае все они интегрированы с Maven 1.x и привязаны к Hudson, который запускает наши сборки при регистрации, а также дополнительные функции по вечерам и еженедельно.Hudson trend отображает графики наших тестов JUnit, охвата, ошибок поиска, а также открытых заданий.Существует также плагин Hudson, который сообщает о наших предупреждениях при компиляции и отображает их на графике.У нас также есть несколько тестов производительности с их собственными графиками производительности и использования памяти с течением времени, также использующими плагин Hudson plots.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top