《代码大全》第八章 防御式编程

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

garbage in ,garbage out!

三种方法处理进来的垃圾数据

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

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

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

8.2 Assertions

时间: 2024-10-11 21:28:08

《代码大全》第八章 防御式编程的相关文章

华山论剑之契约式编程与防御式编程

背景 事情的来由还要从几十几亿年前的一次星球大爆炸说起,sorry,背错台词了,是从几天前讨论接口返回数据和几个月前讨论课件本地数据结构说起,简单的说,就是碰到约定好的内容出现异常,是我们在程序中内部作兼容处理,还是抛出去. 打个比方,我们要解析一段json,约定这个json的格式,只能是正常格式,或者是空,那么一旦返回json的方法返回了一个『既不是正常格式,又不是空的异常值』,程序该如何处理呢? 小花:一旦碰到约定异常,程序必须兼容处理,一定不能让程序Crash 小Fa:一旦碰到约定异常,就

由错误处理引发的联想-防御式编程

前两天和一同学谈到程序出错应该如何处理的问题,他讲到错误处理的两个原则, 第一,应该在错误发生时立即将它抛出,而且得抛的很明显,有些人采用静默出错的原则,尝试修复错误并继续运行,这回导致代码调试起来很困难,所以他认为,当程序逻辑出错时,应该立刻崩溃,并生成一段有意义的错误消息,立即崩溃是为了不让事情变得更糟,错误消息应担被写入永久的错误日志,以便过后查明是哪里出错. 第二,就是抛错要快,也要文明,文明抛错,就是只有程序猿才能看到程序崩溃时产生的详细错误消息,程序的用户绝对不能看到这些消息,另一方

我谈防御式编程

cnblogs果然热闹,我好喜欢这里的氛围,今天分享下自己对“防御式编程”的看法吧! 一直以来,我们项目深受NullPointerException的影响.因为引用为空而引起的问题,从项目诞生的那天起,就没有断过,错误日志经常爆出java.lang.NullPointerException.我与其他同事聊过,分析这个到底是数据问题还是程序问题?部分人认为这是数据问题,如果是因为从数据库里取出来的数据为空,那么把数据库表的数据某些字段改成不为空就可以了,处理下数据就行了.部分人认为这是程序问题,程

《Code Complete》ch.8 防御式编程

WHAT? 主要思想:子程序不应因传入参数错误而被破坏 WHY? 保护程序免遭非法输入的破坏 HOW? 断言 assert denominator != 0 : "denominator should not be 0"; // 启动VM时需要 -ea 参数用以启动assert功能 只用于开发.维护阶段 用错误处理代码来处理预期会发生的状况,用断言来处理绝不会发生的状况 避免把需要执行的代码放入断言中 用断言来注解并验证前条件和后条件 错误处理技术 返回中立值(当对返回结果准确性要求较

防御式编程的主要思想

防御式编程是提高软件质量技术的有益辅助手段.防御式编程的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据.这种思想是将可能出现的错误造成的影响控制在有限的范围内. 主要内容如下: 1.保护程序免遭非法输入数据的破坏   1.检查所有来源于外部的数据的值   2.检查子程序所有输入参数的值   3.决定如何处理错误的输入数据       使用迭代设计.编码前先写伪代码.写代码前先写测试用例.低层设计检查等等

16防御式编程2

一 辅助调试的代码 1. 不要自动地把产品版本的限制强加于开发版之上 ? 程序员们常常有这样一个误区,即认为产品级软件的种种限制也适用于开发中的软件.产品级的软件要求能够快速的运行,而开发中的软件则允许运行缓慢.产品级的软件要节约适用资源,而开发中的软件在使用资源时可以比较奢侈.产品级的软件不应向用户暴露可能引起危险的操作,而开发中的软件则可以提供一些额外的.没有安全网的操作. ? 我曾参与编写的一个程序中大量地使用了四重链表.链表的代码是很容易出错的,链表本身的结构很容易损坏.因此我给程序加了

软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结

健壮性与正确性 健壮性与正确性是不同的——一个倾向于使程序尽可能保持运行,即使遇到错误,一个倾向于使程序尽可能正确,不在意保持运行 异常 异常分为两种——checked exception与unchecked exception 二者的区别在于: checked exception需要显式的处理,说白了就是编程者必须要么用catch抓住它,然后在try中想办法处理掉,要么显式的将这个异常扔到调用的上一级方法,也就是甩锅.总而言之,你永远不能无视checked exception unchecke

论防御式编程与攻击式编程

今天突然想到了这个话题. 那么,有一部分读者可能并不会很理解我的意思 防御式编程:客户提出什么问题,我们就解决什么问题. 攻击式编程:主动发现问题,其中有一部分问题是性能优化问题,一部分是客户未能发现的BUG.以尽快的方式解决问题. 真实场景:一个功能被做出来了,开发人员于是试了一遍,觉得功能已经出来了,他心里面觉得松了口气, 可以暂时缓了一口气,然后这个功能的测试任务,被分配给了测试人员. “叮叮叮,小李,过来一下,你这个功能怎么怎么的”. 有以下几种可能情况: 测试人员:   你这个样式在I

python2学习------基础语法2(类、类的继承、类成员函数、防御式编程)

1.类的定义以及实例化 # 类定义 class p: """ this is a basic class """ def __init__(self): # 类成员函数需要传入self关键字 """ this is a init function of basic class """ print "this is a init function ... "; def