使用 IBM 静态工具优化 Java 代码,第 1 部分: 工具入门
2010-01-11 00:00:00 来源:WEB开发网首先,它模仿 javac 的使用,语法和 javac 相似,支持许多 javac 的常用命令参数,而且具有相同的语义,比如 -classpath,-source,-d 等等;不仅如此,它还模仿 javac 接受相同的源文件,只不过不是编译,而是分析检查这些源文件。这样习惯于 javac 的开发人员就可以很轻松的学会使用。
其次,许多静态分析工具报错的准确性较低,很多被这些工具标记为错误的代码事实上是正确的,这样会增加程序员工作量,并有可能掩盖真正的错误。而 BEAM 使用了额外的定理证明(theorem proving)技术来判断一个潜在的错误是否是真正的错误,从而减轻了程序员判断错误真伪所需的工作量。例如:
清单 1. 代码示例 int Average(int Sum, int N)
{
return Sum / N;
}
很多静态分析工具遇到清单 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;
}
更多精彩
赞助商链接