避免Bugs
- 使用静态和动态检测以及不可改变性
- 开启断言减少程序bug
- 迭代式开发,(单元测试和回归测试)
- 模块化和封装化
什么时候开启断言
- 方法的参数
/**
* @param x requires x >= 0
* @return approximation to square root of x
*/
public double sqrt(double x) {
assert (x >= 0)):"x is" + x;
}
- 方法的返回值
public double sqrt(double x) {
assert x >= 0;
double r;
... // compute result r
assert Math.abs(r*r - x) < .0001;
return r;
}
- 覆盖所有的可能
如果if和switch没有覆盖所有的可能,可以使用断言来阻塞不合法的可能
switch (vowel) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u': return "A";
default: assert false;
}
关闭断言的情况
- 不要使用断言来测试外部的变量(如外部文件是否存在、网络是否可用、用户的输入是否正确)
- 测试时需要开启断言,给用户的时候关闭。
模块化和封装化
- 变量的范围应该最小化
- 声明循环的变量应该在循环内声明
- 在变量要使用的地方声明
- 避免全局变量