12 Construction for  Robustness and Correctness

面向正确性与健壮性的软件构造

  • 健壮性和正确性

Robustness 健壮性:系统在不正常输入或不正常外部环境下仍能表现正常的程度

面向健壮性的编程:1.处理未期望的行为和错误终止

2.即使终止执行,也要准确/无歧义的向用户展示错误信息

3.错误信息有助于进行debug

对别人宽容点,对自己狠一点

Correctness正确性:程序按照spec加以执行的能力,是最重要的质量指标!(永不给用户错误的结果)

正确性倾向于直接报错(ERROR),健壮性则倾向于容错。

  • 怎么评估正确性和健壮性?

外部观察角度:MTBF---平均失效间隔时间:失效间隔时间的期望值

内部观察角度:Residual defect rates 残余缺陷率:每千行代码中遗留的bug的数量

  • Error和Exception

Throwable是Error和Exception的超类

对于Error,程序员通常无能为力,一旦发生了,只能想办法让程序优雅的结束

对于异常,自己程序导致的问题,可以捕获,可以处理

异常:程序执行中的非正常事件,程序无法再按照预想的流程执行。

异常可以分为两类,一类是运行时异常RuntimeException和其他异常

运行时异常:由程序员在代码里处理不当造成的

其他异常   :由外部原因造成的

RuntimeException运行时异常,是因为程序的源代码引入的故障

比如:ArrayIndexOutOfBoundsException、NullPointerException。。。

非运行时异常是程序员无法完全控制的外在问题所导致的,比如IO异常。

  • Checked and Unchecked exception

Error和RuntimeException是Unchecked的,其余的都是Checked的

对于UnChecked Exception:

可以不处理,编译没问题,但执行时出现就代表程序失败,代表程序中的潜在bug

Unchcked异常也可以使用throws声明或try/catch进行捕获,但大多数时候是不需要的也不应该这么做

对于Checked  Exception :

必须catch并处理这个异常,或者通过throws这个异常,告诉编译器你处理不了。

必须捕获并指定错误处理器handler,否则编译无法通过

当要决定是采用checked exception还是unchecked exception时候,问一个问题:

如果这种异常一旦抛出,client会做怎么样的补救?

如果客户端可以通过其他方法恢复异常,那么采用checked exception

如果客户端对这种异常无能为力,采用unchecked exception

异常出现的时候,要做一些试图恢复他的操作而不仅仅只打印他的信息。

尽量使用unchecked exception来处理编程错误,因为不用使客户端代码显式的处理他们,衙门会在出现的地方挂起程序并打印出异常信息。

Checked exception应该让客户端从中得到丰富的信息

如果想让代码更加易读,倾向于用unchecked exception来处理程序中的错误

程序员必须在方法的spec中明确写清楚本方法会抛出的所有checked exception

结果是false

  • 预防bug

最好的防御就是不要引入bug

如果无法避免的话,尝试着将bug限制在最少的范围之内(限定在一个方法之内,不扩散)

Assertions 断言:当程序不满足前置条件时候,可以通过抛出AssertionError异常来快速结束程序,避免扩散fail fast

断言使对代码中程序员所作假设的文档化,也不会影响运行时的性能(实际使用时,assertion都会被disabled)

Assert condition : message 当condition不满足的时候,message会显示给用户

断言默认会关闭,记得打开-ea

断言保证正确性,错误/异常处理使保证健壮性。

断言和异常处理都可以处理同样的错误

client希望使用checked异常,因为可以提示更清晰的错误信息并加以补救,避免程序的直接推出。开发者更倾向于使用unchecked,会让代码更加简洁易读。

软构复习12 Construction for Robustness and Correctness相关推荐

  1. Construction for Robustness and Correctness

    一.什么是正确性和健壮性 健壮性:系统在不正常输入或不正常外部环境下仍能够表现正常的程度 即错误输入,优雅退出.让用户更方便,出错也可以容忍,程序内部已有容错机制 . 正确性:程序按照spec加以执行 ...

  2. 软构习题课一内容总结

    软构作为一门编程课,竟然还有习题课是我没想到的.第一次上习题课时我们还没有像现在一样为各科期末考试忙得焦头烂额,所以我花了很长时间理解习题一.直到开始做实验一,我发现习题课真的太重要了!!因为习题一中 ...

  3. 软考复习笔记|项目管理过程与可行性分析及可行性分析报告编写

    正文开始之前,先恭喜一波,一大早就是满满的喜讯: 恭喜同学们顺利通过PMP考试,没有通过的同学也不要灰心哦,继续努力! 项目管理过程 1.项目管理过程与项目管理过程组 1) 启动过程组:确定并核准项目 ...

  4. 软考复习笔记、项目论证与评估与项目招投标流程及管理,建议收藏

    项目论证与评估 项目论证是指对拟实施项目技术上的先进性.适用性,经济上的合理性.营利性.实施上的可能性.风险可控性进行全面科学的综合分析,为项目决策提供客观依据的一种技术经济研究活动.项目论证应围绕着 ...

  5. 软构实验知识补充:什么是代码覆盖率

    学习内容: 关于代码覆盖率的相关知识与IDEA检测代码覆盖率的方法. 背景: 今天做软构lab2时需要在Eclipse下面使用Eclemma工具测试所谓的代码覆盖率.我对这个概念产生了一些好奇,于是做 ...

  6. (迟到了半个多月的)第一次软构实验总结

    date: 2019-03-09 20:08:00 第一次软构实验 第一次的软构实验本来以为会非常简单,但是没想到坑点那么多.从需要的算法层面来说确实不难,但是细节的处理还是挺麻烦的,感觉和传统的AC ...

  7. 7.1 Robustness and Correctness健壮性与正确性

    7.1 Robustness and Correctness健壮性与正确性 1 什么是健壮性和正确性 2 怎么衡量健壮性和正确性 3 这章的目的 1.What are Robustness& ...

  8. 软工复习一万字资料大全总结超强无敌版稳过乱过

    学习通作业一 选择题 软件工程最基本的目标是保证质量 软件工程是一种层次化技术,3个层次一般指过程.方法和工具 瀑布模型属于一种线性模型 "软件危机"是指开发出的软件不能满足需求 ...

  9. Arduino基础知识复习12.18

    文章目录 前言 一. 原型技术中的编程基础(Arduino C) a. 变量和数据类型 浮点型变量 数组 String C字符串 比较和位运算 *复合运算和赋值 *字符串和数字的互相转化 b. 程序结 ...

最新文章

  1. 使用Python,OpenCV和Haar级联进行人脸检测——轻量级的人脸检测器
  2. SpringBoot缓存应用实践
  3. IDEA 中比较骚后缀补全技巧!你可能没用过
  4. 历届华人 AAAI Fellows
  5. AMD正式公布第七代桌面级APU AM4新接口
  6. 【FI学习笔记】AR部分快速IMG配置
  7. python基础教程小甲鱼-小甲鱼零基础入门学习Python3视频教程全套96集
  8. 微信小程序把wx.showToast的文字提示长度增加的方法
  9. Elasticsearch数据备份与恢复(基于HDFS)
  10. mysql 命令 _Mysql常用命令行大全
  11. 基于边缘计算的森林火警监测系统
  12. linux db2表空间目录,db2 表空间的一些知识
  13. java double的加法_java Double 进行加减乘除
  14. 运营破局,四步完成从0到1
  15. 协议森林09 爱的传声筒 (TCP连接)
  16. 从一个程序看继承的有关细节及规则(学习马士兵视频的总结)
  17. easyui 图标下拉框
  18. MATLAB 和 Python 建模和仿真
  19. java编写计算器的原理_Java语言开发的计算器的心得
  20. 新闻发布系统(java实现)+论文

热门文章

  1. 技术分享 | 浅谈 MySQL 的临时表和临时文件
  2. 51单片机蜂鸣器播放音乐C语言程序实例,基于proteus的51单片机仿真实例八十八、用蜂鸣器播放一段音乐应用实例...
  3. OnDestroy OnClose
  4. 直播回顾 | 第13期5G消息云课堂:全方位赋能金融行业升级发展
  5. IDEA 上 Tigase8.0 源代码编译运行
  6. 小猫咪的面向对象,一个猫类,三个对象,
  7. Tacacs-配置single-connection单连接模式证测试与总结
  8. 部署自动化运维工具rundeck
  9. 远远相望也是一种美 ?
  10. 腾讯AI全景图首次曝光,解密腾讯的真正基因