301
社区成员
发帖
与我相关
我的任务
分享正向建模开发是指从需求分析开始,按照系统开发的各个阶段顺序(如设计、实现、测试等)逐步进行系统开发的过程。出正向建模开发之外,还有敏捷开发、模型驱动开发等开发放方法。与这些方法相比正向建模开发有系统性强、文档清晰、风险可控等优点。这一点在我们的作业中夜有所体现。在第一次作业中,通过绘制 UML 类图,我们可以很清晰的规划每一个类的功能与职责,比较易于做到设计与实现相分离。由于清晰并且有据可查的设计,之后的迭代的设计与编码也将变得更加容易。此外 UML 状态图与 UML 顺序图可以补充类图中没有涉及到的设计内容,使自己的设计更加完整。

这一单元作业的架构较为简单,主要类的功能可以望文生义。
在第一次单元中,由于并不熟悉面向对象的设计模式,我的的设计更多的考虑了实现的难度。由于没有一个大局观,导致在迭代时需要进行较大规模的重构。在第二单元的作业中,我的设计开始更多的考虑可扩展性。第三单元由于给出了JML规格,因此设计程序时更多的考虑了时间复杂度的正确性。第四单元的设计自由度较大,我的设计则是从全局出发,在易于迭代与易于实现之间寻找一个平衡点。总的来说,我在设计时考虑的内容逐渐从实现复杂度到迭代复杂度,并在两者之间达到一个平衡。
在第一单元的时候,我尝试搭建评测机来排查程序中的问题。但是由于随机数代入验证可能会造成结果溢出或结果不变,导致正确性判断的强度存在问题。此外,由于 python 对于一些表达式的形式不支持,导致数据生成存在一定的强度妥协。我的评测机也因而没能测出我程序中的潜在 bug。
在接下来的第二单元中,我吸取了第一单元的教训,不再搭建评测机,而是尝试通过代码走查的方式排查 bug。通过反复阅读代码的逻辑,我可以保证程序设计的实现,但是却难以找出一些小的笔误(比如错误的调用了名称相近的方法等),而这些小错误大部分可以在中测发现。
第三单元与第四单元的测试则结合了评测机与走查两种方式。通过认真的编码与走查给程序的质量加第一道保障,再通过评测机验证加第二道保障。在第三单元中,我接触到了 Junit 测试,但由于 Junit 的测试效率并不比之前的方法更高,因此我并没有大量的使用。
经过了一个学期的 OO 课程学习,我了解面向对象的设计模式,掌握了一些多线程编程方法以及多线程特有的bug。我对测试方法也有了新的认识,不再单纯的依赖评测机的黑盒测试,而是通过在代码走查来扩大测试的覆盖面与可靠性。我对程序设计的重要性也有了更深的认识。OO的作业量虽然比较大,但这也促使着我去改变设计、编程与测试的思路,更深刻的理解 OO 的编程思想。