快速业务通道

使用 IBM 静态工具优化 Java 代码,第 1 部分: 工具入门 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

使用 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;   }

使用 IBM 静态工具优化 Java 代码,第 1 部分: 工具入门(2)

时间:2011-05-07 IBM 丁钦浩

很多静态分析工具遇到清单 1 的代码会报除数为 0 的错误,而事实上如果清单 1 所在 的整个代码工程中,进入 Average 的参数 N 永远都不可能为 0 的话,这个错误就不能算 是真正的错误。而 BEAM 只有在发现了确凿的证据证明除数 N 可能为 0 时才会报错。例如 清单 2 和清单 3,都会报除数为 0 的错误。

清单 2. 报错代码示例 1

int Average(int Sum, int N)   {     if ( N == 0 ) // 这里证明 N 有可能等于 0     X = 1;     return Sum / N;   }

清单 3. 报错代码示例 2

int Average(int Sum, int N)   {     if ( N != 0 ) // 这里证明 N 有可能允许等于 0     X = 1;     return Sum / N;   }

再次,这个工具使用了符号执行(symbolic execution)技术指出导致错误发生的条件 ,并在输出结果中打印出整个出错路径供程序员

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号