嗨,我想开始尝试java源代码的静态分析。首先,直接解析我的源码树似乎是最简单的,但是假设有API可以做到这一点。特别是,如果有一个允许这样的代码的API就更好了:
for (MetaClass m : mySourcePackage.getClasses())
{
System.out.println(m.getMethods().size());
...
}
当然,对于任何给定的类,你都可以使用反射来做到这一点-但我更感兴趣的是从零开始静态分析整个源代码包-并逐个迭代类(例如,评估测试覆盖率、最大行数等)。
有没有高质量的开源框架来进行这样的元分析(或者,也许可以用特定的类路径启动JVM并在JVM中进行这样的分析)?
请记住,我并不特别担心DI和反射之类的陷阱(至少在这一点上没有)。
发布于 2012-02-20 06:32:07
可以将Findbugs视为静态分析框架。您可以实现具有特定目标的新检测器。"How To" tutorial
此外,以下是一些涵盖您提到的目标的库:
覆盖静态分析( Findbugs)
More tools/libraries
发布于 2015-01-15 09:11:09
error positive是另一个值得关注的好工具,它被google使用,并且具有非常低的误报率,
https://github.com/google/error-prone
代码的结构非常好,
例如,您可以查看here是如何实现数组相等检查的
发布于 2012-03-08 23:33:33
Javalib / Sawja是一个用Caml编写静态分析器的库。
它提供了静态分析所需的许多构建块,包括以下原语:
文档非常好,如果我没记错的话,这个发行版包含了几个示例来帮助您入门。
考虑到这一切,实现您所描述的那种源代码度量应该是快速而简单的。例如,下面是一个简短的、未经测试的代码片段,旨在计算给定类中的方法数量:
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
https://stackoverflow.com/questions/9353829
复制相似问题