提问回顾与个人总结
项目 | 内容 |
---|---|
所属课程 | 2019春季计算机学院软件工程(任健)(北京航空航天大学) |
作业要求 | 这里 |
课程目标 | 提升自己的编程水平,拿一个合适的分数 |
这个作业在哪个具体方面帮助我实现目标 | 学期总结回顾 |
提问回顾与个人总结
提问回顾
关于结对编程和代码复审
我觉得结对编程和代码复审各有其适用范围。就我们的项目来说,大部分工作难度不算大,因此通过 code review 的方式效率更高。我们的代码大部分没有太大问题,而且遵循了制定的命名规范与注释规范,互相看起来也比较快。我觉得在规范完整,实现逻辑不复杂(或者有较完善的第三方库使用),不同人的代码耦合度较低时,代码复审要更高效一点。
就我们项目来说,项目中前端部分我不是很了解,后端部分我负责的难点主要有:1. 访问优化,攻击防护。这玩意主要是配置缓存,挂CDN,调参设置过期时间等,难度主要不在coding上,用的都是现成的服务。2. 科学排名算法,这个排名算法有书可以用来参考,python也有功能强大的numpy库,实现起来也不是很复杂,主要难点是搞懂算法的数学原理。因此在项目开发中我们没有进行结对编程,或许是因为结对编程不适合我们项目的后端开发。
关于系统工程方法与软件开发流程
我觉得软件开发流程是一种系统工程。有些开发流程,比如大型软件的开发,包括了系统工程方法的大部分流程,比如需求设计,开发流程,测试回归,售后服务等等,而我们的敏捷开发更像一种精简后的系统工程方法,主要将一些步骤并行化,减少了售后服务(将其调整到下一阶段的需求设计中)等。系统工程方法是一套完整的方法,因此它不可避免地有过时,臃肿的部分,敏捷开发则是在上面进行了改进,适合小项目地进行。
目标人群与大胆做减法
经过这三个阶段的软件开发,我觉得做减法是十分必要的。有些功能在提出是实现难度是被错误估计的,真正实现中才会发现这功能怎么这么复杂,影响到了整体的进度。这些功能如果不重要的话就直接砍掉,或者找个效果差不多的替代方案换掉,节省时间又节省精力。
关于创新
没啥变化,pass
关于团队
听说隔壁组好像吵了一架(。我们组其实还好,转会前后的成员都没有特别摸鱼的,大家都能在规定的时间里面把工作完成的差不多,交流上也比较顺畅,有什么问题基本马上就解决了。我觉得我们团队还是比较不错的,但是真的遇到假团队了还是趁早走吧,毕竟自己开心最重要。
学习的知识点
需求
“没必要把功能需求搞得清清楚楚”
首先,总有一些奇奇怪怪的用户,比如来捣乱输xss的,比如来删你数据库的,比如来打你服务器的。需求不仅仅是有正面的,还要有各种非法需求,这种东西在项目开始时其实是想不全的。另外,在真正实现中,有些功能,因为太难,太复杂,总是要被砍掉的。硬啃这些功能的话会严重影响整体进度,不如早点放弃。我觉得在需求阶段,对项目有一个整体的功能方向就可以了,不用特别细化,在实现过程中及时修改就行了。
设计
“设计的可扩展性”
在本项目中我除了把js,css,图片换成国内源外,实际上没有管前端的任何东西,所以对于UI这块不了解,所以主要讲讲后端的设计。我觉得后端设计中最主要的还是扩展性。实际上后端代码中,与设计有关的主要还是数据库。对于数据库,虽然Django的migrate还算好用,但是有时还是要处理冲突。此外,数据库设计时要充分考虑到将来新加入的功能,预留几个字段。因此考虑好数据库预留的扩展性,减少不必要的数据库migrate是十分必要的,否则光是处理冲突,洗数据就很令人绝望,加功能,字段也不方便。
实现
“制定详细的规范并遵守”
比如我们的项目,有一个比较完整的命名规范,注释规范,返回值规范。这样有几个好处:1. 写代码时减少出错,python是动态类型语言,有时手误打错变量也没有提示,这时有一个命名规范就可以在一定程度上避免。(当然python的typehinting也能帮助IDE进行提示)2. 便于code review。有了注释与命名规范,实际上不同开发者之间的差别主要就是代码逻辑习惯了。再配合上注释规范,对于代码的说明,实际上codereview效率大幅提升。3. 改bug方便。既然我们开发者之间都能互相看懂对方的代码,有bug时谁看到就直接修了,不需要由这段代码的实际开发者来修,提升了bug的解决速度。
测试
“让专职测试搞测试”
我们的测试还是十分敬业的,通过捣鼓一些我根本搞不懂的东西,达到了十分高的效率。我觉得测试还是应该交给专职的测试人员做,开发在进行简单的功能性测试之后,让测试做完整的测试,这样效率比较高。
发布
“差异化竞争”
因为有友商和我们做同一个项目,因此我觉得项目发布的重点不是你有多少功能,而是你比友商多多少功能,功能的实现好坏倒不是很必要。比如我们使用了科学的排名算法而友商仅仅是算数平均,可是用户实际上并不会关心你课程排名到底有多么优秀,他只要能看到有个排名表明这课好不好就行了。我们比友商多了一个好记的域名,更快的加载速度,多了子评论与评论筛选,多了好看适配性强的UI,那就抓住这几点进行差异化竞争,宣传自己的优势就行了。
维护
“隐蔽维护,快速解决”
项目维护十分令人头大,主要是因为有人喜欢打我们的网站。我觉得维护的隐蔽性比较重要,最好别人发现不了你在维护。比如,能不停机维护就不要停机,能在半夜维护就不要中午维护,能事先写好脚本,测试好,10分钟搞完就不要在线上现改,搞几个小时。比如我们在处理攻击,版本迭代,改进CDN配置时,都是尽可能不停机维护的,这样能尽可能的防止用户损失。同样的,如果1天能解决这个问题,拖到两天的话就会有用户流失。
个人理解
总体来说,我主要的心得还是要注重一个快乐。生活中已经有许多烦心事了,在一个快乐的团队快乐的写代码就更重要了。
结对编程中我们的项目总体来说实现的还凑合,算法上我针对简单的那个写了一个比较优秀的算法,复杂的那个就无能为力了,而且我还写了一个十分低级的BUG。我觉得我在代码能力上还是比较菜的,在结对编程中看到了不小的差距。
我团队项目很幸运地分到了一个比较好的团队中。队友们能力都比较强,而且交流起来也比较顺畅,我觉得整个开发流程的合作都十分快乐。首先,我们都很信任对方,像我就把前端开发完全交给前端组了,前端也并没有过问后端的具体技术细节,互相不影响,可以按照自己的喜好进行开发。第二,队友们交流能力都很强,遇到接口问题时,前端后端开发很快就能明白对方要什么东西,改起来很快,根本没有交流不畅的问题。此外,大家也会主动完成未完成的任务,不需要PM过多催促。总的来说,我觉得在这个团队中工作十分愉快,写代码也有动力,快乐编程,互相学习。
当然,在团队项目中我也认识到了自己许多的不足,比如服务器多次被攻击,代码中关键信息的隐藏,前几次部署总是要处理migrations等。我觉得我的技术水平还是略有不足的,还是在实践中学习,提升自己的水平吧。