Был question comparing PMD and CheckStyle. Тем не менее, я не могу найти хороший анализ различий/сходств между PMD и FindBugs. Я считаю, что ключевое различие заключается в том, что PMD работает с исходным кодом, а FindBugs работает с скомпилированными файлами байт-кода. Но с точки зрения возможностей, должен ли он быть либо/или выбором, либо дополнять друг друга?В чем разница между PMD и FindBugs?
ответ
Я использую оба. Я думаю, они дополняют друг друга.
Как вы сказали, PMD работает с исходным кодом и поэтому обнаруживает такие проблемы, как: нарушение соглашений об именах, отсутствие фигурных скобок, неправильная проверка нулей, длинный список параметров, ненужный конструктор, отсутствие перерыва в коммутаторе и т. Д. PMD также сообщает вы о вашего кода, который я нахожу очень полезным (FindBugs не говорит вам о сложности Cyclomatic).
FindBugs Работы по байт-коду. Вот некоторые проблемы: FindBugs обнаруживает, что PMD не делает: метод equals() терпит неудачу в подтипах, метод clone может возвращать значение null, сравнительное сравнение логических значений, невозможное литье, 32bit int сдвинуто на величину, не находящуюся в диапазоне 0-31, коллекция, содержащая себя, метод equals всегда возвращает true, бесконечный цикл и т. д.
Обычно каждый из них находит другой набор проблем. Используйте оба варианта. Эти инструменты научили меня многому о том, как написать хороший Java-код.
Лучшая особенность PMD: XPath Rules, в комплекте с конструктором правил, позволяющий легко создавать новые правила из образцов кода (аналогично построителям GUI RegEx и XPath). FindBugs сильнее из коробки, но очень важно разработать конкретные правила и шаблоны проекта.
Например, я столкнулся с проблемой производительности, связанной с 2-мя вложенными циклами, что привело к времени работы O (n^2), чего легко избежать. Я использовал PMD для создания специального запроса , чтобы просмотреть другие экземпляры вложенных циклов - // ForStatement/Statement // ForStatement. Это указывало на еще два случая проблемы. Это не общее правило.
ПМД
- известный
- широко используется в промышленности
- вы можете добавить свои правила в XML
- дает подробный анализ уровней Ошибки и уровни предупреждения
- вы также можете сканировать ваш код для «копировать и вставлять строки». Дублировать код. Это дает хорошее представление об использовании java oops.
- 1. PMD и проверки Findbugs
- 2. анализаторы кода: PMD и FindBugs
- 3. Отчеты PMD, checkstyle, findbugs
- 4. Какая разница между плагина FindBugs-IDEA и QAPlug - FindBugs плагин в IntellijJ IDEA
- 5. CheckStyle, FindBugs и PMD конфигурации без перекрытия
- 6. Плагины Findbugs и PMD на Gradle
- 7. PMD, checkstyle и findbugs android setup
- 8. Разница между метрическими значениями сложности сонара и репортером сложностей PMD
- 9. В чем разница между «и»?
- 10. В чем разница между `{}` и `[]`?
- 11. В чем разница между == и ===?
- 12. В чем разница между «+» и «\ +»?
- 13. В чем разница между + = и = +?
- 14. В чем разница между/* ... */и/** ... */
- 15. В чем разница между: и +:
- 16. В чем разница между $ {} и # {}
- 17. В чем разница между $ _. и $ _
- 18. В чем разница между = и: =
- 19. В чем разница между && и &?
- 20. В чем разница между $ {} и # {}?
- 21. В чем разница между + и%?
- 22. В чем разница между + = и = +
- 23. В чем разница между # {} $ {} и% {}?
- 24. В чем разница между «» и «»?
- 25. В чем разница между ['#'] и [. = '#']?
- 26. В чем разница между == ~ и! =?
- 27. В чем разница между «/» и «/ *»?
- 28. В чем разница между «./» и «../»?
- 29. В чем разница между {}()) и {})()
- 30. В чем разница между «'» и «»
Каков конкретный код ошибки, который вы видели, когда коллекция содержит себя и почему это указывает на вероятную ошибку FindBugs? – Geek 2013-03-17 11:58:35