301
社区成员
发帖
与我相关
我的任务
分享正向建模与开发通常指的是从需求阶段开始,经过设计、开发和部署等步骤,逐步构建软件系统或应用程序的过程。这种方法通常被视为传统的软件开发方法。
需求收集和分析:在正向建模过程中,首先要对系统或应用程序的需求进行收集和分析。这包括与利益相关者交流,理解所需的功能和业务流程等。在本单元的作业中,需求是开发一个图书管理系统,并需要支持一系列比如结束,还书,预定,续借等操作,并且给出了这一系列行为所应有的规范。在完成此方面的工作时,我们通常通过仔细阅读指导书与给出的样例来明确需求。
设计:在收集并明确需求之后,团队开始进行系统设计。这包括创建架构图、数据库设计、系统接口设计等。在本单元的实现中,当明确了需求后,可以针对每一项任务列出执行的路径和所需要使用的参数和方法,之后再根据所有需求的情况给出所需要的类,以及类中应该具备的属性与方法,和每个方法中应当执行的任务。此版块最难的点是考虑采用什么样的数据结构,这不仅要考虑目前的需求,也要考虑未来可能出现的新增需求以及目前需求的修改,尽量要做到在改变时便捷灵活,以此减少bug
开发:进行代码编写
测试:对代码的正确性进行测试,可以自己编写数据点也可以使用评测机。在此特地感谢DPOJ的开发团队,在本学期的四个单元中,他们的评测机为我解决了很多问题,在最后一单元的博客中,我在此向他们表达我由衷的感谢。
以下是本单元最终的架构设计图

这是本单元图书的状态转移图

在本单元的作业中,我选择先设计类图,再去编写代码,如果在编写代码的过程中发现问题,就对类图进行小幅度的调整。总之,类图和最终代码具有严格的对应关系
不知不觉,四个单元的代码开发已经完成了,在四个单元的锻炼中,我的架构设计能力也获得了显著的提升。遥想本学期初,上来就开始第一单元时,我对架构设计还没有一套明确的思维,没有自己的理解,所以整个开发过程显得凌乱不堪。在第一单元前两次作业中,我基本在作业发布后,要投入近三天的时间进行代码编写,以及bug修复,由于没有明确的架构设计,我的整个代码显得非常的乱,随处可见一些我为了修复特定bug而打上的补丁。但好在第一单元不同作业之间任务关联性没有那么强,所以只要上一次作业能正常运行,就不会由于架构问题影响下一次代码的编写,所以第一单元虽然磕磕绊绊也是过来了。
在第二单元中,也是多线程单元,我吸取了上一单元的教训,在编写代码前对任务执行流程进行了模拟,但由于经验不足,在代码编写过程中发现了规划架构有许多不合理的地方,所以不得不做出一些修改,再加上多线程难度较大,所以我的最终代码依然是一个“黑箱”。即给出输入,有输出,但其中怎么运行的你也摸不透,但是比第一单元有了一定的改善
在第三单元中,JML单元,由于往届说此单元比较简单,我也是轻敌了,没有进行架构设计直接进行代码编写,这样直接后果就是强测一次75,一次80。所以我在第三单元第三次作业中进行架构规划,最后强测没出问题。
到了第四单元,基本已经熟练掌握架构的构建。分析需求->编写各需求执行路径->设计整体数据结构->设计各类的属性与方法->编写代码->测试。当然,结果也非常不错,强测全部满分。
在本学期OO学期中,我并没有编写评测机进行自动化测试。我主要的自主测试手段就是通过对需求分析编写数据点对BUG进行精准打击。以及第三单元设计的junit测试,不过junit测试由于编写过程繁琐,成本过高,所以在第四单元我并没有使用这项技术。当然,在编写数据后,使用junit观察覆盖率也是评估数据点缺陷的的有效方法,不过我从未尝试过。
到此,OO课基本也结束了。回看学期初,不知不觉间,我的面向对象编程水平乃至我的代码编写水平都有了巨大提升。OO课的收获不仅在于面向对象这门课的本身,也在与我对复杂工程代码有了更强的分析与设计能力。虽然在第三单元有马失前蹄的懊恼,但总体的学习体验还是不错的,在我心目中OO和CO是我大学入学以来收获最多的两门课。感谢助教在课程群里为我们认真答疑,同时也感谢无私分享的同学们。OO,再见!