代码改变世界

第八章防御式编程(代码大全读后)

2016-11-22 09:19  卡斯撸代码  阅读(244)  评论(0编辑  收藏  举报

目录

8.1保护程序免遭非法输入数据的破坏

8.2断言

8.3错误处理技术

8.4异常

8.5隔离程序,使之包容由错误造成的损害

8.6辅助调试的代码

8.7确定在产品代码中该保留多少防御式代码

8.8对防御式编程采取防御的姿态

 

一、保护程序免遭非法输入数据的破坏

  1、检查所有来源于外部的数据的值

       企图缓冲区溢出、注入sql 注入的html或者XML代码、整数溢出以及传递给系统调用的数据

  2、检查子程序所有输入参数的值

     来自于其他子程序

 3、决定如何处理错误的输入数据

    

二、断言

   1、建立自己的断言机制

    C++实现自己的断言:

   2、使用断言的指导建议

    用错误处理代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况

  3、 避免把需要执行的代码放到断言中

   4、用断言来注解并验证前条件和后条件

  5、对于高健壮性的代码,应该先使用断言再处理错误

 有时要断言和错误一起使用如word里面开发就是如此

三、错误处理技术

 1、返回中立值

  2、换用下一个正确的数据

  3、返回与前次相同的数据

  4、换用最接近的合法值

  5、把警告信息记录到日志文件中

  6、返回一个错误码

  7、调用错误处理子程序或对象

  8、当错误发生时显示出错消息

  9、用最妥当的方式在局部处理错误

  10、关闭程序

   健壮性与正确性

   高层次设计对错误处理方式的影响

四、异常

   1、用异常通知程序的其他部分,发生了不可忽略的错误

   2、只在真正例外的情况下才抛出异常

   3、不能用异常来推卸责任

   4、避免在构造函数和析构函数中抛出异常,除非你在同一地方把它们捕获

   5、在恰当的抽象层次抛出异常

   6、在异常消息中加入关于导致异常发生的全部信息

   7、避免使用空catch语句;如果非得使用请写注释为什么可行

   8、了解函数库可能抛出的异常

   9、考虑创建一个集中的异常报告机制

  10、把项目中对异常的使用标准化

  11、考虑异常的替换方案

 

五、隔离程序使之包容由错误造成的损害

    在输入数据时将其转换为恰当的类型

六、辅助调试的代码

   1、 不要自动地把产品版的限制强加于开发版之上、

   2、尽早引入辅助调试的代码

   3、采用进攻式编程

   4、计划移除调试辅助的代码:使用类似ant和make这样的版本控制工具和make工具、使用内置的预处理器

七、确定在产品代码中该保留多少防御式代码

   1、保留那些检查重要错误的代码

   2、去掉检查细微错误的代码

   3、去掉可以导致程序硬性崩溃的代码

   4、保留可以让程序稳妥地崩溃代码

   5、为你的技术支持人员记录错误信息

   6、确认留在代码中的错误消息是友好的

八、对防御式编程采取防御的姿态