防御式编程
防御式编程的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据。更一般地说,其核心思想是要承认程序都会有问题,都需要修改,聪明的程序员应该根据这一点来编程序。
我们心里应该自始至终考虑各种各样的错误处理机制:在局部处理错误、使用错误码来传递错误、在日志文件中记录调试信息、关闭系统或其他一些方式等。仅仅因为编程语言提供了异常处理机制而使用异常,是典型的“为用而用”;这也是典型的“在一种语言上编程”而非“深入一种语言去编程”的例子。
过度的防御式编程也会引起问题。如果你在每一个能想到的地方用每一种能想到的方法检查从参数输入的数据,那么你的程序将会变得臃肿而缓慢。更糟糕的是,防御式编程引入的额外代码增加了软件的复杂度。防御式编程引入的代码也并非没有缺陷,和其他代码一样,你同样轻而易举地在防御式编程添加的代码中找到错误------尤其是当你随手编写这些代码时更是如此。因此,要考虑好什么地方你需要进行防御,然后因地制宜地调整你进行防御式编程的优先级。
术语:健壮性与正确性(Robustness vs. Correctness)
正确性意味着永不返回不准确的结果,哪怕不返回结果也比返回不准确的结果好。
健壮性意味着要不断尝试采取措施,以保证软件可以持续地运转下去,哪怕有时做出一些不够准确的结果。
举例:
人身安全攸关的软件往往更倾向于正确性而非健壮性。不返回结果也比返回错误的结果要好。放射线治疗仪就是体现这一原则的好例子。
消费类应用软件往往更注重健壮性而非正确性。通常只要返回一些结果就比软件停止运行要强。