【问题标题】:Which static analysis tool for Java is easiest to extend? [closed]哪种 Java 静态分析工具最容易扩展? [关闭]
【发布时间】:2010-11-05 09:56:47
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java static-analysis extensibility aspectj


    【解决方案1】:

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

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

    【讨论】:

    • 好的,我已经看到了编写 PMD 规则的 AST 访问者风格。 XPath 样式看起来更好,因为它具有声明性。肯定会看看的。谢谢
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 谢谢。 DMS Toolkit 看起来很有趣。
    【解决方案3】:

    编写Findbugs 自定义检测器是quite simple。

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

    【讨论】:

    • 谢谢。当我第一次看到那里时,字节码扫描的使用似乎太低级了。如果没有任何东西可以与 AspectJ 语法相媲美,我会再研究一下。
    • 我在这里写下了我添加检测器的经验:dschneller.blogspot.com/2007/04/…
    猜你喜欢
    • 1970-01-01
    • 2010-09-10
    • 2023-03-14
    • 2010-09-13
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多