1什么是稳健性和正确性?
1.健壮性
系统在不正常输入或不正常外部环境下仍能够表现正常的程度
2.面向健壮性的编程
即使终止执行,也要准确/无歧义的向用户展示全面的错误信息
错误信息有助于进行debug
3.稳健性原则(Postel定律)
1.总是假定用户恶意、假定自己的代码可能失败
2.把用户想象成白痴,可能输入任何东西,返回给用户的错误提示信息要详细、准确、无歧义
3.(Postel’s Law):对别人宽容点,对自己狠一点
4.封闭实现细节,限定用户的恶意行为
5.考虑极端情况,没有“不可能”
4.正确性
程序按照spec加以执行的能力,是最重要的质量指标。
正确性与健壮性比较:
正确性:永不给用户错误的结果
健壮性:尽可能保持软件运行而不是总是退出
正确性倾向于直接报错(error),健壮性则倾向于容错(fault-tolerance)
外部和内部:
–外部接口(健壮性)(UI、输入文件、配置、API等)主要为用户和第三方服务。让他们变得健壮,并尽可能适应,期望人们会输入垃圾。
–内部模型(正确性)(即域模型)应尽可能简单,并且始终处于100%有效状态。使用不变量和断言做出安全的假设,只要遇到任何不正确的情况,就抛出一个大的异常。
–在将无效输入传递给内部模型之前,使用反破坏层保护内部模型不受外部接口的影响,该层映射并纠正无效输入(如有可能)。
安全关键型应用程序倾向于支持正确性而不是健壮性。–与其返回错误的结果,不如不返回结果。
消费者应用程序倾向于支持健壮性和正确性。–任何结果通常都比关闭软件要好。
可靠性=正确性+健壮性
系统在规定的条件下执行所需功能的能力,无论何时需要,平均无故障时间较长。=
5.如何提升健壮性,正确性
步骤0:编写具有健壮性和正确性的代码
使用断言、防御性编程、代码审查、正式验证等实现目标
步骤1:观察故障症状(内存转储、堆栈跟踪、执行日志、测试)
步骤2:识别潜在故障(bug本地化、调试)
步骤3:修复错误(代码修订)
2 Java里的异常exception与错误error
内部错误error:Error类描述Java运行时系统内部很少发生的系统错误和资源耗尽情况
–不应该抛出这种类型的对象。
–如果发生这样的内部错误,除了通知用户并尝试优雅地终止程序之外,几乎无能为力。
异常exception:你自己程序导致的问题,可以捕获、可以处理
3 异常处理
1.异常定义
异常:程序执行中的非正常事件,程序无法再按预想的流程执行
异常将错误信息传递给上层调用者,并报告“案发现场”的信息
如果每个方法不能正常方式完成其任务,Java允许每个方法都有一个可选的退出路径。
–该方法抛出一个封装错误信息的对象。
–该方法立即退出,不返回任何值。
–此外,在调用该方法的代码处不会恢复执行;
–相反,异常处理机制开始搜索可以处理此特定错误条件的异常处理程序。若找不到异常处理程序,整个系统完全退出
2.异常分类
运行时异常:由程序员在代码里处理不当造成,,是程序源代码中引入的故障所造成的
如果在代码中提前进行验证,这些故障就可以避免
其他异常:由外部原因造成,