哪种Java静态分析工具最容易扩展?

时间:2009-06-24 05:50:41

标签: java static-analysis extensibility aspectj

Java的哪些静态分析工具具有最简单的扩展机制。我查了PMD 但是编写自定义规则的过程似乎非常复杂。 具体来说,我想知道是否有任何工具提供 AspectJ 类似语法来挑选有趣的代码区域?我知道AspectJ的declare warning,但它的功能似乎有限。

我找到了一个相关的问题:

Java的静态分析工具推荐? Static Analysis tool recommendation for Java?

答案列出了许多工具。但我想找到哪一个提供编写自定义规则的最简单方法。

编辑:到目前为止,Guillaume建议的PMD的XPath表达式似乎与我正在寻找的最接近。我很快就会探索它。

3 个答案:

答案 0 :(得分:5)

为PMD编写自定义规则实际上非常简单。 PMD提供类似xPath的语法来查找代码的有趣区域,因此如果您对XML有一些最小的经验,那么您将能够立即开始使用。我建议您在PMD或Findbugs投资1-2个小时,如果您有具体问题,请回到这里。

如果你准确地告诉我们你想要写什么样的规则,我们或许可以给你一个更好的答案......

答案 1 :(得分:4)

“扩展”静态分析工具的真正问题是“静态分析”是一个如此广泛的主题,您需要大量的机器来完成它:解析,树构建,控制流图提取,数据流提取,点到分析,过程间分析,范围分析,列表不断,看到大量关于分析程序的编译器文献。

您可以使用表面语法的模式匹配来将工具的注意力集中在某些程序代码上,但您仍然可以 向工具解释你希望它在那时“静态分析” (有些分析[例如指向]需要你到处进行分析 首先,然后选择你想要的部分。

道德:不要指望扩展工具来进行任意分析变得容易。 您基本上应该事先决定您关心的分析类型 (受污染的输入?下标范围检查?API滥用?)并找到一个工具 已经支持那种事了。至少你的“扩展”有 由于与工具的功能类似,因此很容易变得简单。

我们的DMS软件再造工具包试图分摊在许多应用程序和语言中构建各种分析机器的成本。 它提供解析,控制/数据流分析和点分析 不同程度的C,C ++,Java和COBOL。它有表面语法 模式匹配,以帮助您“指出”。 见http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html

答案 2 :(得分:1)

撰写Findbugs自定义检测器为quite simple

您只需将其放入FindBugs安装的插件目录中,例如解释here