您使用什么静态分析器来运行Java代码,为什么?

Fin*_*arr 8 java static-analysis

我已经尝试了几种不同的Java静态分析器,特别是Findbugs和PMD.

我正在寻找可能值得在Java代码上运行的其他静态分析器的示例.

Bal*_*usC 12

FindBugsPMD旁边,还有Bandera,ESC/JavaJLint.你可以在这里找到它们的比较(PDF).这是相关的摘录:

Bug Category - Example                            | ESC | FindBugs | JLint | PMD
--------------------------------------------------+-----+----------+-------+-----
General - Null dereference                        |  V  |    V     |   V   |  V
Concurrency - Possible deadlock                   |  V  |    V     |   V   |  V
Exceptions - Possible unexpexted exception        |  V  |          |       |
Array - Length may be less than zero              |  V  |          |   V   |   
Mathematics - Division by zero                    |  V  |          |   V   |  
Conditional, loop - Unreachable code              |     |    V     |       |  V 
String - Checking equality using == or !=         |     |    V     |   V   |  V
Object overriding - Equal objects/equal hashcodes |     |    V     |   V   |  V
I/O stream - Stream not closed on all paths       |     |    V     |       |  
Unused or duplicate statement - Unused local      |     |    V     |       |  V
Design - Should be a static inner class           |     |    V     |       |  
Unnecessary statement - Unnecessary return        |     |          |       |  V

注意:该文章来自2004年.这些工具可能同时得到了改进.

如您所见,FindBugs和PMD发现了很多,也是最流行的静态分析器工具.但是,现在智能IDE还包括一些要点,例如null deference,未使用的本地和无法访问的代码.例如,Eclipse可以警告它们.