7.3Assertions and Defensive Programming断言与防御式编程
7.3Assertions and Defensive Programming断言与防御式编程
1.回忆:设计ADT
2.Assertions 声称
--What to Assert and What not to? 断言什么,不断言什么
--Guidelines for Using Assertions 断言的帮助
3.Defensive Programming 防御式拷贝
– Techniques for defensive programming
4.SpotBugs
1 Recall: Designing an ADT
First Defense: Make Bugs Impossible 最好的防御就是不要引入bug
Second Defense: Localize Bugs 快速定位bug,检查前置条件是防御式编程的一种典型形式
2 Assertions
(1) What and Why Assertions?
断言:在开发阶段的代码中嵌入,检验某些“假设”是否成立。若成立,表明程序运行正常,否则表明存在错误。
出现 AssertionError ,意味着内部某些假设被违反了
断言的方法:
assert condition;
assert condition : message;
(2) What to Assert and What not to?
Internal Invariants 内部不变量
Rep Invariants 表示不变量 (checkRep)
Control-Flow Invariants 控制流不变量 switch-case
Pre-conditions of methods 方法的前置条件
Post-conditions of methods 方法的后置条件
使用异常可以避免程序直接结束
缺省关闭断言,要记得打开 (-ea),断言非常影响性能
(3) Guidelines for Using Assertions
断言-->Correctness
错误 / 异常处理-->Robustness1
3 Defensive Programming
§ Protecting programs from invalid inputs
§ Assertions
§ Exceptions
§ Specific error handling techniques
§ Barricade
§ Debugging aids
(1) Protecting Programs From Invalid Inputs
对来自外部的数 据源要仔细检查,例如:文件、网络数据、用户输入等
(2) Barricade 设置路障
类的public方法 接收到的外部数据都应被认为是dirty的,需要处理干净再传递到 private方法——隔离舱
(3) Debugging Aids
7.3Assertions and Defensive Programming断言与防御式编程相关推荐
- 6-3 断言与防御式编程
一.ADT的设计 静态检查.动态检查.使用不可变的类型.值.引用等都有助于减少bug. bug是不可能完全避免的,要将bug限定在一个小范围内,使得程序尽早出问题.例如下图,前置条件要求x>=0 ...
- 调试、条件处理和防御式编程
当你的 R 代码出现了错误的时候,会发生什么情况呢? 你会怎么做呢? 你使用什么工具来解决这个问题? 本章将教你如何解决意外的问题(调试),并且向你演示函数如何去追踪错误,你如何基于这些反馈信息采取行 ...
- 关于防御式编程 (Defensive programming )和安全编码
目录 1. 啥是防御式编程? 2. 防御式编程的目标 3 防御式编程的好处 4 防御式编程带来的负面影响 5. secure programming 5.1 secure programming安全编 ...
- Defensive Programming 防御式编程(Defensive Programming)
Defensive Programming 防御式编程(Defensive Programming)是提高软件质量技术的有益辅助手段 怎么理解呢?防御式编程思想的理解可以参考防御式驾驶: 在防御式驾驶 ...
- 编程范式:函数式编程防御式编程响应式编程契约式编程流式编程
不长的编码生涯,看到无数概念和词汇:面向对象编程.过程式编程.指令式编程.函数式编程.防御式编程.流式编程.响应式编程.契约式编程.进攻式编程.声明式编程--有种生无可恋的感觉. 本文试图加以汇总和整 ...
- Cocosd-x”设计模式“之五 :防御式编程”模式“
这一篇将来学习防御式编程模式,其实它并不是一种标准的设计模式,使用它主要是为了提高程序的健壮性,其实这是软件开发中一个我们必须熟悉的模式,因为在程序代码中,很多地方往往存在一定的不确定性,如果我们对于 ...
- 华山论剑之契约式编程与防御式编程
背景 事情的来由还要从几十几亿年前的一次星球大爆炸说起,sorry,背错台词了,是从几天前讨论接口返回数据和几个月前讨论课件本地数据结构说起,简单的说,就是碰到约定好的内容出现异常,是我们在程序中内部 ...
- 契约式编程与防御式编程
背景 事情的来由还要从几十几亿年前的一次星球大爆炸说起,sorry,背错台词了,是从几天前讨论接口返回数据和几个月前讨论课件本地数据结构说起,简单的说,就是碰到约定好的内容出现异常,是我们在程序中内部 ...
- 《代码大全2》第8章 防御式编程
目录 前言 8.1 保护程序免遭非法输入数据的破坏 8.1.1 三种方式处理"垃圾进" 8.2.2 思考:程序输出时也应该增加防御 8.2.3 保留"证据" 8 ...
最新文章
- Python使用matplotlib可视化小提琴图、seaborn中的violinplot函数可视化多分类变量的小提琴图(Violin Plot)
- 器官复刻、脑机接口、电子皮肤…这些前沿科学或改写人类未来
- pytho基础之文件处理
- 节点服务器虚拟网络,虚拟网络功能节点放置研究
- 精美技术图赏-技术精华|二期
- error40无法打开到sql_技术分享|初识SQL优化之执行计划查看分析
- 【论文笔记】中文词向量论文综述(一)
- 经典教程 | 基于Spark GraphX实现微博二度关系推荐
- js加载本地shp数据到地图上_地图服务矢量数据获取方法总结
- 北京科技大学计算机控制实验报告,北科大计组原理实验报告.docx
- Q4实现盈利,搜狐迎来“疫”外春天?
- 语言模型数据集 (周杰伦专辑歌词)
- 在CentOs7上部署Gunicorn
- 推土距离, Wasserstein distance
- 小米平板4软件提取包_小米三大法宝:软件、硬件和服务;以及他的4条成功经验|小米手机|智能手机|手机...
- ping 超时原因总结
- 敏捷开发之用户故事地图
- 关于Impl idiom
- 设计模式总结篇(为什么要学习设计模式,学习设计模式的好处)
- HART协议基础知识