防御编程的核心思想是: 子程序应该不因传入的错误数据而被破坏,哪怕由其他子程序产生的错误数据。更确切的说,必须承认程序会有问题,都需要被修改。
防御编程的最佳方式: 一开始不要再代码中引入错误,使用迭代式设计、编码前先写伪代码、写代码前先写测试用例、底层设计检查等。
一、保护程序免遭非法数据破坏
1、检查所有来源于外部的数据的值。
2、检查子程序的所有输入参数的值。
3、决定 如何处理错误的输入数据。
二 、断言的使用
1、断言主要用于开发和维护阶段。通常,断言只是在开发阶段被编译到目标程序中,而在生成产品编码时并不会编译进去。
2、用错误处理码来处理预期会发生的情况,用断言处理绝不应该发生的情况。断言可以作为可执行程序的注释
3、不要将执行代码放入断言中,当关闭断言功能时,执行功能可能失效。
4、变量数值都来源于系统外部,应该用错误处理代码来检查和处理非法数值,而不是用断言。而变量是源于可信系统的内部,而且程序执行的结果不会超出合法的假定范围值,则断言更加合适。
三、隔离程序
以防御编程为目的而进行隔离的一种方法,是把某些接口选定为安全的区域边界,对穿越安全区域边界的数据进行合法性校验。
可以让某些类处理“不干净”的数据,而让另一部分处理“干净”的数据,即可让程序中的大部分代码无需担负检查错误数据的职责。
在输入数据时将其转化为恰当的类型,输入的数据通常是字符串或者数字的形式,
这些数据可以被映射为 布尔类型的 true/fasle
有些被映射为枚举类型
这样可以减少 程序处理数据的复杂度和崩溃的可能性。