> 文章列表 > 防御式编程

防御式编程

防御式编程

防御式编程是提高软件质量技术的有益辅助手段。就是一开始不要在代码里引入错误。使用迭代式设计、编码前写伪代码,写测试用例,助于防止引入错误。
断言
断言是用来检查永远不应该发生的非正常情况,处理这些错误的代码
错误处理技术:

  • 返回中立值
  • 换用下一个正确数据
  • 返回上一次数据
  • 返回最近接的合法值
  • 警告信息写到日志中
  • 返回错误码
  • 调用错误处理的子程序或对象
  • 当错误发生时显示出错消息
  • 用嘴妥当的方式是在局部处理错误
  • 关闭程序

健壮性与正确性
正确性意味着永远不返回不正确的结果,哪怕不返回结果也不返回不正确的结果好
健壮性意味着不断尝试采取某些措施,以保证软件可以持续的运转,哪怕有时候做出一些不够准确的结果。

异常

  • 用异常通知程序的其他部分,发生了不可忽略的错误
  • 只在真正例外的情况下才抛出异常
  • 不能用异常来推卸责任,可以在局部处理的异常就处理下
  • 避免在构造函数中抛出异常,除非你在同一个地方把异常都捕获
  • 要在恰当的抽象层次抛出异常
  • 在异常消息中加入关于导致异常发生的全部信息
  • 避免使用空的catch语句
  • 要了解所引用的函数库可能抛出的异常,不然捕获不到就可能发生异常了
  • 考虑创建一个集中地异常报告机制
  • 在项目中异常的使用标准化

隔栏

隔栏是一种容损策略。做一个负责校验清理异常数据的类,作为防火墙,不影响内部类。

辅助调试的代码

防御式变成的另一重要方面是使用调试助手

  • 不要自动的把正式环境版的限制强加到开发版本上
  • 尽早的做一些辅助调试代码
  • 采取进攻式编程
    例如删除一个对象时填充满垃圾数据

确定好保留多少防御式代码

所有的点都做防御式编程,会是代码臃肿,运行缓慢,所以要确定好保留那些

  • 保留检查比较重要的错误代码
  • 去掉检查细微错误的代码
  • 去掉会导致程序直接崩溃的代码
  • 保留可以让程序稳妥崩溃的代码
  • 确认留在代码中的消息提示时友好的

不要过度防御式编程。因地制宜的调整你进行防御式编程的优先级。