4

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

我发现了一个相关的问题:

Java的静态分析工具推荐? Java的静态分析工具推荐?

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

编辑:到目前为止,纪尧姆建议的 PMD 的 XPath 表达式似乎最接近我正在寻找的内容。我将很快探索它。

4

3 回答 3

5

为 PMD 编写自定义规则实际上非常容易。PMD 提供了一种类似于 xPath 的语法来查找代码中感兴趣的区域,因此,如果您对 XML 有一些基本的经验,您将能够立即开始。我建议您在 PMD 或 Findbugs 上投入 1-2 小时,如果您有具体问题,请回到这里。

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

于 2009-06-24T06:48:21.570 回答
4

“扩展”静态分析工具的真正问题是“静态分析”是一个如此广泛的主题,以至于您通常需要大量机器来完成它:解析、树构建、控制流图提取、数据流提取、点-分析、过程间分析、范围分析,不胜枚举,请参阅关于分析程序的大量编译器文献。

您可能会使用表面语法的模式匹配将工具的注意力集中在某些程序代码上,但您仍然必须向工具解释您希望它在该点“静态分析”什么(以及一些分析 [例如 points- to] 要求您首先在任何地方进行分析,然后选择您想要的部分)。

道德:不要期望扩展工具来进行任意分析很容易。您基本上应该提前确定您关心的分析类型(受污染的输入?下标范围检查?API 滥用?)并找到一个已经支持这种事情的工具。至少那时您的“扩展”有可能因为与该工具已经完成的功能相似而变得简单。

我们的 DMS Software Reengineering Toolkit 试图在许多应用程序和语言中分摊构建各种分析机器的成本。它为 C、C++、Java 和 COBOL 提供了不同程度的解析、控制/数据流分析和指向分析。它具有表面语法模式匹配来帮助您“指出”。请参阅http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html

于 2009-07-03T09:24:20.283 回答
1

编写Findbugs自定义检测器非常简单

您只需将其放入 FindBugs 安装的插件目录中,就像在此处解释一样。

于 2009-06-24T06:09:05.347 回答