Checkstyle по сравнению с PMD

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

83
задан John Tobler 3 November 2011 в 22:11
поделиться

8 ответов

Необходимо определенно использовать FindBugs. По моему опыту, ложно-положительный уровень является очень низким, и даже наименьшее - к критическим предупреждениям, о которых это сообщает, стоит обратиться в некоторой степени.

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

67
ответ дан John Tobler 24 November 2019 в 08:49
поделиться

PMD - то, что я нахожу большим количеством людей, обращающихся к. Checkstyle был тем, к чему обращались люди 4 года назад, но я полагаю, что PMD сохраняется больше непрерывно и с чем другие IDE/плагины принимают решение работать.

0
ответ дан anjanb 24 November 2019 в 08:49
поделиться

Я повторил бы комментарий, что PMD является более актуальным продуктом для проверки стиля/соглашения Java. Относительно FindBugs много коммерческих групп разработки используют Coverity.

1
ответ дан Steve Moyer 24 November 2019 в 08:49
поделиться

Оба инструмента настраиваются и могут сделать примерно то же самое. Однако если мы говорим о материале out-of-the-box, существует много перекрытия, но также существуют отличные правила/проверки. Например, Checkstyle имеет более сильную поддержку проверки Javadoc и нахождения магических чисел, для именования пары. Кроме того, Checkstyle имеет "функцию" управления импортом, которая выглядит подобной функциональности Macker (я не использовал Macker).

, Если существуют вещи, которые важны для Вас, что Checkstyle делает out-of-the-box, который не делает PMD, Вы могли бы рассмотреть минимальную конфигурацию Checkstyle только с теми проверками. Тогда установите политику, которую конфигурация Checkstyle не может вырастить, просто удалить проверки, поскольку Вы реализуете схожую функциональность с, скажем, пользовательскими правилами PMD.

Также полагают, что, если Вы решаете, что Checkstyle "импортируют управление" покрытия функции, что Вы хотели от Macker, тогда Вы могли реализовать PMD/Checkstyle вместо PMD/Macker. Так или иначе это - два инструмента, но с Checkstyle, Вы получили бы материал, что PMD не делает out-of-the-box "бесплатно".

5
ответ дан Greg Mattes 24 November 2019 в 08:49
поделиться

Checkstyle и PMD и способны проверять стандарты кодирования и легки расшириться. Но PMD имеет дополнительные правила проверить на цикломатическую сложность, сложность Npath, и т.д. который позволяет Вам, пишут здоровый код.

Другим преимуществом использования PMD является CPD (Скопировать/вставить, Детектор).It узнает дублирование кода через проекты и не ограничивается к работам JAVA.It для JSP также. У Neal Ford есть хорошая презентация на Метрики Управляемая Гибкая разработка , который говорит о многих инструментах, которые полезны для Java/Java Разработка EE

5
ответ дан Arjan Tijms 24 November 2019 в 08:49
поделиться

Мы используем обоих:

  • Checkstyle, чтобы удостовериться, что все в команде пишут код подобным способом
  • PMD для нахождения проблематичных областей кода и затем осуществляющих рефакторинг целей
14
ответ дан Ilya Kochetov 24 November 2019 в 08:49
поделиться

Оба программных обеспечения полезны. Checkstyle поможет Вам во время Вашего программирования путем проверки Вашего стиль кодирования т.е. фигурные скобки, именования и т.д. Простые вещи, но очень многочисленный!

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

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

37
ответ дан ROMANIA_engineer 24 November 2019 в 08:49
поделиться

Я нахожу Checkstyle, и PMD являются лучшими для осуществления проблем стиля и простых очевидных ошибок кодирования. Хотя я нашел, что мне нравится использовать Eclipse и все предупреждения, он обеспечивает лучше с этой целью. Мы осуществляем материал при помощи общих предпочтений и маркировки их как фактические ошибки. Тем путем в них никогда не регистрируются во-первых.

то, Что я сильно и с энтузиазмом рекомендовал бы, использует FindBugs. Поскольку это работает на уровне байт-кода, это может проверить вещи, которые невозможны на исходном уровне. В то время как это выкладывает свою добрую долю спама, это нашло много фактических и важных ошибок в нашем коде.

4
ответ дан Alex Miller 24 November 2019 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: