防御式编程是提高软件质量技术的有益辅助手段。防御式编程的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据。这种思想是将可能出现的错误造成的影响控制在有限的范围内。
主要内容如下:
1.保护程序免遭非法输入数据的破坏
1.检查所有来源于外部的数据的值
2.检查子程序所有输入参数的值
3.决定如何处理错误的输入数据
使用迭代设计、编码前先写伪代码、写代码前先写测试用例、低层设计检查等等
2.断言
建立自己的断言机制
使用断言的指导建议
1.用错误处理代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况
2.避免把需要执行的代码放到断言中
3.用断言来注释并验证前条件和后条件
4.对于高健壮性的代码,应该先使用断言再处理错误
3.错误处理技术
1.返回中立值
2.换用下一个正确的数据
3.返回与前次相同的数据
4.换用最接近的合法值
5.把警告信息记录到日志文件中
6.返回一个错误码
7.调用错误处理子程序或对象(错误处理职责集中到一点)
8.当错误发生时显示出错信息(处理开销少,但散步信息)
9.用最妥当的方式在局部处理错误(灵活度,高风险:正确性,可靠性,散步信息)
10.关闭程序(医疗)
4.异常
1.用异常同志程序的其他部分,发生了不可忽略的错误(提供无法被忽略的错误通知机制)
2.只在真正例外的情况下才抛出异常(处理罕见或者不该发生的情况)
3.不能用异常来推卸责任(能在局部处理则在局部处理)
4.避免在构造函数和析构函数中抛出异常,除非你在同一地方把他们捕获
5.在恰当的抽象层次抛出异常
6.在异常消息中加入关于导致异常发生的全部信息
7.避免使用空的catch语句
8.了解所有函数库可能抛出的异常
9考虑创建一个集中的异常报告机制(处理一致性:异常种类,如何处理)
10.考虑异常的替换方案
*5.隔离程序,使之包容由错误造成的损害
在输入数据时将其转换为恰当的类型
6.辅助调试的代码
尽早引入辅助调试的代码(越早愈好)
采用进攻式编程
计划移除调试辅助的代码
7.确定在产品代码中该保留多少防御使代码
1.保留检查错误的代码
2.去掉检查细微错误的代码
3.去掉可以导致程序硬性崩溃的代码
4.保留可以让程序稳妥的崩溃的代码
5.为你的技术支持人员记录错误消息信息
6.确认留在代码中的错误消息是友好的
8.对防御式编程采取防御的姿态
现在公司有代码大全2这本书,不忙时阅读一下,之前就有前辈强烈推荐这本书,最近有点小体会。
项目刚上线,还在不断的完善过程中,有些问题是很简单,但没有做,就可能会造成严重的问题,比如:
添加会员的时候,对手机号没有去除前后空格或其他的字符串信息,就直接保存到数据库,这样查询的时候输入不带空格的正确信息也不会查询到相关信息。。。因为是以接口的方式提供,要求调用方必须去除空格,但别人怎么调用自己是不知道的,这就想到防御式编程的思想了。 之后这段时间里,对项目不断的完善,慢慢总结吧。 像字符串信息,必须验证非空、取空格等吧。。