首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java静态分析:入门

Java静态分析:入门
EN

Stack Overflow用户
提问于 2012-02-20 06:19:05
回答 4查看 1.1K关注 0票数 1

嗨,我想开始尝试java源代码的静态分析。首先,直接解析我的源码树似乎是最简单的,但是假设有API可以做到这一点。特别是,如果有一个允许这样的代码的API就更好了:

代码语言:javascript
运行
复制
for (MetaClass m : mySourcePackage.getClasses()) 
{
       System.out.println(m.getMethods().size());
       ...
}

当然,对于任何给定的类,你都可以使用反射来做到这一点-但我更感兴趣的是从零开始静态分析整个源代码包-并逐个迭代类(例如,评估测试覆盖率、最大行数等)。

有没有高质量的开源框架来进行这样的元分析(或者,也许可以用特定的类路径启动JVM并在JVM中进行这样的分析)?

请记住,我并不特别担心DI和反射之类的陷阱(至少在这一点上没有)。

EN

回答 4

Stack Overflow用户

发布于 2012-02-20 06:32:07

可以将Findbugs视为静态分析框架。您可以实现具有特定目标的新检测器。"How To" tutorial

此外,以下是一些涵盖您提到的目标的库:

覆盖静态分析( Findbugs)

  • Code

  • (Cobertura)

  • Metrics,PMDSonarSonar

More tools/libraries

票数 3
EN

Stack Overflow用户

发布于 2015-01-15 09:11:09

error positive是另一个值得关注的好工具,它被google使用,并且具有非常低的误报率,

https://github.com/google/error-prone

代码的结构非常好,

例如,您可以查看here是如何实现数组相等检查的

票数 2
EN

Stack Overflow用户

发布于 2012-03-08 23:33:33

Javalib / Sawja是一个用Caml编写静态分析器的库。

它提供了静态分析所需的许多构建块,包括以下原语:

  • 解析Java bytecode
  • create并操纵中间representations
  • manipulate单个指令、方法、类以及整个programs
  • handle类层次结构和控制流算法

文档非常好,如果我没记错的话,这个发行版包含了几个示例来帮助您入门。

考虑到这一切,实现您所描述的那种源代码度量应该是快速而简单的。例如,下面是一个简短的、未经测试的代码片段,旨在计算给定类中的方法数量:

代码语言:javascript
运行
复制
open Sawja_pack
open Javalib_pack

let size methodmap =
  JBasics.MethodMap.fold (fun _ _ count -> count+1) methodmap 0

let main classname classpath =
  let interface_or_class  = Javalib.get_class classpath (JBasics.make_cn classname) in
  let all_concrete_methods= Javalib.get_concrete_methods interface_or_class in
  print_int (size all_concrete_methods);
  exit 0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9353829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档