OO_Unit2_Review
一.作业结构的结构度量及BUG分析
1.work1
UML
方法复杂度(1)
方法复杂度(2)
类复杂度
2.work2
UML
方法复杂度(1)
方法复杂度(2)
类复杂度
3.work3
UML
方法复杂度(1)
方法复杂度(2)
方法复杂度(3)
方法复杂度(4)
4.BUG分析
WORK1:本次作业忘记考虑了接口的多继承问题,修改方式为新增了BFS算法来处理接口的情况。
WORK2:本次作业忘记某些对NULL情况的处理,修改方式为在BUG出添加判断来处理。
WORK3:本次作业忘记某些对NULL情况的处理,修改方式为在BUG出添加判断来处理。
二.四个单元架构设计及对 OO 的理解
第一个单元第一次接触较大代码量的小工程,彼时也刚刚认识JAVA,我对于OO的概念还不是非常理解,那时写代码的主要目的还是为了完成而完成,对一些类的构造属于添油加醋系列,遇到麻烦了然后加一个类,遇到困难了添一个类方法,缺少具有前瞻性的科学架构,导致完成一次作业后不仅代码的结构臃肿混乱,BUG也不少。不过这个问题在我第一单元的三次作业中也在慢慢改善,尤其是第三次作业,我对代码的结构进行了大幅度的优化,使得类与类的分工更加明晰,结构更加科学。
第二个单元主要学习的内容是多线程,此时的我已经初步具备了OO的思想,所以从第一次作业开始就对结构进行了认真的设计,使得代码的延展性大大提高,这在后面两次作业中发挥很重要的作用。
第三个单元是对JML的学习,说实话,我认为这个单元更像是对类方法的填空题,与OO关系不大。
第四个单元是对UML的拆分学习,通过对源代码的补全,我初步理解了UML的各种结构,对OO可以说是侧面补益。
三.四个单元中测试理解与实践的演进
在OO课中,测试是很重要的一环(毕竟黑箱测试实在过于恶心),在第一单元中,我主要还是采取了手动测试的原始方法,这个方法有好处有坏处,好处就是对特殊点的测试更加有针对性,效率更高,坏处就是人的思维毕竟具有局限性,很多时候就遗漏了对某些思维盲区的关注,第二个单元由于数据测试的特殊性,我第一次开始尝试自动化测试,包括对拍器的使用,效果不错,帮我找到了不少的BUG。第三单元个人认为测试点不多,更多的是大数据对CPU的负荷,这个更多是通过肉眼调试改进,而不是测试。第四单元则主要是手动测试,因为这个单元逻辑简单,但是有很多思维盲角,比如对NULL的讨论,因此针对性更强的手动测试我认为效率更高。
四.课程收获
OO可以说是在大二下学期我从中学到东西最多的一门课,我认为OO对我的裨益不仅仅是面向对象编程的思想,更多的是代码量对我工程能力的训练,大一基础的C语言不必多说,大二上的数据结构也多是才用较为简单的PYTHON,对思维的训练多过对工程能力的训练,而OO则不然,或许每次作业中单独拆出一个类方法,它的实现并不难,但是一旦整合到一起,复杂度便猛然上升,然后OO类似考试时的黑箱测试更是酸爽,逼着我们将代码优化到一定程度。也许是我更加喜欢这种考验工程能力的课程,我认为比起晦涩抽象的OS,我更加喜欢OO这门课一些。
五.建议建议建议建议建议建议!!!!!!!!!!!!!!
我有一个非常想提出来的建议,在做第三单元作业的时候,第一次作业上没有明确指出提交文件不需要包含课程组提供的官方接口,又由于这单元作业的同质化,对学生来说,指导书可以忽略,基本上只需要照着JML的注释就可以完成作业,导致我后面两次作业完全没看过指导书,所以我在后面两次作业中将官方接口一起提交,这让我喜提助教的作弊警告一份,直至现在仍然没有关于这件事的回复。希望课程组在下一届的指导书上,在第三单元的第一次作业就明确标明提交形式,而且要反复强调,甚至最好给出提交样例。不要让发生在我身上的悲剧再次在下一届身上重演。
六.线上学习的体会
我个人还是非常喜欢线上学习的节奏的,可能是因为习惯了单独学习,所以其实线上学习对我的影响并不大。