何为正确性与健壮性?
健壮性:系统在不正常输入或不正常外部环境下仍能够表现正常的程度
面向健壮性的编程:处理未期望的行为和错误终止、即使终止执行,也要准确无歧义的向用户展示全面的错误信息,以便于debug。
健壮性编程的准则:封闭实现细节,限定用户的恶意行为,考虑极端情况,没有不可能。
正确性:程序按照spec加以执行的能力,是最重要的质量指标
正确性倾向于直接报错,健壮性更倾向于容错。
如何测量正确性与健壮性?
外部观察角度:MTBF即平均失效间隔时间。计算了系统的两次失效之间的平均时间。
内部观察角度:残余缺陷率。指每千行代码中遗留的bug的数量。
关于Java中的异常与错误
Error:程序员通常无能为力,发生时需要想办法正常结束程序。
Exception:自己程序导致的问题,可以捕获、可以处理
Error的种类:用户输入错误、设备错误、物理限制
对于Exception的处理相比之下我们可以更加主动,套用try-catch语句即可捕获一些预期中的异常情况。程序无法按照预想的流程进行时,可以将错误信息传递给上层调用者,并且报告相关信息,也是return之外的第二种退出途径。
Exception可以分为运行时异常与非运行时异常。运行时异常,是程序源代码中故障所造成的,如果在代码中提前进行验证,这些故障就可以避免。但是非运行时异常,是程序员无法完全控制的外在问题所导致的。即使在代码中提前加以验证,也无法完全避免失效发生。
异常处理的相关关键词:try、catch、finally、throws、throw
throws:声明本方法可能发生XX异常
throw:抛出XX异常
try catch finally:捕获并处理XX异常
错误可以预料,但无法预防,但可以有手段从中恢复,此时使用checked exception。如果做不到这一点,则使用unchecked exception。
如何抛出一个异常?
- 找到一个能表达错误的Exception类、或者新构造一个类
- 构造Exception类的实例,将错误信息写入
- 抛出它
一旦抛出异常,方法不会再将控制权返回给调用它的client,因此也无需考虑返回错误代码。
创建异常类
如果JDK提供的无法充分描述你的程序发生的错误,可以创建自己的异常类