软件工程课后体会
软件工程课让我学到了很多关于软件工程的知识与做实际项目产品的经验,这些是我之前写程序从来没有考虑过的。
首先是测试。我们之前写代码只是写一个小作业,写的就是在极少一部分我能想到的测试案例上是正确的代码,没有用系统化的测试方案,案例的完整性也不好,就算是可以通过助教的所有测试案例也无法说明程序十分健壮。但是我们在实际项目中需要做的是产品,产品是要给用户用的,如果经常出错,用户体验会很差,这样的软件是十分糟糕的,而且很难知道各种用户的操作以及在实际生产环境中软件会遇到什么样的情况,因此我们必须使用系统化的测试方法,首先要设计完整的测试用例,对程序的每个分支都要覆盖测试,然后每写完一个单元都要对这个单元进行测试,因为测试一个单元,调试bug比较简单,如果这个bug一直存在,直到最后在多个单元合成一个系统的时出现,那么要想去掉这个bug就需要付出更多的工夫,因此单元测试是十分重要的,在单元测试都没问题后,这些单元可以作为模块组成一个系统,然后就可以进行系统测试了。经过这些完整的测试之后的代码虽然不能保证完全没有bug,但是出bug的概率很小,可以作为好的软件发布。
第二是团队开发的管理。一个大型软件不可能只由一个人开发,需要一个团队,一个好的团队管理是团队开发成功的关键。首先是团队的分工,一个软件开发项目有很多任务,在每次迭代中都有新的需求,所以可以将每个任务分给不同的人开发,任务的分发要尽量使每个任务互相之间依赖不强,一般只有固定接口的依赖,这样在每个程序员在开发的时候就可以不考虑别人的实现,只调用别人的接口,这样可以是多人开发效率更高。同时团队内部需要定期开会,讨论故事的完成情况以及新的需求,还要交流开发过程中的困难,一起解决。在不开会的时候需要一个项目管理工具比如tower,来分配任务,领取任务和完成任务并且记录下开发的全过程。代码提交则需要使用版本控制系统比如Github。
第三是软件的发布。软件从开发debug完成之后到最后发布让用户使用需要经历一系列过程。包括部署,文档书写,用户手册书写等等,这些我们在之前写小程序的时候是完全不需要考虑的,但是在实际开发并且发布让用户使用的并须得经历这些步骤,否则软件是没有人会用的。