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

4
哪些Java静态分析工具具有最容易的扩展机制。我查看了PMD,但编写自定义规则的过程似乎非常复杂。具体而言,我想知道是否有任何工具提供类似于AspectJ语法以选择代码中的有趣区域?我知道AspectJ的declare warning,但它似乎在所能做的方面有限。
我找到了一个相关的问题:
Java的静态分析工具推荐?Java的静态分析工具推荐? 答案列出了许多工具。但我想找到哪个工具提供编写自定义规则的最简单选项。 编辑:到目前为止,Guillaume建议的PMD的XPath表达式似乎最接近我要寻找的内容。我将很快探索它。
3个回答

5

编写自定义规则对于PMD来说实际上非常容易。PMD提供了类似xPath的语法,可以找到代码中感兴趣的区域,因此如果您具有一些XML的基本经验,您将能够很快入门。我建议您花1-2小时时间学习PMD或Findbugs,如果您有具体问题,请随时回来咨询。

如果您告诉我们您要编写什么样的规则,我们可能会给您更好的答案...


好的,我已经看到了使用AST Visitor风格编写PMD规则的方式。XPath风格看起来更好,因为它具有声明性质。我一定会去看看的。谢谢。 - Tahir Akhtar

4
"扩展"静态分析工具的真正问题在于,"静态分析"是一个非常广泛的主题,你需要很多机器来进行通用的处理:解析、树构建、控制流图提取、数据流提取、指针分析、过程间分析、范围分析等等,参见大量有关程序分析的编译器文献。您可能会使用表面语法的模式匹配来让工具关注某些程序代码,但是您仍然需要向工具解释想要在哪个位置进行"静态分析"(而一些分析[例如指针分析]要求您首先在所有地方进行分析,然后只需挑选出所需部分)。 结论:不要期望扩展工具以进行任意分析变得容易。您应该预先决定您关心哪些类型的分析(污点输入?下标范围检查?API滥用?)并找到已支持该种分析的工具。至少这样,您的"扩展"就有可能因为与工具已有功能类似而变得简单。
我们的DMS软件重构工具包是一种尝试,旨在将构建各种分析机器的成本分摊到许多应用程序和语言中。它为C、C++、Java和COBOL提供了解析、控制/数据流分析和指针分析等不同程度的支持,并提供表面语法模式匹配来帮助您"指向"。详情请参见http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html

1
谢谢。DMS工具包看起来非常有趣。 - Tahir Akhtar

1
编写Findbugs自定义检测器非常简单 您只需将其放入FindBugs安装的插件目录中,如此处所述

谢谢。当我第一次看的时候,字节码扫描似乎太低级了。如果没有类似于AspectJ语法的东西,我会再仔细研究它的。 - Tahir Akhtar
1
我在这里记录了我添加探测器的经验:http://dschneller.blogspot.com/2007/04/findbugs-writing-custom-detectors-part.html - Daniel Schneller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接