Checkstyle и PMD и
мы вводим инструменты статического анализа в систему сборки для нашего продукта Java. Мы используем Maven2 так Checkstyle и PMD интеграция приходит бесплатно. Однако, похоже, есть большие совпадения в функциональности между этими двумя инструментами, с точки зрения соблюдения основных правил стиля.
есть ли польза от использования каждого из этих? Я не хочу поддерживать 2 инструмента, если один будет работать. Если мы выберем один, какой из них мы должны использовать и зачем?
мы также планируем использовать FindBugs. Есть ли другие инструменты статического анализа, которые мы должны рассмотреть?
обновление: консенсус, похоже, заключается в том, что PMD предпочтительнее CheckStyle. Я не вижу веской причины использовать оба, и я не хочу поддерживать 2 набора файлов правил, поэтому мы, вероятно, будем стремиться исключительно к PMD. Мы также будем привлекать FindBugs и, возможно, в конечном итоге, Macker для обеспечения соблюдения архитектурных правил.
17 ответов:
вы обязательно должны использовать FindBugs. По моему опыту, уровень ложноположительных результатов очень низок, и даже наименее критические предупреждения, о которых он сообщает, в какой-то степени заслуживают внимания.
Что касается Checkstyle против PMD, я бы не использовал Checkstyle, так как он в значительной степени связан только со стилем. По моему опыту, Checkstyle будет сообщать о тонне вещей, которые совершенно неуместны. PMD, с другой стороны, также может указать на сомнительные методы кодирования и его результаты, как правило, более актуальны и полезны.
оба программного обеспечения полезны. Checkstyle поможет вам во время программирования, проверив ваш кодирование стиле т. е. фигурные скобки, именование и т. д. Простые вещи, но очень много!
PMD поможет вам, проверяя более сложные правила, такие как во время проектирования ваших классов, или для более специальных проблем, таких как правильная реализация функции клонирования. Просто, PMD проверит ваш стиль программирования
однако, оба программного обеспечения страдает от подобные правила иногда плохо объясняются. При плохой конфигурации вы можете проверить вещи дважды или две противоположные вещи, т. е. "удалить бесполезные конструкторы" и "всегда один конструктор".
если мы выберем один, какой из них мы должны использовать и почему?
эти инструменты не конкурируют, а дополняют друг друга и должны использоваться одновременно.
тип соглашения (Checkstyle) - это клей, который позволяет людям работать вместе и освобождать свое творчество вместо того, чтобы тратить время и энергию на понимание непоследовательного кода.
Checkstyle примеры:
- есть ли javadoc на публичных методах ?
- проект следующие условные обозначения Солнца ?
- написан ли код в согласованном формате ?
в то время как PMD напоминает вам плохие практики:
- ловить исключение, ничего не делая
- имея мертвый код
- слишком много сложных методов
- прямое использование реализаций вместо интерфейсов
- реализация метода hashcode () без метода not метод equals (Object object)
источник: http://www.sonarsource.org/what-makes-checkstyle-pmd-findbugs-and-macker-complementary/
мы используем:
- Checkstyle, чтобы убедиться, что все в команде пишут код в подобной манере
- PMD для поиска проблемных областей кода и следующих целей рефакторинга
Если ваше основное место использования при разработке в eclipse, то CodePro из экземпляров будет лучше всего. Раньше это был коммерческий инструмент, но теперь Google купил экземпляры, поэтому CodePro analytix теперь свободен.
проверить http://code.google.com/javadevtools/download-codepro.html
Если вы просмотрели списки правил Checkstyle, PMD и Findbugs, вы увидели, что все три обеспечивают ценный результат и все три перекрываются в определенной степени, а также приносят свои собственные уникальные правила в таблицу. Вот почему такие инструменты, как Сонар, используют все три.
тем не менее, Findbugs имеет самые конкретные или нишевые правила (например, "сомнительный улов IllegalMonitorStateException" - как часто вы, вероятно, столкнетесь с этим?) таким образом, он может использоваться с небольшой или никакой конфигурацией и ее предупреждениями следует отнестись к этому серьезно. С Checkstyle и PMD правила носят более общий характер и относящихся к стилю, поэтому они должны быть использованы только с пользовательские файлы конфигурации, чтобы избавить команду от лавины ненужной обратной связи ("символ табуляции в строке 5", "символ табуляции в строке 6", "символ табуляции в строке 7"... вы получаете картину). Они также предоставляют мощные инструменты для написания собственных расширенных правил, например Checkstyle DescendentToken правило.
при использовании всех трех (особенно с таким инструментом, как Sonar), все они должны быть настроены отдельно (требуется не менее нескольких дней, чтобы охватить все правила), обращая внимание на предотвращение дублирования (все три инструмента обнаруживают, что хэш-код () был переопределен и равен () не, например).
таким образом, если вы считаете статический анализ кода ценным, отклонение значения любого из трех обеспечивает не имеет смысла, но чтобы использовать все три, вы должны инвестировать время, чтобы настроить их, чтобы дать вам полезную обратную связь.
гидролокатор (http://www.sonarsource.org/) является очень полезной открытой платформой для управления качеством кода, и включает в себя Checkstyle, PMD, Findbugs и многое другое.
Это также означает, что все 3 инструмента имеют право на существование...
Checkstyle и PMD оба хороши при проверке стандартов кодирования и легко расширяются. Но PMD имеет дополнительные правила для проверки цикломатической сложности, сложности Npath и т. д., что позволяет писать здоровый код.
еще одним преимуществом использования PMD является CPD (детектор копирования/вставки). он обнаруживает дублирование кода между проектами и не ограничен JAVA.It работает и для JSP. Нил Форд имеет хорошую презентацию на Управляемая Метриками Гибкая Разработка, что говорит о многие инструменты, которые полезны для разработки Java / Java EE
Я считаю, что Checkstyle и PMD лучше всего подходят для обеспечения проблем стиля и простых очевидных ошибок кодирования. Хотя я обнаружил, что мне нравится использовать Eclipse и все предупреждения, которые он предоставляет лучше для этой цели. Мы применяем материал, используя общие предпочтения и отмечая их как фактические ошибки. Таким образом, они никогда не регистрируются в первую очередь.
то, что я бы настоятельно и с энтузиазмом рекомендовал использовать FindBugs. Поскольку он работает на уровне байт-кода, он может проверять вещи это невозможно на уровне источника. Хотя он выплевывает свою справедливую долю джонки, он нашел много фактических и важных ошибок в нашем коде.
оба инструмента настраиваются и могут делать примерно то же самое. Тем не менее, если мы говорим о готовом материале, есть много перекрытий, но есть и отдельные правила/проверки. Например, Checkstyle имеет более сильную поддержку для проверки Javadoc и поиска магических чисел, чтобы назвать пару. Кроме того, Checkstyle имеет функцию "контроль импорта", которая похожа на функциональность Macker (я не использовал Macker).
Если есть вещи, которые для вас важно, что Checkstyle делает из коробки, что PMD не делает, вы можете рассмотреть минимальную конфигурацию Checkstyle только с этими проверками. Затем установите политику, что конфигурация Checkstyle не может расти, просто удалите проверки, поскольку вы реализуете аналогичную функциональность, скажем, с пользовательскими правилами PMD.
также учтите, что если вы решите, что функция Checkstyle "контроль импорта" охватывает то, что вы хотели от Macker, то вы можете реализовать PMD/Checkstyle вместо PMD / Macker. В любом случае это два инструмента, но с Checkstyle вы получите то, что PMD не делает из коробки "бесплатно."
один момент, который я до сих пор не видел, заключается в том, что есть плагины для IDE, которые будут применять наборы правил CheckStyle в вашем коде, тогда как плагины PMD будут сообщать только о нарушениях. Например, в многосайтовом проекте для нескольких команд разработчиков важно активно применять стандарты, а не просто отчитываться о них.
оба инструмента имеют Плагины, доступные для IntelliJ, NetBeans и Eclipse (на мой взгляд, это охватывает большую часть использования). Я не так хорошо знаком с NetBeans, так можно только комментировать IntelliJ и Eclipse.
в любом случае, Плагины PMD для IntelliJ и Eclipse будут генерировать отчеты по требованию о нарушениях PMD в рамках кодовой базы проекта.
Плагины CheckStyle, с другой стороны, будут выделять нарушения на лету и могут (по крайней мере, для IntelliJ, у меня меньше опыта работы с Eclipse) быть настроены для автоматического преобразования некоторых проблем (например, для "OneStatementPerLine", разместит CR - LF между операторами, для "NeedBraces", добавит фигурные скобки, где они отсутствуют, и т. д.). Очевидно, что только более простые нарушения могут быть автоматически исправлены, но это все еще помощь в устаревших проектах или проектах, расположенных в нескольких местах.
"по требованию" для PMD означает, что разработчик должен сознательно решить запустить отчет. В то время как нарушения стиля проверки автоматически сообщаются им по мере их развития. Пока ПМД тут содержат более широкий набор правил, на мой взгляд, автоматические принудительное исполнение / отчетность о нарушениях в IDE стоит хлопот по поддержанию 2 наборов правил.
поэтому для любых проектов, над которыми я работаю, мы используем оба инструмента, Checkstyle, применяемый в IDE, PMD, сообщенный в IDE, и и сообщается и измеряется в сборках (через Дженкинса).
посмотри qulice-maven-plugin который объединяет Checkstyle, PMD, FindBugs и несколько других статических анализаторов и предварительно настраивает их. Красота этой комбинации заключается в том, что вам не нужно настраивать их индивидуально в каждом проекте:
<plugin> <groupId>com.qulice</groupId> <artifactId>qulice-maven-plugin</artifactId> <version>0.15</version> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin>
и 10 лет спустя ... В 2018 году я использую все из них Checkstyle, PMD и FindBugs.
Начнем с FindBugs. Может быть, добавить PMD и Checkstyle позже.
никогда не применяйте слепо правила по умолчанию !
действия:
- запустите один инструмент с правилами по умолчанию для проекта, который имеет много кода
- адаптировать правила к этому проекту, комментировать бесполезные правила с некоторыми примечаниями
- фокус на правила низко висящих фруктов (NPE, проверки регистратора, незамкнутые проверки ресурсов, ...)
- выполните некоторые исправления для правил, которые вы считаете стоящими (по одному !)
- сделать для каждого инструмента, но не все сразу !
- повторите этот процесс
в идеале каждый проект может иметь отдельные правила. Мне нравится запускать правила через сборку (через плагины maven) и терпеть неудачу при ошибках правил, как только я знаю, что проект передает все правила, которые я определил. Это заставляет разработчиков примите меры, потому что отчетности недостаточно. С этого момента ваш проект в значительной степени пуленепробиваемый, и вы можете даже добавить больше правил позже и/или написать пользовательские правила.
Я бы повторил комментарий, что PMD является более актуальным продуктом для проверки стиля Java/конвенции. Что касается FindBugs, многие коммерческие группы разработки используют Coverity.
Я только начал использовать Checkstyle и PMD. Для меня PMD проще создавать индивидуальные правила для таких вещей, что существует ли система.gc (), Runtime.gc (), пока вы можете написать запрос XPath, который также не является сложным. Однако PMD не показал мне, что у него есть функция для отображения номера столбца. Поэтому для таких вещей, как проверка ограничений столбцов. Возможно, вы хотели бы использовать Checkstyle.
PMD - это то, что я нахожу больше людей, имеющих в виду. Checkstyle - это то, что люди имели в виду 4 года назад, но я считаю, что PMD поддерживается более непрерывно и что другие IDE/Плагины выбирают для работы.
PMD является лучшим инструментом при сравнении с checkstyles. Checkstyles может не иметь возможности анализировать код, в то время как PMD предлагает множество функций для этого! Offcourse PMD не выпустил правила для javadoc, комментариев, отступов и т. д. И кстати я планирую реализовать эти правила.......спасибо