(1)总结本单元两次作业的架构设计
- 第一次作业类图
- 第二次作业类图
-
- 两次作业的实现方法差不多,第二次作业再第一次作业上增加了两种模型。
- 架构设计上主要将需要保存和处理信息的类型自定义了类,可以便利地进行操作。
- 一般来说就是按照要求的存放相应的信息,根据问题进行计算。这次的作业几乎是靠hashmap撑起来的,每加一个hashmap我都觉得很无奈,但又没有办法,必须要用hashmap进行索引。
- 信息的访存大致分为三类:
- 一、用递归的方式更新信息
- 这次的问题很多需要向上搜索父类的信息保存下来,所以我大多采用递归的方式层层保存。
- 二、涉及到循环的用floyd算法
- 在第二次作业中更新了循环和重复继承的检查
- checkForUml008:用的布尔函数检查可达性,如果index相同的横纵坐标可达,说明出现了循环.
- 三、用List和Set对于重复性元素不同的容纳方式处理重名/重复元素
(2)总结自己在四个单元中架构设计及OO方法理解的演进
- 第一单元,表达式处理。
- 这个单元主要训练的是正则表达式的运用,以及进行对面向对象思想的初步理解。在前两次作业中,我还不知道如何更好的进行更加面向对象的架构设计,感觉无法将各个类分开,写的十分杂糅。在第三次课之前,老师讲了一些方法,我的第三次作业在架构设计方面也有了进步。
- 这个单元的最后一次作业运用了单例模式和工厂模式,学习了多态。在整个OO的知识架构里,我也最喜欢“多态”,用一种方法处理不同类型的对象。
- 在这个单元里,学习了批处理数据测试的方法。
-
第二单元,多线程电梯
- 这个单元主要训练的多线程,模型也比上一个单元更加有对象的概念。在多线程的调试中,会发生很多意想不到的事情,测试起来也更加需要技巧。对于多线程之间的消息同步和加锁需要很好的考虑与设计。
- 这个单元阅读了很多多线程相关设计模式,不过为了减少错误,还是采取了比较简单的消费者生产者模式。
- 这个单元思考得比较多的还是电梯的调度算法,进行了很细节的优化。
-
第三单元,JML
- 这个单元主要训练的JML,由于环境配置的比较繁琐,然后实际运行的效果没有期望中的好,所以我对于JML的学习非常表面,现在仍然为这个单元感到遗憾。
- 这个单元在最后一次作业中运用了建造者模式,学会了很多东西。
- 这个单元思考得比较多的是图的算法以及如何高速计算缓存。
-
第四单元,UML
- 这个单元主要训练的UML,两次作业下来对StarUml的使用也挺熟悉的了。最后一个单元对面向对象的使用较之前已经熟练很多。这个单元主要是根据要求建模,所以也没有出现太多架构上的设计与思考。
(3)总结自己在四个单元中测试理解与实践的演进
- 白盒测试,四个单元递进的过程中,随着要求的提高,白盒测试耗费的时间越来越多,也可能疏忽到很多地方。第一个单元我主要检查了表达式是否写的完全正确,考虑得是否完备;第二个单元主要检查的锁的机制;第三和第四个单元主要检查的代码的细节有没有写错。
- 代码复用性,代码复用性越好检查起来越轻松。
- 代码模块化,低耦合高内聚的代码也能使检查更加高效,Junit使用的效果也会更好。
-
黑盒测试,随着实际问题的不同,黑盒测试的方式也不同。如何构造测试样例是最关键的问题。
- 第一个单元,主要是全面覆盖所有的表达式的情况。对于输入的合法性检查容易遗漏,所以既需要尽最大可能的自己想出非法数据,也要进行大规模的随即数据检测。
- 第二个单元,由于加入了多线程,所以测试的时候还加入了多线程调试的方法。并且还在程序内部加入了DEBUG模式,能够动态显示各个线程的运行阶段,以及共享数据的转移情况。
- 第三个单元,初期构造数据不全面,后期使用数据生成器构造大量随机数据进行检查。
- 第四个单元,测试方法主要是自己画图,先分类考虑特殊情况,再画复杂的图进行随机测试。
(4)总结自己的课程收获
- 这学期的OO课程设置较之前有较大变动,所以总体来说体验很好。
- 收获了很多知识:java,面向对象,设计模式
- 收获了测试手段和工具
- 收获了架构设计能力
- 收获了阅读指导书的阅读理解能力
- 收获了时间规划能力
- 收获了总结与反思能力
(5)立足于自己的体会给课程提三个具体改进建议
- 时间线的变动会给同学们带来压力,所以还是希望能够在一个单元之前设置好时间线。方便同学们自己进行时间规划,也让彼此之间压力小一点。
- 课上的PPT主要是提纲式的,在课下对我来说很难理解,希望能够易懂一点。
- hack机制一个房间7~8个人让白盒测试的压力很大,所以基本上放弃了白盒测试。我的感觉7~8个人或许还是稍稍有些多,不过可能和课程组考虑事情的角度不一样。对我来说,更加喜欢一个房间4~5个人。
感谢课程组和助教团队对这门课的付出!OO这学期的体验挺好的,希望OO能够越来越好!