3

我在 Eclipse IDE 中使用 Spotbugs 插件。我可以在整个项目上运行 Spotbug,这给我的印象是该工具需要构建项目才能呈现其分析报告。

但是文档说它是一个静态分析工具。

所以,我很好奇它是否需要构建项目,那么我们可以称之为静态分析工具吗?如果不需要构建项目,我们可以在单个 .java 文件上运行 Spotbugs 吗?

4

2 回答 2

5

静态分析的含义是它“静态”分析您的项目文件,而不是监视正在运行的应用程序。https://en.wikipedia.org/wiki/Static_program_analysis

与分析源代码相比,分析字节码既有优点也有缺点。它更快,更适合对程序流进行深入分析,但不会发现被编译掉的错误,例如不必要的导入和不一致但合法的空白。

即使您编译了该文件,也无法在单个文件上正确运行它,因为有些检测器会考虑多个文件,例如检测您何时尝试传递null参数被注释为非空的方法,或者当您将一个方法定义为 public 并且从未从类外部调用它时。

于 2018-10-15T06:43:39.363 回答
1

是的,由于 SpotBugs 分析字节码(.class 文件),因此您必须首先构建项目(至少是您要分析的部分)。

之后,您可以只分析单个文件,例如在 IntelliJ IDEA 中(仍然是 FindBugs 插件,但 SpotBugs 可以完成 FindBugs 可以做的所有事情,相同的代码库):

IDEA分析单个文件

于 2018-09-28T08:50:08.230 回答