代码大全2 防御式编程

 

防御式编程该怎么认识呢,在其他程序员犯下错误时保护你自己,一个子程序不因传入错误数据而被破坏,也就是说程序都会出现问题,需要时时修改。

  断言对于一些大型程序来说,是很有用的,这样能够更快排查出程序哪里出现的错误,断言可以在程序中说明各种假定,澄清各种不希望出现的情形,当然,断言是在程序开发、维护阶段去写的,没有必要让客户也看到这些。

下面给出一些使用断言的一些基本的建议:

  1.用错误处理代码来处理预期会发生的情况,用断言来处理绝不可能发生的状况,用断言来检查代码中的bug。

  2.将需要执行的代码放在断言之外,这样执行代码的时候就不用考虑这些代码会不会不被执行,这是需要自己多注意的一点。

  3.用断言去注解并验证前条件和后条件。

  4.对于一些可能会出错的条件,要么使用断言来处理错误,要么使用错误处理代码。两者只能选择其一。

错误处理技术:

  返回中立值

  换用下一个正确的数据

  返回与前次相同的数据

  将警告信息记录到日志中

  返回一个错误码

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

  错误发生时显示出错信息

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

  要不你就直接关闭程序

健壮性与正确性:正确性就是永远不返回不准确的值;健壮性就是不断采取措施,保证软件能够持续运行下去,软件倾向于健壮性。

防御式编程的重点就是在于防御一些自己未曾预料的错误

异常是把代码中的错误或者异常传递给调用方的特殊手段:

1.用异常通知程序的其他部分,发送了不可忽略的错误,异常有一种无法被忽略的通知机制

2.只有真正例外的情况下才抛出异常,和断言类似,处理不可能发生的情况

3.不能用异常来推卸责任,能够在局部处理的,就不要抛出来

4.避免在构造和析构函数中抛出异常

5.在恰当的抽象层次抛出异常,把抛出的异常认为是接口的一部分,要符合接口的抽象,抛出的异常不能破坏封装,不能破坏抽象

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

7.避免是空的catch语句

8.了解所有的函数库抛出的异常

9.建议考虑一个集中的异常报告机制

10.在项目中对异常的使用标准化

11.考虑异常的替代方案

隔离程序,让程序包容由错误造成的损害

  设定安全边界,对穿越边界的数据进行检查,为接口设定安全边界

  分开管理,让大部分代码无需承担检查数据的责任

  用类的层次,假如类的私有方法数据是安全的,类的公有方法数据则是不安全的

  采用正确输入的类型,将输入数据转化为适当的类型,断言检查程序的错误,并不是数据错误。

  隔栏的使用体现了架构层次上如何处理错误,隔栏内部使用断言,隔栏使用的是错误处理错误

 

用辅助代码来辅助调试程序,尽早引入辅助调试的代码,包括对通道的检查,通道状况的检查,资源使用情况等等;采用进攻式编程:在开发时让他显现出来,在运行时,让他能够自我恢复,之后计划移除辅助调试代码

怎么确定在代码中保存多少防御式代码

1.保留检查重要错误的代码

2.去除检查细微错误的代码和可以导致程序硬性崩溃的代码,保留可以稳妥的崩溃的代码

3.为技术支持人员记录错误的信息,并确保代码中的错误信息是友好的

 

posted @ 2022-01-05 18:48  kuaiquxie  阅读(180)  评论(0编辑  收藏  举报