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

голоса
107

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

Я заинтересован во всех видах

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

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

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

Задан 06/08/2008 в 23:45
источник пользователем
На других языках...                            


12 ответов

голоса
66

Для инструментов статического анализа , я часто использую ДСП, PMD , FindBugs и Checkstyle .

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

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

Я интегрировать эти инструменты с сборки с 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 filterchains .

Вторая «интеграция» , что я делаю это для подавления предупреждения. По умолчанию каждый инструмент поддерживает замечания или аннотацию (или оба) , которые вы можете поместить в код , чтобы заставить замолчать предупреждение , что вы хотите игнорировать. Но эти различные запросы подавление предупреждения не имеют одинаковый внешний вид , который , кажется , несколько глупо. Когда вы подавляя предупреждение, вы подавляя предупреждение, так почему бы не всегда писать « 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, соответственно. Изменение этой конфигурации (с «SuppressionCommentFilter» Checkstyle) , чтобы использовать строки « 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 предупреждения подавлений , чтобы избежать столкновений с Явой @SuppressWarningsаннотацией:

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

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

Ответил 17/09/2008 в 05:02
источник пользователем

голоса
16

Я использую комбинацию Cobertura, Checkstyle, (ECL) Эмма и FindBugs.

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

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

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

Ответил 29/10/2008 в 19:55
источник пользователем

голоса
11

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

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

Кроме того, в нашем Maven строит мы имеем:

  • JDepend
  • Метка проверки (TODO, FIXME и т.д.)

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

Примечание: Клевер имеет вне коробки интеграции с сервером Bamboo CI (так как они оба продукта Atlassian). Есть также бамбуковые плагины для FindBugs, PMD и Checkstyle, но, как уже отмечалось, бесплатный сервер Hudson CI их тоже.

Ответил 16/08/2008 в 19:48
источник пользователем

голоса
8

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

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

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

Ответил 17/09/2008 в 15:40
источник пользователем

голоса
4

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

Ответил 07/08/2008 в 08:18
источник пользователем

голоса
3

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

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

Ответил 07/08/2008 в 08:21
источник пользователем

голоса
1

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

Ответил 17/09/2011 в 07:59
источник пользователем

голоса
1

В нашем проекте мы используем сонар перед Checkstyle, PMD .... вместе с CI (Bamboo, Hudson), мы получаем также хорошую историю нашего качества источника и то, что режиссура мы идем. Я как Sonar, потому что вы один центральный инструмент в CI Stack, который делает это для вас, и вы можете легко настроить правила для каждого проекта.

Ответил 29/08/2010 в 10:56
источник пользователем

голоса
1

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

Ответил 17/09/2008 в 15:46
источник пользователем

голоса
1

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

Ответил 17/09/2008 в 05:31
источник пользователем

голоса
1

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

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

Ответил 07/08/2008 в 01:20
источник пользователем

голоса
0

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

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

  • FindBugs искать общие ошибки плохого / кодирования - бегите от мавена, а также легко интегрируется в Eclipse,
  • Cobertura для отчётов покрытия - бегите от мавенна

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

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

Ответил 08/08/2008 в 15:53
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more