经过了一学期的《软件工程》课程,通过课上的学习和项目的实战,我对软件工程的概念和方法有了深刻的认识,也在小组4个人的共同努力下,完成了一个有可能上线为许多人使用的琴房预约系统。我在这门课上投入了非常多的时间和精力,超过了之前上过的所有课程,也有许多收获,以下是我对一学期课程的总结。
一、需求工程的重要性
在以往所有的大作业中,我们开发面向的都是大作业要求、助教和老师,需求在作业要求中已经确定。不过这次大作业,需要我们对给定的题目进行调研,对需求进行建模,撰写用户故事和需求文档。我们需要决定自己需要实现的功能,最终的目标不再是简单地完成一个作业,而是要完成一个系统,一件产品,就像一个创业公司一样,不光是技术能力,更重要的是需要把握用户的需求,才能让自己的产品在市场上有竞争力,在激烈的斗争中生存下来。
当我们开发的是一项规模庞大的产品时,简单的口述甚至是文字描述难以向其他人描述清楚需求,必须通过规范的文档,才能让团队中的其他人特别是开发人员理解清楚所要实现的功能。事实上,需求文档在我们项目的开发过程中起到了很重要的指导作用,例如长期预约这个功能点,助教在项目开始并没有提到,而是通过我们对艺教中心琴房实地的调查才了解到的,最终也转化为我们的项目的一个亮点。
二、过程管理的重要性
首先,要想开发一个出色的产品,一个优秀的团队是不可或缺的。很荣幸能和三位认真负责,精益求精的同学一起合作,小组内分工明确,各司其职,氛围融洽,难忘在 608 一起度过的一个个夜晚。
其次,对代码的管理十分重要。首先是 Git 的使用,之前个人作业或者简单的小组合作作业,对代码的管理或许显得不那么重要,但在本次项目持续整个学期的开发和上万的代码量、繁多的功能点面前,就必须有规范的代码管理,否则会使开发变得极其混乱。在今后的工作当中,代码管理是100%需要做的事,感谢本次项目开发让我对代码管理,包括代码管理工具的使用得到了很大的锻炼。
除此之外,测试也是为了保证产品质量所必须花很大功夫做的事。在本次项目中,我们每个人对自己所实现的功能都做了单元测试,特别是后端,之后大家一起做了功能测试,还进行了锁的测试和性能测试。在项目开发的初期,我们并没有做很多测试,更多的关注点放在了尽快开发新功能上。随着代码量的增加,可能出现的 bug 也越来越多,调试也变得更加困难,不经过充分的测试,很难保证函数和功能的正确性。事实上,我更希望能一边开发一边写单元测试,但由于精力有限,只能先保证开发的进度,但我总是不放心,也的确出了不少 bug。我现在仍然不敢保证我们的系统 100% 不会有 bug,但测试过程中的确发现了许多问题,也都进行了修复。
还有一点是代码的可维护性,可拓展性。面对复杂多变的需求,需要从系统设计开始,到数据库的设计,到功能的实现,都要保证可维护性和可拓展性。在我们的开发过程中,为了适应新功能,数据库和接口的设计都发生了许多次变化。我们无法预知未来的所有需求,就必须要早做准备,以免大规模重构系统,损失大量时间的同时,也可能产生新的 bug。
三、个人能力的成长
- 代码能力得到巨大提升,对大型项目的开发不再感到恐惧。
- 能够熟练使用 Node.js 和 Koa,不过在项目中没有开发前端,因此前端开发的能力没有锻炼,不过也在其他三人的开发过程中学到了不少东西。
- 从持续集成实验到本项目,学会了如何编写单元测试
- Git 的使用更加熟练
- 数据库的使用
- 写各种文档的能力
- 团队合作
- 。。。。。。
最后,感谢老师一学期的指导,感谢助教的努力,感谢优秀的队友,这门课上学到的东西让我受益匪浅。