HIT 软构第六章总结

前言

第四章讲可复用性,第五章讲可维护和扩展性,终于到了健壮性了,可复用性和可维护性都有相应的设计模式,有很多比较技术性的思路,可能需要我们在平时练习中慢慢消化,这一章则是程序员必须掌握的技能----面向健壮性的编程。

健壮性和正确性

我们在设计ADT的时候,很多情况都是按照自己的思路,但我们很难要求客户端也一定按照我们的思路,一个兼容性高适用范围广的软件其健壮性一定高,这就要求我们能对可能出现任何一种操作都进行预判,作为面向客户友好型的软件,我们需要遵循以下两点基本的观念:

  • 处理未期望的行为和错误终止
  • 要向用户反馈展示错误信息
    而正确性更强调对spec的绝对遵守,它反映了程序按照spec加以执行的能力。

错误与异常处理

Throwable:包括error和exception。
内部错误(error):与代码无关,程序员无能为力,比如电脑配置问题,硬件问题等等外部非代码的原因。
异常(exception):程序员导致的问题,可以捕获,可以处理。try-catch语句。
Exception:分为两种,Runtime Exception 和其他异常。
一般来说,运行时的异常是由代码里的原因造成的,这种异常我们称为Runtime异常。
除了Runtime异常之外的就是其他异常。它是由外部原因造成的,但可以用代码解决,比如文件找不到,那可以捕获处理后再重新找嘛。
需要注意的是:如果你的代码在运行的时候抛出了Runtime异常的话那肯定是代码里有bug,我们需要及时的去修改我们的代码 ,将代码封装发布给客户端使用的时候是不能存在Runtime异常的。

我们还可以从另一个角度去区分异常,分为check异常和uncheck异常。
check异常:在静态类型检查时就能检查出来的异常。
uncheck异常:无法在静态编译时检查到,必须运行时才能找到。比如Runtime异常不需要try-catch,表明代码有问题。
check异常需要捕捉后进行处理,尽可能使程序回归正轨。
finally:try-catch后一定要做的操作,可以用TWR语法代替。
stack trace:程序运行时调用方法形成的栈结构,程序每次调用一个方法都压一次栈,结束调用后再弹出。

断言与防御式编程

处理异常侧重于维护性健壮性。断言和防御式,侧重于正确性。
原则:尽可能早的抛出bug,提示程序员或客户端。
assertion:在开发阶段,在代码中嵌入断言,检查“假设”成立,功能类似断点运行。
assert condition :“message”;(condition为真通过,为假就结束程序)
assert 可以用来检验RI,spec的前置后置条件 ,程序之外的事,不用assert。
使用assert并不会影响代码实现,由于assert可以被关闭,所以也不会影响程序运行性能。
如果要考虑对客户端友好,spec的前置条件可以用throw代替断言,通过抛出异常和捕捉处理能使程序继续稳定的运行。
对于防御式编程:对客户端抱有谨慎态度,对非法输入的判断,对ADT防御式拷贝。

debug

Instrumentation测量:就是打印出错误,可以用print也有用日志
Divied and Conquer分治:分成不同的模块进行debug
slicing切片:将和bug相关的所有语句。
Delta Debugging:基于差异的调试,根据代码覆盖度不同进行调试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值