“你帮我助”软件工程大作业心得

通过完成大作业,我对于软件工程有了更加深刻的认识。
1 分析过程
与以往的小型任务不同,当需要开发这样一款完整的系统时,既需要考虑用户层面的交互问题,又需要考虑物品的管理问题,在一开始入手时,其实我的思路是比较混乱的。这时软件工程课上的一些内容给了我启发————使用面向对象的软件方法进行建模、分析、设计、实现,可以使复杂的软件系统具有易于理解、容易开发和维护的优势。于是,我果断选择了这一思路。
首先我尝试根据用户需求,画出用例图,其中不同用例如何建立关系,是最引起我思考的,比如“普通用户管理物品”这个用例,就包含了添加、取出、查询等小用例;而“管理员批准用户的注册”,又可以向外延展出“拦截黑名单用户”这个不太经常出现的功能。通过这一番梳理,我对于软件的需求进一步明晰,对不同子任务之间的联系紧密程度也有了更新的认识。
接着我开始画用例图的顺序图,这一步把原来平铺直叙的需求描述,赋予了时间的尺度。在想象自己作为“管理员”或者“用户”使用这个软件的过程中,对系统内控制模型的设想渐渐产生。我希望能够定义使用者、物品的基本类,使用者可以根据不同使用身份来进一步泛化,并根据身份不同被赋予不同的操作,同时他们的名单应该作为一个数据库进行存储,而物品同时也应该按照类型不同,分散到不同的数据库存储。由于在系统中,这些数据库需要频繁读写,所以他们也可以被定义为类,具有读入、写入的操作。类的构想明确后,类图也就迎刃而解了。
分析阶段的最后,我整理了以下思路:
(1)使用者类:被用户类(注册、登录、管理物品的操作)和管理员类(登录、批准注册、管理类别的操作)继承,他们都具有修改数据库的权限。
(2)物品类:根据类型不同包含不同属性,无操作。
(3)数据库类:包含用户总名单、物品按类型归纳的总名单,有读、写操作。
2 设计过程
在具体编写代码的过程中,首先我感触很深的是规范编程语言格式的重要性,在老师上课强调之后,我一直在编程中小心注意,慢慢发现自己写出了比较美观的代码,还是很有成就感的。
对于设计这个软件,困扰我的技术问题有二:一是如何实现数据库,二是物品如何被类型“提纲挈领”。于是我在GitHub和csdn上进行大量搜索,最后发现对于问题一,表格是一个很好的数据库结构,并且它和python之间的接口也是简单清晰的,只需要小心一些格式问题,就可以成功完成读写;而对于问题二,我发现python中“字典”这一种非常特殊的数据类型,就是根据key+value来定义的,可以充分解决用类型索引物品的要求。有了这两点技术支持,我的代码编写最终比较顺利的完工了。
3 实现过程
在写完代码后下一步最重要的就是测试了。首先我对于每个模块进行了黑盒测试,选定有效和无效的等价类作为输入,观察是否出现理想的输出。然后我在模块内选取了部分重要代码块做白盒测试。经过两步测试,发现了程序中隐藏的一些错误。
4 反思和总结
其实细数下来,这款软件的开发过程还是有很多不完善之处的:
(1)“使用者具有修改数据库权限”太过于笼统,其实不同使用者权限是不同的,所以如果直接把整个数据库类的属性作为信息传给使用者,是有悖于信息隐藏原则的。
(2) 数据库类的设计上,用户库和物品库属于弱关联,放在一个类里对于软件的层次架构并没有益处,所以最好还是分开。
(3) GUI界面由于患上新冠的原因,没有来得及开发,自然也是比较遗憾的。
(4) 测试上,由于只有自己作为开发者的测试,所以涵盖的可能出错的情况自然要少一些,如果能够邀请其他人来测试效果更佳。
但尽管如此,我仍然对这次大作业倾注了大量的精力,投入了大量的思考,而它反馈给我的价值自然也是不言而喻的,我觉得自己不像原来般只是考虑软件的功能,而是真的有管理一个软件从构想到实现到修正到维护的感觉了。我也希望自己在将来,无论遇到复杂还是简单的编程任务,都能够保持一个软件开发者般的思考;也希望这种思考可以进入我的生活中,对其他方面带去诸多启发。

posted @ 2022-12-27 23:00  云飞12138  阅读(63)  评论(0)    收藏  举报