oo第二次博客

第五次作业:


 

度量:

 

类图:

 

 


第六次作业:

度量:

 

类图:


第七次作业:

度量:

类图:


自我评价:

  各个类之间职责的分离程度还是有所不足。有些方法存在调用过深的问题。设计还是相对过于复杂。主要问题还是在于对问题的分析能力不足,无法得出相对更加的设计思想,因此只能通过复杂的实现方式来解决。


自己程序的bug:

  在第五次作业,就是多线程三电梯作业中,公测中错误比较集中的地方在于错误输入的输出格式上,我在写代码的时候直接沿用了上一次作业的代码,但两次作业中输出错误的格式有很大区别,我只修改了一部分输出,另一些忘掉了,导致出现了这些错误。除此以外其他的bug包括时间上无法确保精度和某些同质指令的判断。经过严密的分析,我发现导致这些bug很大一部分的原因是线程之间的协作问题,特别是对于Java锁的应用和程序时序上的判断。我代码中锁住的部分代码相对较长,在时序上就会出现其他线程读取该线程属性时出现错误。具体表现就是调度器在给电梯分配捎带任务时电梯需要根据调度器给的主指令自行设定状态,在这种情况下我的程序可能会出现先分配任务后更改状态的问题。这个bug在大量指令测试时会出现严重的偏差。

  第六次作业是我本学期以来做过的最令我心情复杂的一次作业。它的难度并没有多线程电梯那么大,但是,需要思考的情况和需要在ReadMe中说明的情况实在是太多,而且指导书的突然更改让我有些不知所措,助教群内不时添加的新规定也让我很烦恼。但总的来说随后写出来的bug还是相对较少的,功能也都基本上能够很好的实现。互测后只被报了一个超过十条指令不输出错误信息的bug。这个bug本来应该是没有的,但我为了测试把它注释掉了最后交的时候忘记了。

  第七次作业讲道理比前两次作业都要简单,无论是从问题的解答上还是对于算法的分析都相对简单,指导书上的说明也比第六次作业详尽了很多。本次作业中公测都通过了,互测被报了两个bug。一个是时间间隔的问题另一个是输出信息不全的问题。其实为了避免第五次作业中出现的时间上的错误,我特意引入了一个变量来存储假时间,但可能还是在Taxi类中有哪里还有时间上的小问题。另外一个就是我只输出了参与抢单的出租车但并没有对应输出出租车抢的具体是哪一个单。

  总的来说与线程安全相关的设计问题应该只在第五次作业中出现了,就是我上文中提到的那个问题。第六次作业线程设计上比第五次好了很多,当然也有这个程序天然的线程分离思想。第七次作业的线程设计应该还是有一些微小的bug,应该是关于锁的应用上。在使用上千条指令测试的时候会出现一些不可复现的随机bug,通过输出的调试信息上判断是寻找最短路径时独立性不够的问题。


 

找bug策略:

  在这三次作业的测试中我比较懒。公测测试点都有认真测试,互测bug我之测试了一下相对可能会出现问题的情况看他并没有出现问题我就当测完了。

  第五次作业的测试是比较烦人的。首先是在写这次作业时大多数人对于多线程的运用并不是非常好导致程序运行时占用了大量的CPU资源,散热风扇狂转。除此以外很多随机的不可复现的bug也会出现,在测试上会有很大的困难。

  第六次中,指导书上明确写出了推荐使用测试线程操作的测试方法,这极大的提升了测试的效率,尤其是在测试自己的程序过程中,通过各种极限情况的测试能很好地测出来程序的bug,而且在测试对方程序时可以直接使用这些测试点。但由于本次作业的特性,我反复仔细研读了对方的程序说明文档,因为读之前我连如何输入正确指令都不知道。但我拿到的是一份大佬的作业,我拿我的测试样例他都可以很好地执行出来。

   第七次出租车作业相比之前所有作业来说在测试难度上提高了不止一个等级。指导书上虽然推荐使用程序测试但并没有提示如何去编写和测试。肉眼找bug确实时很费劲,尤其还是要紧盯着那个辣眼睛的GUI地图,真是测了几个测试点眼睛都要瞎了。测试最短路径时需要读对方的代码才能知道同距离点的选择策略,这更提升了测试难度。最后我只找到了对方程序中出租车空载运行的问题。

  线程安全相关问题的测试有些困难,我的策略是通过大量的输入用例去炸,如果出现了不符合逻辑的输出或者程序crash了,就说明对方在线程设计上存在问题。


 

心得体会:

  从设计原则上来讲,这三次作业都需要一个完备的设计。三电梯作业虽然说承接了前两次电梯作业但我之前的电梯代码写的就相对比较烂所以只能几乎推掉全部重写。就因为这个问题所以我在出租车作业的设计上非常谨慎,但还是不可避免的有一些问题。

  从线程安全上来讲,电梯作业对于这一点的要求是最高的,尤其是在我的设计中。我需要非常完备的去思考线程之间的协作和等待关系,很费脑子。第六次作业倒是因为自身特性有多种设计可以选择,而且线程之间分离度也比电梯好得多。第七次在线程安全上的问题主要是调度器与出租车之间的通信。这一问题只能通过尽可能完备的设计去解决。

posted @ 2018-05-02 09:05  NULL_233  阅读(124)  评论(0编辑  收藏  举报