本文章主要对此次软工三课程项目("THU琴房预约")进行总结。
文章分为以下部分:
- 个人分工
- 编程总结
- 团队合作
- 对软件工程的思考
- 个人总结
- 课程建议
- 博客地址汇总
1. 个人分工
在此次项目中,我主要负责以下模块:
- 后端:数据库接口
- web管理端前端:琴房管理、公告管理、长期预约、检票等
- 测试:压力测试、数据库接口测试
- 部署:docker部署
2. 编程总结
编程经验
这次课程大作业中,对于工程的理解更加深刻。主要分为以下方面:
- 软件系统架构设计很重要:我们小组之前都没有接触过小程序的开发,所以一开始做系统调研的时候下了不少功夫。同样,因为是第一次,我们也没有被“历史包袱”所累。比如,最开始我们在选择web框架的时候,没有选择大家熟悉的django,而是使用koa。事实证明,koa丰富的中间件以及node的高性能为开发和项目性能提升带来了很多好处。
- 想清楚再动手:举个例子,比如数据库的设计。在项目初期,我负责数据库接口,后来发现设计的数据表有些跟不上需求的扩增。于是在开始开发几天后,小组成员集中开会,讨论三个小时之后,设定出了最终的数据库设计方案。实际上这个方案一直被我们用到最后,并且对于需求扩容的适应性非常好。
写代码
代码管理真的很重要,尤其是这次代码量已经超过了小组任何一个成员的可控范围。对于这次写代码的经验有以下感受:
一定要使用代码管理工具(比如git):在本学期同期的另外一门课上,我们三个人组队,本来是个非常简单的小项目,我们却因为多个同时改一个文件,手动merge浪费了很多时间,本来想省时却走了弯路。
代码审查是个好方法:在软工课上,练习过一次代码走查,这次我们小组也进行了代码审查,发现了几个写的不规范的地方,比如js使用“==”。而且这也是一次非常好的学习优秀代码的机会。
测试先行:我们是到了项目中期才开始着手写测试的,写测试之后才深刻感受到测试省去了很多麻烦,比如每次新增功能之后,不用繁琐的将之前的功能重新测试一遍。
3. 团队合作
非常感谢给力的队友和团队。这次团队项目让我对于软工团队有了这些认识:
- 系统架构一起想:群策群力才能想出好的设计方案。
- 分工明确,兼顾所长:非常感谢团队中的女生,挽救了三个工科男的审美。
- 集中开发,结对编程:我们每周会有2-3次的集中开发,晚上六点开始平均持续大概8小时。因为我们对于人员分工是按照前后端分工,而不是按照功能划分,所以在处理前后端接口的时候,需要大家相互配合。
4. 对软件工程的思考
规范操作才有好项目
- 工程开发的流程不可省略:需求分析、原型设计、迭代开发、测试、优化。这些步骤是绝对不能省略的。而且规范的按照开发流程来做,对于项目的进展非常有帮助。
- 代码管理规范:“先开分支再push”,“及时commit”。举个例子,由此自己写了管理端前端的几个路由(大概1.5k行),手残reset代码,结果导致全部被覆盖。不过还好,之前把代码加到了暂存区,救了回来。
- 接口规范性:在数据库测试的过程中深刻体会到了这一点,因为接口文档没有及时更新,导致测试用例没过,耽误了一些时间,直到沟通之后才发现。
明确需求才有好项目
这个项目确实超过了我的掌控范围,需求点非常零散并且繁杂。直到开发过程开始,才体会到需求分析的必要和重要性。需求分析相当于是个任务清单,是我们没有遗漏功能;同时,需求分析也可以做估算,估计每个模块的工作量。最开始明确需求还可以避免多次重构,随着需求的扩展,开始的解决方法会变得不适用,这时候就需要重构。如果最开始就分析清楚,或者预留解决方案就会好很多,比如数据库设计冗余字段等。
5. 个人总结
- 再次感谢给力队友。
- 踩坑的方式对于理解一项技术很重要。
- 以工程视角去思考设计项目,开始设计时就考虑到性能和代码实现。
- 有幸成为全栈工程师。
6. 课程建议
- 可以要求学长介绍一些代码经验:比如设计冗余字段等
- 在介绍往期项目的时候,介绍一些数据库的设计的思路,给同学启发
- 测试课程提前讲