最近在进行一个C/S模型程序集成测试时屡次出现程序崩溃而费时去寻找bug的问题。为此我和团队成员一起探讨了何谓”防御式编程“,为何要做”防御式编程“。

    何谓防御式编程,“防御式编程的中心思想是:子程序不因传入错误数据而被破坏,哪怕是有其他程序产生的错误数据。”引自《代码大全》p187——(防御式编程)。说说我们写程序常有的误区,比如我们会假定某处一定存在我们要加载的文件;比如我们会假定客户端一定会传入服务端我们想要的数据格式;比如我们会假定对方提供的插件一定是符合主程序的规格;......但是一切不会如我们预期的这样理想,往往对程序造成的结果就是出现一些不知所云的bug,甚至出现程序崩溃。

    所以我们要进行防御式编程,当我们在进行接口或者子程序的编写需要和其他接口和程序进行数据交流时,请不要相信“他们”,我们应该对他们给我们的数据首先进行数据规则的判断,如果不符合我们的规则,我们可以拒绝他们,或者可以转换为合法的数据来保护自身。引用社会上的一句话,“在这个缺乏诚信的社会,保护自己的最好方法就是别轻信他人或者做好自己”。

    理解了防御式编程的思想,下面我们就要开始建立防线。在这道防线里我们可以使用断言技术来处理绝不应该发生的状况,用错误处理代码来处理预期会发生的状况,用异常技术来解决自己无法处理的状况,用隔离程序来保护自己,增加各种辅助调试的代码和日志,我们还可以采用积极进攻的策略来让“敌人”来***我们用来测试我们的防线然后稳固他。

    做到写出固若金汤的程序也不是一朝一夕的事,请你在写每一个子程序时都用最严格的策略保护他,谨慎的修补他,慢慢的你就会拥有一个无法攻破的城堡。

推荐阅读《代码大全》第8章——防御式编程