软件构造课程回顾-第6章:Robustness(1)

临近期末,各学科的学习压力也越来越大,在lab4仍一头雾水的情况下,我回顾了刚讲完不久的第六章-健壮性。为了防止在最后一周冲量,我决定将我刚复习过的内容“趁热”总结一下并且写出来,这样可以做到一举两得

第六章主要分成6个部分来讲解,其中6.5是测试,在开学的前几周就已经讲完了,时间太过久远,不在此次讨论范畴,而6-6习题课也先不和其他知识点型课程并列。所以第六章共由4部分组成,其中,6.1就讲的是健壮性与正确性。
6.1主要讲了两种性能指标的区别和联系(主要是区别)。我们都知道,凡是有用户输入部分的程序,都会有输入错误的时候,一旦输入错误,基于正确性和健壮性两个指标,就会有不同的要求。
正确性(correctness)是一个程序最重要的性能指标,没有正确性一切都免谈。因此也不可能出现牺牲正确性来换取其他性能指标的提升这种情况。当输入错误的值时,正确性根据规约(spec)触发“免责”机制,即对于错误的(不符合spec的)输入,程序员可以给出任意输出,甚至可以直接报错而使程序停机。保证输入的正确性。这种做法虽然看起来很“爽快”,但是使用我们程序的用户就没那么爽快了,他们要时刻小心不输入错误的消息,生怕输错之后直接崩溃,从而极大程度地削弱了用户的体验。由此我们引入健壮性(robustness)的概念,简单来说就是在用户输入错误内容之后不停机,而是设法找到一个解决方案,优雅地退出。总之, 从要求层面来说,正确性强调对用户的要求,而健壮性则强调对程序员的要求:它把用户都想象成白痴,他们可能会给出各种离谱的输入,健壮性则力求解决这些“白痴”提出的离奇问题。
6.2讲了错误和异常处理,这里要区分错误和异常。错误(error)一般都不是“我的锅”,而是非程序因素,如用户输入错误/设备问题/物理硬件限制等等,一旦出现,想办法“优雅”结束即可。而异常(exception)则是程序的问题,是可以捕获,可以处理的。(确实是我错了!)
我们难以避免error,故可以从异常深入讨论。所谓异常,即是return之外的第二种返回途径,它尝试将错误信息传给上层调用者,并报告“案发现场”的信息。分为unchecked和checked两种,对应着RuntimeException和其他异常。这是因为运行时异常完全是“我自己的问题”,是在我写程序时可能写错了而导致的问题。如果连这种异常也要检查一下,就会触发一个矛盾:我已经假设我release出去的代码是无误的,并且我知道这是我在代码中要犯的错误,还特地设置异常来check一下。这就与我“假设release的代码无误”的前提相悖。
我们已经知晓了需要/不需要使用try-catch语句进行的几类异常,下一部分主要是对异常处理的5个关键词–try,catch,finally,throws,throw分别进行区分与联系,这些会留到后面的部分总结。
由于水平有限,不足之处还望见谅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值