1.健壮性

什么叫健壮性?指代码很多?多到程序员无法撼动?

嘛,开个玩笑啦……健壮性不是指数量,而是衡量代码质量特性的最关键的一种,用“一人之下万人之上”来形容很恰当(在他上面的是正确性,emm……这个不用解释了吧)。

健壮性具体指的是系统在不正常的输入或不正常的外部环境下仍能表现出正常的程度。

形象点来说就是这个软件要求用户输入个整数,结果用户这个小坏坏输入了一个小数,那么你这个程序会怎么处理呢?崩了可就不太好吧,你的程序怎么能允许别人来玩坏?!

面向健壮性的编程有以下几点要求或优点:

  • 处理未期望的行为和错误终止
  • 即使终止执行,也要准确/无歧义的向用户展示全面的错误信息
  • 错误信息有助于进行debug

健壮性原则:

  • 总是假定用户为恶意用户,假定自己的代码会失败
  • 把用户想象成一个silly b,可能输出任何东西
    注意,因为用户很silly,最好要返回给用户错误提示信息,而且要详细准确无歧义!(其实这对debug非常有帮助,尤其是像我这样喜欢用syso找虫子的白痴CodeDog)
  • 对自己的代码要保守,对用户的行为要开放

面向健壮性编程的原则:

  • 封闭实现细节,限定用户的恶意行为
  • 考虑各种各样的极端情况,没有impossible

2.正确性

上面刚刚提到过它,这东西的重要性就不用多说了吧。我们的软件最重要的目的就是它,没有正确性,这软件也就没用了,连烧火都烧不了……

正确性:程序按照spec加以执行的能力,是最重要的质量指标!

说一下与健壮性的区别:

  • 正确性:永不给用户错误的结果
  • 健壮性:尽可能的保持软件运行而不是总是退出

本质上来讲正确性倾向于直接报错,健壮性倾向于容错,避免给用户太大的压力,帮助用户承担一些麻烦(注意二者并不冲突)

来个栗子吧:

那么我们如何取合适的健壮性或正确性呢?原则是对外接口,倾向于健壮,对内实现,倾向于正确。

第七章软件结构的健壮性——健壮性与正确性相关推荐

  1. 第七章软件结构的健壮性——测试与测试优先编程

    1. 软件测试(Software Test) 测试:发现程序中的错误,提高程序正确性的信心. 程序确认的基本方法: 形式化推理(Formal reasoning) 代码评审(Code review) ...

  2. 第七章 Java基础类库

    前言:如果你真正学习到了这里,那么先容许我夸赞一下你,太棒了!哪怕你对前面六篇文章的掌握度达到50%也是非常了不起的了,关于后面的文章学习我只能说,非常简单,只是我们文章会非常详细的介绍实现原理和一些 ...

  3. 《Go语言圣经》学习笔记 第七章 接口

    <Go语言圣经>学习笔记 第七章 接口 目录 接口是合约 接口类型 实现接口的条件 flag.Value接口 接口值 sort.Interface接口 http.Handle接口 erro ...

  4. java学习笔记-第七章:面向对象编程(基础部分)

    第七章:面向对象编程(基础部分) 总体内容 类与对象 引出类与对象 类与对象概述 类与对象的关系示意图 属性概念及其细节 类与对象快速入门案例 对象内存布局 类与对象内存分配机制 引申:java内存的 ...

  5. 数字图像处理——第七章 小波和多分辨处理

    数字图像处理--第七章 小波和多分辨率处理 文章目录 数字图像处理--第七章 小波和多分辨率处理 写在前面 1 多分辨率处理 1.1 图像金字塔 1.2 多尺度和多分辨率的区别 2 小波 2.1 连续 ...

  6. stm32 工业按键检测_「正点原子STM32Mini板资料连载」第七章 按键输入实验

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 按键输入实验 上一章,我们介 ...

  7. IT行业热点商业模式随笔第七章——商业模式创新规律

    前言: 第一章:商业模式面面观 第二章:长尾商业模式 第三章:免费商业模式 第四章:平台商业模式 第五章:开放式商业模式 第六章:完美商业模式--印钞机 第七章:商业模式创新规律 第七章:商业模式创新 ...

  8. 概率统计:第七章 参数估计

    第七章  参数估计 内容提要: 一.        点估计 1.设为总体的样本,总体的分布函数形式已知,为待估参数, 为对应的样本观测值.点估计问题就是构造一个适当的统计量,用其观测值来估计待估参数的 ...

  9. 人工智能:第七章 机器学习

    第七章机器学习 教学内容:机器学习是继专家系统之后人工智能应用的又一重要研究领域.本章主要介绍机器学习的有关知识及其主要的几种学习方法,并介绍了知识发现的相关内容. 教学重点:机器学习的基本结构.类比 ...

  10. 数字图像处理:第七章 邻域运算

    第七章 邻域运算 目录 引言 相关与卷积 平滑 中值滤波 边缘检测 细化 作业 1.引言 邻域运算是指当输出图象中每个象素是由对应的输入象素及其一个邻域内的象素共同决定时的图象运算,通常邻域是远比图象 ...

最新文章

  1. 直击2019WAIC丨李德毅:人工智能是脱离意识的工具,需要约束的是人类自己
  2. 如何自学python爬虫-Python初学者如何从网络爬虫到机器学习?
  3. SAP Connect对inbound邮件接收问题的处理和调试环境搭建
  4. C++编译预处理:宏定义指令、文件包含指令和条件编译指令
  5. 基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (番外篇)
  6. 文件上传命令rz和下载命令sz的安装
  7. java http连接es_连接es
  8. java word另存为_Java 网页html转为word并保存为doc文件
  9. c语言 sprintf_s 参数 通配符,Rust教程(翻译).doc
  10. 一道非齐次方程组解的判定习题--行向量
  11. 用glew,glfw实现opengl-学习笔记3着色器
  12. 移动机器人路径规划算法研究综述(一)
  13. Java AES/ECB/PKCS5Padding加密和PHP解密的实现
  14. bmc linux 默认密码_系统下重置BMC密码方法
  15. 苹果开发者账号双重验证忘记密保终极解决办法
  16. html+css画虚线,实线
  17. java 虚函数表_虚函数表(vtable/virtual table/virtual method table)
  18. 第五篇文章:AspectJ框架
  19. Ubuntu18.04耳机无声音解决方法
  20. 40多个JAVA手机游戏打包

热门文章

  1. 快速搭建接口自动化平台
  2. ICEM 准备工作-常用操作
  3. TZOJ 数据结构实验:一元多项式相加
  4. 2019杭电多校第六场Snowy Smile HDU-6638
  5. perfmon的使用及性能分析
  6. 浩瀚先森(guohao1206.com)
  7. GRB控制型非隔离dc-dc低压升压高压电源模块24V转100V120V150V200V250V350V500V1000V
  8. 黎活明8天快速掌握android视频教程--20_采用ContentProvider对外共享数据
  9. 无限制翻译PDF文件——低调使用
  10. 万字总结,行业分析到底应该怎么做!