软件构造复习11-面向健壮性的构造ch6

6.1健壮性和正确性

健壮性:系统在不正常输入或不正常外部环境下仍能表现正常的程度
尽可能保持软件运行而不是总退出
对用户更加友好

正确性:程序按照spec加以执行的能力
永不给出用户错误的结果
对程序员更加友好

这两种特性往往有一些矛盾,在实际使用中,要根据具体情况进行权衡
对外接口,倾向于健壮性
对内的实现,倾向于正确性

可靠性=健壮性+正确性
软件构造复习11-面向健壮性的构造ch6

6.2 错误与异常处理

见lab4 基础知识–java异常处理
unchecked – error RuntimeException
程序员检查
checked Exception:FileNotFound EOF
编译器检查
软件构造复习11-面向健壮性的构造ch6
软件构造复习11-面向健壮性的构造ch6
如果父类型中的某个方法声明中未throws任何checked异常,那么子类型中override该方法时,在override方法内部抛出或捕获的任何异常必须被在方法内捕获并处理

checked Exception 需要出现在spec中
unchecked Exception 则不需要

如果采用try(…){…}的语法,则不再需要finally{…}了
软件构造复习11-面向健壮性的构造ch6
软件构造复习11-面向健壮性的构造ch6

6-3 断言与防御式编程

在开发阶段的代码嵌入,检验某些“假设”是否成立。若成立,表明程序正常运行,否则表明存在错误
软件构造复习11-面向健壮性的构造ch6
代码需要的功能不要写在断言中
开发阶段使用断言
执行、发布后不要使用断言
软件构造复习11-面向健壮性的构造ch6
软件构造复习11-面向健壮性的构造ch6
软件构造复习11-面向健壮性的构造ch6
软件构造复习11-面向健壮性的构造ch6

Spotbugs

静态代码分析工具

6.4 Debug

软件构造复习11-面向健壮性的构造ch6
软件构造复习11-面向健壮性的构造ch6

四种策略

Instrumentation 测量

print log

Divide and Conquer 分治

Program Slicing切片

如果发现某函数输出的某变量a与期望不一致,那么对该函数代码中可能导致变量a的值发生变化的一部分代码进行仔细分析,以发现潜藏bug。

Delta Debugging 寻找差异

两个测试用例,测试结果分别是“通过”和“不通过”。
那么,利用EclEmma代码覆盖度工具观察两个测试用例所覆盖的代码行,找出二者的差异,bug很可能就隐藏在差异的代码行里。

针对一个bug修改代码之后,要重新运行之前发现该bug的所有测试用例,已确认该bug是否被完全修复

软件构造复习11-面向健壮性的构造ch6
6-5 Testing
![

](https://img-blog.****img.cn/20200710210647196.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzgyMjMxMw==,size_16,color_FFFFFF,t_70)