文章目录
一. 写在前面
lab3相对而言还是更偏向于利用我们所学的诸多策略去实现一个可维护可复用软件,而这个软件的质量更多来源于我们所使用的策略。lab4中我们需要针对软件最重要的两个性质,也就是健壮性和正确性,对于lab3的程序进行一定的修改。
除此之外,我觉得lab4中最棒的一部分是3.6Debugging部分。这一部分是让我们对于几乎没有任何注释的有问题的程序进行修改,真的让我切身的体会到了代码维护者和不爱写注释的代码编写者之间的不共戴天之仇,是一个非常有教育意义(确信)的实验。
二. 新的实验环境配置
本次实验引入了一个新工具,即SpotBugs。这是一种能够自动检测可能存在的bug的工具(当然肯定不能所有bug都检测出来,不然3.6还要咱们手动debug干嘛),还是很有用的。安装方式很简单,将spotbugs的jar包下载下来,塞进eclipse的plugins文件夹里,然后重启eclipse就ok了。
注意,虽然我们在lab0的配置里面就应该加上-ea激活assert,lab4开始之前老师终于讲到了这部分的原理,所以如果之前忘记加-ea,现在还为时不晚(笑)
三. 实验具体内容
3.1 Error & Exception
Exception 分为两类,checked exception 和 unchecked exception。前者继承了 java.lang.Exception 类,必须被 throws 出去或者被 catch 住,否则静态检查就会报错。后者继承了 java.lang.RuntimeException,和 Error 一样,没有上述必须被处理的要求。虽然也可以被 catch,但是一般而言没人这么干。
实验3.1的内容就是让我们针对给出的一些要求(可以再增加)编写 checked exception,从而对这些特殊情况进行处理。可以看到,基本上,实验手册中给出的要求都是针对输入文件的格式或者依赖关系错误的,而我又加了一个 BlockTooManyTimesException,可以防止用户对一个一共5站的火车进行4次及以上的阻塞。总而言之,我们这里利用 checked exception 检查的,主要是Client(主要是用户端)不合法的输入,从而保证程序在异常输入情况下不至于直接爆掉,可以优雅地退出,也就是健壮性。