断言
将语义错误转变为语法错误。
例如cpp的assert,便于开发者完成错误的定位。
- 断言主要用于开发和维护阶段,生产时不编译进产品。
- 断言用来检查永远不应该发生的错误。
- 错误处理用来检查程序的非正常情况。(能在开发阶段预料到)
- 避免把执行代码(有意义的代码)放入断言中。
前条件和后条件
- 前条件:调用方提供给被调用函数的参数。(保护传入方法的参数)
- 后条件:与前条件相反。承诺给调用方。
通常要么断言,要么错误处理,有时也同时使用。
错误处理技术
处理我们预料得到的错误。
集中处理:比较简单。
正确性、健壮性。消费类软件更注重健壮性。
异常
把代码中的错误或异常事件传递给调用方的一种方法。
- 不可忽略的错误
- 真正例外的情况
- 适当的一致的抽象
- 避免ignore的catch
- 集中的异常报告(logger)
隔离
程序的外部和内部被明显隔离。
- 对外部传递的数据采用错误处理。因为外部数据不安全。
- 内部数据采用断言。
进攻性编程
- 确保断言终止程序
- 确保问题被找出
- 可以定制自己的预处理器
- 存根:代替有效程序的简单程序(可快速移除)
防御性编程
开发阶段尽可能暴露错误
发布阶段尽可能减少错误
- 保留检查重要错误的代码
- 去掉检查细微错误的代码
- 适当的地方使用防御性编程