OO第一次阶段性总结
经过三次作业的历练之后终于来到了写博客这一周。回顾开学来的这一个月,令我印象最深刻也是最累的一门课就是OO了。虽然上学期学过一部分Java,但这学期开学就来的OO作业还是让我在第二周就开始熬夜了。不过虽然这几次作业相比于其他几门课在开学这一阶段的进度来说感觉很紧张,但是我从中学到的知识以及代码技巧也很多(给别人挑bug也熟练起来了(狗头))。
前三次作业的度量分析及类图
第一次作业
第二次作业
第三次作业
由上可见,三次作业中,我的代码中都存在一些较为复杂的方法,这些方法大多是整个程序核心逻辑的部分。在将来的作业中我也将考虑如何减少核心代码的耦合度。
关于Bug
自己的程序
前三次作业中,非常幸运的是我的程序都没有被挑出bug。尽管我自己也对自己的程序进行了完整且花样繁多的测试,但这并不能完全说明程序中完全不存在bug(虽然我觉得我的程序是bug-free了)。因此在这里我打算谈一谈自己debug的感受。
前几次作业当中,我在作业中花费时间最长的就是debug以及寻找潜在的bug。我测试的步骤一般按照
- 分支树
- 简单的功能测试
- 复杂一些的功能测试
- 边界测试以及暴力测试
来进行。其中一般问题出现在复杂功能测试以及边界测试中。对于复杂的功能测试,找到bug的要点是构造一些足够特殊的样例。例如第三次作业中同层捎带多次的问题。除此之外还可以构造一些较长的功能测试样例,例如让电梯反复上下行,以此检查出潜在的问题。边界测试部分让我印象深刻的是第一次作业中的表达式,虽然我已反复确认正则表达式的逻辑没有问题,但由于正则表达式一次匹配过长,导致对于很长的表达式出现爆栈情况,这一点在之后使用正则表达式过程中都有注意。
别人的程序
这三次作业我拿到的互测样例中或多或少都有一些bug。我寻找bug基本也按照了测试自己程序的步骤,但在测试过程中也会通过注意对方代码中存在的缺陷来构造测试样例。印象最深刻的是第一次作业中的我拿到的互测程序,由于其使用数组以及简单的排序来管理整个表达式,输出前将数组按指数从大到小排序,但输出时判断空多项式的逻辑有误,导致输出错误。这样的缺陷通过测试样例寻找,效率并不如直接阅读代码来得快。因此在后续测试过程中我也会仔细注意对方的代码。
代码规范真的很重要,希望大家尽量少用诸如temp1,temp2这样的变量名来编写程序,也尽量多写注释,自己看着舒服,测试的同学看着也舒服
感想
前三周的作业还是有惊无险的度过了,但我认为自己的代码仍有改进的空间。首先是可以进一步降低耦合度,其次是代码可以再写的可读性更高一些。当然这些改进措施的前提是需要有充足的时间,而不是赶ddl。虽然在研究一段指导书之后(看完大佬们讨论后)再开始编程效率更高,我仍希望以后的作业我可以尽早开始尽早完成,也希望指导书可以更加明确。