Welcome 微信登录

首页 / 软件开发 / JAVA / 使用 IBM 静态工具优化 Java 代码,第 1 部分: 工具入门

使用 IBM 静态工具优化 Java 代码,第 1 部分: 工具入门2011-05-07 IBM 丁钦浩什么是 BEAM?

关于缩写 BEAM 的声明

处于表达简洁的目的,本文采用了工具名称的缩写 — BEAM,这只是工具全称 “Checking Tool for Bugs Errors and Mistakes”的文字缩写,而不是工具的名称。

IBM Checking Tool for Bugs Errors and Mistakes(本文后面将采用其文字缩写 BEAM )是 IBM 开发的一个静态分析工具,可以用于分析并查找出 C, C++ 和 Java 代码中的一 些不容易发现的潜在错误,从而达到提高代码质量的目的。同动态分析工具和其它静态分析 工具相比,它拥有一些可贵的特性。

同动态分析工具的比较

首先,BEAM 可以直接对代码进行分析,不需要运行代码,也不需要对代码编译链接,所 以相对容易。比如,运行它不需要为代码编写任何测试用例,而动态分析仅在单元测试时就 需要大量测试用例,而且这些测试用例只能测试单个代码片段,重用性很低,基本上每个类 都需要不同的测试用例,因此只有编写足够多的单元测试用例才能测试大型的软件产品,耗 时且代价高昂。

其次,这个工具可以查找出单元测试和专业代码审查所可能错过的代码缺陷和安全弱点 ,比如内存泄漏,非法的数据库访问和非法内存访问等等,据统计,BEAM 可以在平均每 1000 行已经经过测试的代码中找出一个错误。

再次,在开发早期就可以运行其对代码进行检查,从而在产品开发早期发现缺陷,有助 于降低开发成本。同时,它还有助于开发人员在产品开发早期发现自己编码风格的缺点,及 早做出改进,防止工程后期重复发生相同类型的错误。

同其它静态分析工具的比较

同其它静态分析工具一样,BEAM 也是对代码进行语法扫描,通过算法对代码进行检查分 析,并和一些 bug 模式进行比较,最终标明问题区域,输出分析结果。但是相对于其他静 态分析工具,它有一些独到的优点。

首先,它模仿 javac 的使用,语法和 javac 相似,支持许多 javac 的常用命令参数, 而且具有相同的语义,比如 -classpath,-source,-d 等等;不仅如此,它还模仿 javac 接受相同的源文件,只不过不是编译,而是分析检查这些源文件。这样习惯于 javac 的开 发人员就可以很轻松的学会使用。

其次,许多静态分析工具报错的准确性较低,很多被这些工具标记为错误的代码事实上 是正确的,这样会增加程序员工作量,并有可能掩盖真正的错误。而 BEAM 使用了额外的定 理证明(theorem proving)技术来判断一个潜在的错误是否是真正的错误,从而减轻了程 序员判断错误真伪所需的工作量。例如:

清单 1. 代码示例

int Average(int Sum, int N)
{
return Sum / N;
}