BUAA_OO_2022 第四单元总结
目录
第四单元三次作业架构设计
四个单元中测试的理解和实践的演进
课程收获
三个具体的改进建议
第十三次作业
1、原始设计架构图
第一次做作业设计的时候因为理解题意不佳,因此以为只用创建这个 MyImplementation 类就足够了,因此设计的时候其非常复杂,查询功能和数据储存功能都在一个类中实现了。
因此在提交过后的晚些时候我进行了代码的重构,形成了后续使用的数据储存结构
后续改进的代码结构:
2.本次代码的核心架构:
主要通过对于element的分类进行多次分层层次读取,逐步构建起UML类图的大厦,数据储存的结构上,由最早的全部由ArrayList和HashMap储存改为对应的MyElement的子类储存,如此一来在分层次读取数据的前提下链接关系可以在创建对象时就确立,降低了链接关系的难度,同时也让查询时的结构更加清晰,查询的代码更加简单。
3.debug
由于第二次设计时,强测已经结束,得知没有考虑到类的多继承,修改后通过。
第十四次作业
1.设计架构图
总体图:
局部:类图
状态图
顺序图
2.增量设计内容:
第十四次作业主要增加了对于顺序图和类图查询,在第一次重构的基础上,很顺利地利用层次化读取构建了状态图和顺序图的构建,并且基于BFS完成了关键状态的判断。
3.debug
除了在弱测中找到的name为null的RunTime Error,未找到存在的其他bug,最终强测成功拿下
第十五次作业
1.设计架构图
大体架构几乎与第十四次设计相同,仅类图部分增加了两个类,因此只进行类图部分的展示。
2.增量设计内容:
由于本次设计的增量要求是针对UML正确性的判断指令,本次设计时不再需要大量修改原有的储存结构,只需要根据已有的储存结构再对应指令的需求进行数据结构的补充即可,架构图基本沿用第二次作业的,除了新增加的MyUmlAssociation类和MyUMLAssociationEnd类用于存放需要使用的关联关系来便于R002的判断,以及MyUmlLifeline需要增加parent属性,以便进行R006的判断。算法部分主要增加了对于R003指令的DFS函数。
四个单元的测试的理解和实践的演进
其实在每个单元都进行了总结,因此在这里大概提一下整个过程每个单元的侧重。
第一单元:主要侧重于对于边界数据的构造,换句话说是对指导书中细节的部分进行阅读并构造较为极端的数据,从测试的结果来看主要是构造出了多层次嵌套的数据
第二单元:主要侧重于压力测试,主要体现在进行资源争夺,看是否能够导致锁的bug出现,比如同时大量输入请求来看是否能造成bug和RTLE
第三单元:主要是白盒测试,利用单元测试对于简单函数进行测试,看在JML前置条件成立时是否能够满足JML的后置要求,极其压力测试,看最小生成树和最短路径的算法优化是否能够经得起检验
第四单元:由于本单元数据较难构造,因此,主要的测试都比较简单,debug主要是顺向的利用逻辑进行分析
课程收获
了解了面象对象的抽象继承多态
提升了层次化设计能力,代码重构能力
提升了代码的编写能力,每周充分的代码量给予人充分的磨砺,每周的Hack在周日给人11点带来的“惊喜”
提升了构造边界数据,压力数据,自动化测试的能力
阅读理解能力,每周一篇高信息量的指导书
......
一些心里话:
由于高工C语言编程训练的基础较为薄弱,在计组课程中我已经感受到了吃力。本学期面向对象过程的编程对于我来说,又是一个非常大的挑战。因此,在我看来,每周能够跟上大家的步伐,完完整整地把12次编程作业4次博客作业完成,就已经是让我感到有所成就。在这个过程中,从pre的磕磕绊绊了解封装继承多态,再到第一单元就开始的代码重构与层次化设计,然后到第二单元电梯的多线程编程时对锁的种种执念,再到第三单元理解JML时的抽象和由于测试疏忽在强测时得到的惨淡分数,以及第四单元debug时的小心翼翼,一次又一次的对指导书的研读,实践,重构,这些都构成了我对oo的回忆。
每周都不断挑战自己,每周都发现自己的改变与进步,蓦然回首,才发现已经走过了这么长的路,这样的经历让人感到很充实。
三个具体的改进建议
1.非常非常建议修改一下bug修复的时间,希望可以提前一点,周日强测结束后并不能立刻开始bug修复,要到下周一下午才可以感觉间隔时间有点久,而且周日晚11点才出结果,能不能让人好好睡觉了!!!
2.建议提前一点弱测的时间,周四有点晚了,感觉周三会更好,,因为往往大家周三都没有课,可以拥有更多的时间去做和debug
3.实验课提供的代码很有助于大家进行架构设计,但感觉有的实验的代码过于复杂和难以理解,引导不是很明显,比如一单元的引导就有点复杂,容易让人抓不到重点,二单元的就很不错,结构清晰。