防御性编程

以下内容来源于互联网

————————————————————————————

主要思想:子程序不因传入错误数据而被破坏,将出错造成的影响控制在最小的范围内。

需要注意的方面

  1. 使用好的编码风格,尽量使用有意义的变量名
  2. 写代码之前做到心中有数,不要仓促编写代码。代码分支部分考虑所有可能的情况。
  3. 不要相信用户--电话号码输入框,他们可能输入中文,因为等,需要验证
  4. 代码要清晰,不要简洁。允许冗余,别人好维护
  5. 检查函数返回值,返回可能有问题

总结:注意的地方大概在三个地方

  1. 客户端输入
  2. 函数输出
  3. 代码结构本身清晰、分支全面
时间: 2024-10-08 02:27:28

防御性编程的相关文章

iOS防御性编程

防御性编程是一种细致.谨慎的编程方法.为了开发可靠的软件,我们要设计系统中的每个组件,以使其尽可能地“保护”自己.我们通过明确地在代码中对设想进行检查,击碎了未记录下来的设想.这是一种努力,防止(或至少是观察)我们的代码以将会展现错误行为的方式被调用. 防御性编程是一种编程习惯,是指预见在什么地方可能会出现问题,然后创建一个环境来测试错误,当预见的问题出现的时候通知你,并执行一个你指定的损害控制动作,如停止程序执行,将用户重指向到一个备份的服务器,或者开启一个你可以用来诊断问题的调试信息.这些防

追求代码质量: 用 AOP 进行防御性编程

原文出处: IBM中国 开发人员测试的主要缺点是:绝大部分测试都是在理想的场景中进行的.在这些情况下并不会出现缺陷 —— 能导致出现问题的往往是那些边界情况. 什么是边界情况呢?比方说,把 null 值传入一个并未编写如何处理 null 值的方法中,这就是一种边界情况.大多数开发人员通常都不能成功测试这样的场景,因为这没多大意义.但不管有没有意义,发生了这样的情况,就会抛出一个 NullPointerException,然后整个程序就会崩溃. 本月,我将为您推荐一种多层面的方法,来处理代码中那些

防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结

防御性编程习惯 程序员在编写代码的时候,预料有可能出现问题的地方或者点,然后为这些隐患提前制定预防方案或者措施,比如数据库发生异常之后的回滚,打开某些资源之前,判断图片是否存在,网络断开之后的重连次数或者是否连接备用网络,除法运算中的除数问题,函数或者类在接受数据的时候的过滤情况,比如如果输入一个指针参数,是否需要判断是不是空指针?输入一个字符串参数,是否需要判断字符串空否……总的来说就是防止出现不可预见的事情,设计出鲁棒性的代码. 看下面的例子 输入一个链表,输出链表中倒数第 m 个结点额内容

EAFP和LBYL 两种防御性编程风格

EAFP:Easier to ask for forgiveness than permission 获得事后原理总是比事先得到许可要容易的多. 这个EAFP在python中表现的比较多.EAFP,This common Python coding style assumes the existence of valid keys or attributes and catches exceptions if the assumption proves false. This clean and

防御性编程【转】

http://www.cnblogs.com/bakari/archive/2012/08/27/2658215.html 本篇是我根据网上的一些陈述经过整理和总结而得.其中详细的内容我会标注出处.看不懂的可以查看原文. 一.什么事防御性编程 详细请见:http://www.uml.org.cn/codeNorms/201007165.asp 防御性编程是一种细致.谨慎的编程方法.为了开发可靠的软件,我们要设计系统中的每个组件,以使其尽可能地“保护”自己.我们通过明确地在代码中对设想进 行检查,

防御性编程(转载)

本篇是我根据网上的一些陈述经过整理和总结而得.其中详细的内容我会标注出处.看不懂的可以查看原文. 一.什么事防御性编程 详细请见:http://www.uml.org.cn/codeNorms/201007165.asp 防御性编程是一种细致.谨慎的编程方法.为了开发可靠的软件,我们要设计系统中的每个组件,以使其尽可能地“保护”自己.我们通过明确地在代码中对设想进行检查,击碎了未记录下来的设想.这是一种努力,防止(或至少是观察)我们的代码以将会展现错误行为的方式被调用. 防御性编程是一种编程习惯

[转] LBYL与EAFP两种防御性编程风格

检查数据可以让程序更健壮,用术语来说就是防御性编程.检查数据的时候,有这样的两种不同的风格.LBYL:Look Before You Leap  EAFP:Easier to Ask Forgiveness than Permission LBYL即事先检查.EAFP是不检查,出了问题由异常处理来处理. d = {} words = ['a','d','a','c','b','z','d'] #LBYL for w in words: if w not in d: d[w] = 0 d[w] +

【ThinkingInC++】70、防御性编程

第二章 防御性编程 猜字游戏 /** * 书本:[ThinkingInC++] * 功能:实现一个猜谜的游戏 * 时间:2014年10月8日21:54:44 * 作者:cutter_point */ #include <cstdlib> #include <iostream> #include <string> using namespace std; int main() { cout<<"自己想出来一个数字,在1到100之间的,我来猜猜你的心思

【软件构造】第七章第三节 断言和防御性编程

第七章第三节 断言和防御性编程 本节:第2种技术--断言.防御式编程 Outline 断言 什么是断言 断言的应用场景 防御式编程(不是考点,不加叙述) Notes: ## 断言 [什么是断言] 作用:允许程序在运行时检查自己,测试有关程序逻辑的假设,如前置条件.后置条件.内部不变量.表示不变量.控制流不变量等 目的: 为了在开发阶段调试程序.尽快避免错误 使用阶段: 断言主要用于开发阶段,避免引入和帮助发现bug 实际运行阶段, 不再使用断言 软件发布阶段,禁用断言避免影响性能. [应用场景]

软件构造 第七章第三节 断言和防御性编程

第七章第三节 断言和防御性编程 断言:在开发阶段的代码中嵌入,检验某些"假设"是否成立.若成立,表明程序运行正常,否则表明存在错误. 可用于检查: 内部不变量: 表示不变量: 控制流不变量 方法的前置条件 方法的后置条件 断言主要用于开发阶段,避免引入和帮助发现bug 实际运行阶段, 不再使用断言 软件发布阶段,禁用断言避免影响性能. 断言?Correctness 错误/异常处理?Robustness Defensive Programming 对来自外部的数据源要仔细检查,例如:文件