UML单元总结 && 课程总结

UML单元总结 && 课程总结

本单元两次作业的架构设计

第一次构架

做第一次UML单元的作业的时候,原本打算用树结构存全部数据(效仿starUML的结构),但发现如果全部采用树结构,虽然所有UmlElement都可以很好的容纳并且很有扩展性,但是查询指令的实现就比较麻烦。

最后的架构是用一个HashMap<String, Object> idMap将所有UmlElement的id以及对象一一对应。需要查询的部分通过自己封装一些对象间关系(ClassModel, OperationModel)来实现。

第二次构架

第二次构架在第一次的基础上,新增了顺序图,状态图的解析以及类图的检查。我复用了上次的思想,将顺序图、状态图、类图的解析独立,分别实现后再组合成GeneralInteraction。

自己在四个单元中架构设计及OO方法理解的演进

经历了四个单元的OOP课程,我对构架的理解也螺旋上升了一点吧。

表达式单元:从C到JAVA

表达式单元是我第一次用JAVA这样的面向对象语言编写代码,对我最大的收获就是实践出了一些OOP的理解。对问题的分析开始有了一种分析=>分解=>分治的思维模式。虽然在大一下学数据结构的时候也经常把需求用C里的结构体封装分治,但是与那个不同的是,数据结构课的行为仍然还是过程向的,但表达式单元里,无论是对表达式的求导还是转为字符串输出,都把代码的具体行为进一步封装给了对象。

电梯单元:并发程序设计与架构平衡

电梯单元让我印象最深的就是难以处理的并发性bug以及数次扩展需求的重构地狱。其实从表达式单元的作业中就已经体现出了这门课对构架平衡的训练,一个好的架构既要保证结构不至于太过复杂也要兼顾一定的扩展性,对架构设计的平衡点的寻找就是这个单元给我最大的收获。

规格单元和UML单元:协作开发

这两个单元的作业感觉在培养我们在软件工程这门进阶课上的协作能力。巩固前面的OOP理解+接触一些辅助编程和设计的描述性语言是我对这两个单元的理解。无论是JML单元还是UML单元,比起作业内容本身,我们更要学会怎么样去使用这些辅助工具链来帮助我们更好的设计和描述设计。

自己在四个单元中测试理解与实践的演进

整个OO课程,关于测试以及互测的实践我经历了以下四个阶段

脑构数据+手动测试

这是第一次作业时候我的方法,自己想一些边界数据和特殊数据然后在互测的时候一个个打开Roommate的工程手动测试,应该是个山顶洞人的水平吧。

复合数据+自动测试脚本

随着OS课程的继续学习,发现我完全可以通过打包JAR包+shell编程的方式自动测试其他人的程序。而我使用的测试数据也进行了升级,开始自己写一些数据生成器,搭配上自己构造的数据组成了测试集,事实证明两个方面的数据缺一不可,都能够发现一些问题。

这个方法也一直用到现在,属于上世纪50年代水平吧。

借用工具进行单元测试

这是课程后期的要求。我使用的频率相当低,可能也是因为我们的作业代码量不大,不需要特别的单元测试的缘故。具体操作就是通过Junit或者JMLUnitNG等单元测试工具对部分代码进行测试,实际使用过程发现有测试数据集仍然需要自行构造、JMLUnitNG的测试甚至不满足JML规格定义的Post-condition等情况,体验不佳。

自己的课程收获

今年的课程属于改革后的第一届,我个人感觉改革的效果相当不错,至少没有体验到“传说中的北航神坑课”,所以也很感谢为此努力的助教和老师。

这一学期的面向对象课程教给我最重要的就是计算机从业人员的生态:自行开拓未知领域。我感觉在学习计算机学科中的任何一个部分,特别经典的步骤就是先搞定”依赖“,再”安装“。比如寒假的时候,为了学习Git的使用,我不得不学习一下Linux基础,再学Git本身;为了学习并发程序设计,要先学会并发的本质(指令的原子性、时钟中断)等内容。这培养了我的查询整理资料、自学能力。

然后,就是一些比较常见的OOP的理解和架构能力,以及相关工具链的使用。

给程提三个具体改进建议

1. 理论课内容改进

现在理论课给我的感觉就是内容安排很奇妙,对我们需要掌握的知识会默认我们已经自学过,对知识的深入解释又没有,反而是在反复地把同一个概念换不同的方法说一遍又一遍。

这就导致一个很奇特的现象,不懂的人完全听不懂,懂的人听了又没有收获。真心希望课程组能够对理论课的内容再精雕细琢一些,让这90分钟不至于白白浪费。

2. 上机实验反馈结果

其实对于上机实验这个环节我觉得还不错,可以验收学习成果。

但是上机的形式(自由交流)和题目(简单开放)却让我有种是在课堂上完成练习的感觉,最重要的是你完全不知道你练习的结果更不知道你是否有一些致命的丞需改正的错误。

希望以后的上机实验能有一个反馈结果或者是下发标答的环节。

3. 提高互测环节的吸引力

说来惭愧,电梯和JML图结构的作业互测我基本上没有投入太多精力,因为前几次互测之后我发现,在互测这个环节投入产出比很低(单从对最后分数的影响来看),身边的同学大部分也有这么一个看法:互测有点太花时间了。

可以稍微改变一下互测的形式或者提高互测分占比来提高一下互测的性价比。

posted @ 2019-06-24 18:26 ChenL 阅读(...) 评论(...) 编辑 收藏