Каковы различия между PMD и FindBugs? - PullRequest
103 голосов
/ 28 ноября 2010

Был вопрос, сравнивающий PMD и CheckStyle . Тем не менее, я не могу найти хороший анализ различий / сходств между PMD и FindBugs. Я считаю, что ключевое отличие заключается в том, что PMD работает с исходным кодом, а FindBugs - скомпилированными файлами байт-кода. Но с точки зрения возможностей, должен ли это быть или / или выбор, или они дополняют друг друга?

Ответы [ 3 ]

141 голосов
/ 28 ноября 2010

Я использую оба. Я думаю, что они дополняют друг друга.

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

FindBugs работает с байт-кодом. Вот некоторые проблемы, которые FindBugs находит, а PMD не находит: метод equals () завершается с ошибкой для подтипов, метод clone может возвращать ноль, ссылочное сравнение логических значений, невозможное приведение, 32-битное int, смещенное на величину, не находящуюся в диапазоне 0-31 коллекция, которая содержит себя, метод equals всегда возвращает true, бесконечный цикл и т. д.

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

22 голосов
/ 31 августа 2011

Лучшая особенность PMD - это Правила XPath , включенные в конструктор правил, которые позволяют легко создавать новые правила из примеров кода (аналогично построителям графического интерфейса RegEx и XPath).FindBugs сильнее, чем когда-либо, но очень важно создавать специфичные для проекта правила и шаблоны.

Например, я столкнулся с проблемой производительности, связанной с 2-мя вложенными циклами for, что привело к O (n ^ 2) времени выполнения, чего можно легко избежать.Я использовал PMD для создания специального запроса , для просмотра других экземпляров вложенных циклов - // ForStatement / Statement // ForStatement.Это указало на еще 2 случая проблемы.Это не общее правило.

3 голосов
/ 29 октября 2015

PMD составляет

  • известный
  • широко используется в промышленности
  • Вы можете добавить свои правила в XML
  • дает подробный анализ уровней ошибок и уровней предупреждений
  • Вы также можете сканировать свой код на «копирование и вставка строк». Дубликат кода. Это дает хорошее представление о реализации java упс.
...