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

    技术2022-07-20  73

    健壮性与正确性

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

    健壮性:错误与异常处理

    Throwable: { E r r o r : 我 们 无 能 为 力 , 由 于 输 入 / 设 备 / 物 理 因 素 导 致 的 E x p e c t i o n : 可 处 理 , 用 t r y − c a t c h 向 上 传 \left\{ \begin{array}{c} Error:我们无能为力,由于输入/设备/物理因素导致的 \\ Expection:可处理,用try-catch向上传\end{array}\right. {Error//Expectiontrycatch

    Error

    Expection:

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

    check与uncheck

    { u n c h e c k : e r r o r + R u n t i m e E x p e c t i o n 不 能 恢 复 c h e c k : 其 他 的 异 常 , 由 编 译 器 ( 静 态 ) 检 查 得 出 , 能 恢 复 \left\{ \begin{array}{c} uncheck:error+RuntimeExpection 不能恢复\\ check:其他的异常,由编译器(静态)检查得出,能恢复\end{array}\right. {uncheckerror+RuntimeExpectioncheck()

    关键字

    { t r y c a t c h f i n a l l y t h r o w : 扔 出 c h e c k e d 异 常 , 不 建 议 扔 出 u n c h e c k e d ( 语 法 上 允 许 ) t h r o w s : 自 己 的 + 下 面 传 上 来 的 \left\{ \begin{array}{c} try \\ catch \\ finally\\ throw:扔出checked异常,不建议扔出unchecked(语法上允许)\\ throws:自己的+下面传上来的\end{array}\right. trycatchfinallythrowcheckedunchecked()throws+ TWR:try(Resource res = ……){……} throwable:栈结构

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

    目标:fail fast

    断言

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

    防御式编程

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

    Processed: 0.014, SQL: 9