子程序不应该因传入错误的数据而被破坏,哪怕是由其它子程序产生的错误数据。
1、检查所有来源于外部的数据
2、检查子程序所有输入参数的值
3、决定如何处理错误的输入数据

使用断言
1、用错误处理代码来处理预期会发生的错误,使用断言来处理绝不会发生的状况
2、避免把需要执行的代码放在断言中
3、用断言来注释并验证前条件和后条作
4、应该先使用断言再处理错误

错误处理技术
1、返回中立值
2、换用下一个正确的数据
3、返回与前次相同的数据
4、换用最接近的合法值
5、记日志
6、返回一个错误码
7、调用错误处理子程序或对象
8、显示出错消息
9、在局部处理数据
10、关闭程序

错误处理方式有时更侧重于正确性,有时则更侧重于健壮性

应该在恰当的抽象层次抛出异常,确保异常的抽象层次与子程序接口的抽象层次一致,不应把更低层的异常传递给其调用方,暴露了一些实现细节。

Defensive programming -- Code complete reading notes(8)相关推荐

  1. Metaphors for a richer understanding of software development -- Code complete reading notes(2)

    隐喻是什么? 人们常常利用隐喻来利用了解的事物理解不了解的事物,如,我们在用鸡蛋来理解地球的结构,认为它由地壳(蛋壳),地幔(蛋白),地心(蛋黄)组成. 在软件开发中,隐喻是一种启发,而不是一种算法. ...

  2. The software-quanlity landscape -- Code complete reading notes

    软件同时拥有外在和内在的质量特性,外在质量指用户所能感受到的部分. 外在质量:正确性.可用性(使用容易).效率.可靠性.完整性(限制权限.访问正确性).适应性.精确性.健壮性 内在质量:可维护性.灵活 ...

  3. Code Style Guidelines for Contributors Reading Notes

    Reading Notes: 1.You must handle every Exception in your code in some principled way. (if you are co ...

  4. Defensive Programming 防御式编程(Defensive Programming)

    Defensive Programming 防御式编程(Defensive Programming)是提高软件质量技术的有益辅助手段 怎么理解呢?防御式编程思想的理解可以参考防御式驾驶: 在防御式驾驶 ...

  5. 代码大全(Code Complete)-- 目录和关键点

    读后感 <代码大全>是一本指导"代码构建"的书,指导我们如何写出优秀的代码,如何成为优秀的程序员. 这样一本900多页的大部头书,当我们基于既往的编程经验,在读每一个部 ...

  6. Defensive Programming in PHP(PHP中的防御性编程)

    觉得这篇文章写得很不错 不关乎php觉得其他的语言也是针对的,看完这篇文章有所收获 What Does "Defensive Programming" Mean? Defensiv ...

  7. Why Erlang suggest avoiding defensive programming( Joe Armstrong )

    "defensive programming" (Was: Re: How nice should I be on exit?) Joe Armstrong <>  W ...

  8. RRAM/ Near Memory Computing (NMC) Survey - Reading Notes 0707

    Reading Notes of Resistive Random Access Memory – Day 2 Chapter 3 RRAM Characterization and Modeling ...

  9. 终于读完Code complete 2nd edtion

    从五一节前开始,我读完了三本书 <企业级应用开发--使用VS.NET.UML和MSF> <Ajax in action> <Code Complete 2nd editi ...

最新文章

  1. Asp.Net构架(Http请求处理流程) - Part.1
  2. wamp安装多版本php,WampServer下安装多个版本的PHP、mysql、apache图文教程
  3. 计算机三级交换机允许中继配置,计算机三级交换机配置命令总结
  4. 如何在Office 2007中查看关于对话框和版本信息
  5. ASP.NET AJAX 控件开发基础
  6. 精简指令和复杂指令计算机,CPU精简指令集和复杂指令集的区别
  7. 可合并堆1:二项堆(Binominal Heap)
  8. Ubuntu c++调用python脚本(Anaconda)
  9. aardio - 【库】内存画板 paint
  10. php date转换为时间戳,php date如何转换时间戳
  11. 手机抢答器正在替代传统抢答器
  12. ios mdm更新应用_ios设备mdm的实现过程
  13. hashcat的使用方法
  14. 笔记本W10找不到端口(com口)及单片机串口连接的问题(附51开发板的CH340串口芯片的驱动程序安装包)
  15. 办公软件测试题目,Office高级办公软件测试(附答案)
  16. Matplotlib 常用可视化操作
  17. 大学生实习就业调研报告之二 - 共性问题与企业技术管理者探讨
  18. Java的生成随机数
  19. 英语四六级作文和翻译
  20. 消息质量平台系列文章|全链路排查篇

热门文章

  1. 论“前置测试模型”-1 概念篇
  2. Method Swizzling 处理一类简单的崩溃
  3. Cobbler无人值守安装系统史上最细实践文档
  4. oracle 11g-R2安装
  5. android 定时打电话教程
  6. Web页面减肥,慎用VS的自动格式化功能!
  7. Couldn‘t find grammar element for class javax.ws.rs.core.Response
  8. Cant get connection to Zookeeper
  9. Django报错NameError: name 'ListView' is not defined
  10. tensorflow中的log中数字的含义