软件构造知识点复习:健壮性与正确性+错误与异常处理+断言与防御试编程

健壮性与正确性

健壮性:
{/debug\left\{ \begin{array}{c} 处理未期望的行为/错误 \\ 终止执行也要返回错误信息 \\ 信息要有助于debug\end{array}\right.
我们要注意:封闭细节+极端情况
{使使\left\{ \begin{array}{c} 健壮性:容忍错误,使用户容易 \\ 正确性:不满足前置条件的就可以做任何处理,使开发者容易\end{array}\right.
健壮性+正确性=可靠性
我们的接口要做到:
{\left\{ \begin{array}{c} 对外:注重健壮性 \\ 对内:注重正确性\end{array}\right.
术语:
{errordefectbugfaultdefectfaultbugfauilure\left\{ \begin{array}{c} error:程序员犯的错误\\ defect:缺陷,bug的根源 \\ fault:defect ≈ fault,bug \\ fauilure:失效,运行时的外在表现\end{array}\right.
error导致→defect/fault/bug导致→failure
test:对合法和非法的都要测试
Code→Test→Debug

健壮性:错误与异常处理

Throwable:
{Error//Expectiontrycatch\left\{ \begin{array}{c} Error:我们无能为力,由于输入/设备/物理因素导致的 \\ Expection:可处理,用try-catch向上传\end{array}\right.
软件构造知识点复习:健壮性与正确性+错误与异常处理+断言与防御试编程

Error

软件构造知识点复习:健壮性与正确性+错误与异常处理+断言与防御试编程

Expection:

{RuntimeExpection\left\{ \begin{array}{c} Runtime Expection:不能有的→代码不当导致的,验证后一定可以避免的 \\ 其他:是我们要进行处理的→健壮性编程面向的对象,验证也不一定能避免\end{array}\right.
{RuntimeExpection\left\{ \begin{array}{c} Runtime Expection:不能有的→代码不当导致的,验证后一定可以避免的 \\ 其他:是我们要进行处理的→健壮性编程面向的对象,验证也不一定能避免\end{array}\right.

check与uncheck

{uncheckerror+RuntimeExpectioncheck()\left\{ \begin{array}{c} uncheck:error+RuntimeExpection 不能恢复\\ check:其他的异常,由编译器(静态)检查得出,能恢复\end{array}\right.
软件构造知识点复习:健壮性与正确性+错误与异常处理+断言与防御试编程

关键字

{trycatchfinallythrowcheckedunchecked()throws+\left\{ \begin{array}{c} try \\ catch \\ finally\\ throw:扔出checked异常,不建议扔出unchecked(语法上允许)\\ throws:自己的+下面传上来的\end{array}\right.
软件构造知识点复习:健壮性与正确性+错误与异常处理+断言与防御试编程
TWR:try(Resource res = ……){……}
throwable:栈结构

正确性:断言与防御式编程

目标:fail fast

断言

assert (期望的结果): “提示信息”;
AssertError→直接结束
判断的内容:RI(表示不变量)、内部不变量、控制流不变量、方法的pre、方法的post
不用assert外部的不受控制的
开发阶段使用,运行时注释掉→影响性能和健壮性
assert的开关:
{eada\left\{ \begin{array}{c} 开:-ea \\ 关:-da\end{array}\right.
{assertexception\left\{ \begin{array}{c} assert:针对正确性,不可以发生的情况 \\ exception:针对健壮性,可以发生的不正常情况\end{array}\right.

防御式编程

对于非法输入:garbage in, garbage out