提问回顾与个人总结
一、对以往疑问新的思考
1、第四章 -- 结对编程
关于结对编程,一开始我对于两个人坐在一台电脑面前进行编程的做法感到不可思议,当时觉得虽然这有一定的益处,但是效率未免过于低下了,然而在真正的和自己的伙伴进行过一次结对编程以后,才真实的了解到结对编程的益处,解对编程我们可以更块的交流思想,更快的发现并解决掉代码中的BUG,表面上两个人在做一件事但是整体上的效率以及整个工程的质量都得到了提高,我和队友在结队编程中也取得了不错的成绩。
2、第三章 -- 选哪一种医生
原文如下:
a)刚刚在书上看到你的病例,开刀的过程中非常认真严谨,时不时还要停下来翻书看看…
b)富有创新意识,开刀时突然想到一个新技术、新的刀法,然后马上在你身上试验……
c)已经处理过很多类似的病例,可以一边给你开刀,一边和护士聊天说昨天晚上的《非诚勿扰》花絮……
d)此医生无正式文凭或正式医院的认证,但是号称有秘方,可治百病。
在这个问题上,最初我觉得a的做法是最符合我们程序员在实际工程项目中的状态的,毕竟我们不同于医生,我们要应对各种各样的需求变化,这一点在我软工的实践中也得到了证实,在gamma阶段我们和一个大学的数学系进行了项目合作,在合作的过程中我就经常接受到了他们需求的变化,这就需要我们立刻区翻看新的“案例“,然后立刻投入使用,在实践的过程中我们往往很难先身经百战然后进行工作。
3、第十章 -- 典型用户
这个问题下我就不列举原文了,只是在读完这一章节以后比较好奇,我们在搜集完全部的典型用户的特征以后,从收益投入比最大的角度来看,我们是否可以放弃一小部分十分不同于大众的典型用户群体呢?
在软件工程的实践中,我发现用户们的需求确实各不相同,我们需要收集并统计,包括对页面的美观度啊,布局啊,这些不同的用户会有较大差异的喜好,为此我们需要尽可能的满足大多数人的个人喜好,以保证大多数人的用户体验。
4、第十六章 -- 大家都喜欢创新
原文中提到,在算法和数据库领域,创新的想法一开始往往不被接受 ,以及面对自己的创新不被接受的时候要做到So, resumitt! PLEASE!!! ,这个问题在我当时觉得,创新虽然是好事,然而我们需要考虑创新的代价,以及是否时代能够平稳的接受这一创新。然而在自己这半年的软工和科研实践中,我逐渐意识到坚持并挖掘一件事物,提出自己创新点的乐趣以及成就感,我们不能轻易放弃自己的想法,哪怕不被接受,我们也要坚持自己的研究,在合适的时间去为社会做出自己的贡献。
5、第十七章 -- 猪、鸡和鹦鹉的故事
原文内容:加入一个团队时,要弄清楚自己在团队中投入的级别是什么,别人的期望值是什么。不要拿着卖白菜的钱,操那卖白粉的心——太不值得。
这个问题我在软件工程的实践中得到了最真实的感受,在一个团队作业中,我们每个人都有自己的分工,我们首先要做到的就是完成并确定自己负责模块功能的正确性。然后再去考虑给予队友适当帮助,在自己任务未完成之前不要过于操心别人的进度,着眼于自己的任务,这样才最有利于团队项目的稳步推进。
二、新的问题
团队开发过程中,由于不同的功能模块划分给了不同的人,那这样的话如何去应对临时人员变动所带来的停滞期呢?如何合理的分配才能使团队每一个功能模块都能承受住人员突然临时意外情况暂时退出的影响呢?
三、知识点
需求阶段
用户需求是我们开发者要考虑的首要因素
在这次的软件工程团队作业中,我们小组开发的是一个面向校园学生的小程序,这样的话在校学生所提出的需求i即是我们开发的唯一风向标,在我们最初的开发中也因为用户需求调研不足,而在用户界面以及一些能提升使用体验的细节上关注不够,而在第二阶段对这些需求进行分析并实现以后,就得到了较好的反响。
设计阶段
良好的设计是保证工程质量的基石
团队开发不同于个人开发我们在开始的时候必须先通过对用户需求的分析确定我们此次开发任务的大方向,然后根据每个人分配的任务对每个页面以及页面中的代码结构进行设计,对接口规范进行设计,合理且完善的设计工作能够极大的提高我们在实际开发时的效率,这也是团队开发过程中必不可少的一步。
实现阶段
善用版本管理工具可以较好的提高并行开发的效率
在开发的前期,因为对github的不熟悉我们经常出现分支丢失的问题,后期熟练掌握以后则整个开发流程得到了较快的提高,github成为了我们较好的沟通工具,新的接口,新的需求我们都会先撰写好文档然后上传并提醒相应人员查收,这较好的提高了我们的工作效率。熟悉版本工具的使用将会为团队开发提供较好的便利,也能极大的提高整个团队的效率。
测试阶段
代码的覆盖性测试是保证功能正确性的必不可少的基础
我们不能仅仅通过简单的操作几下来验证我们代码的正确性,撰写测试样例对每一行的代码进行尽可能全面的覆盖性测试是非常非常非常有必要的。我们的程序有一个安卓和ios不兼容的Bug就是因为解析url的时候末尾加不加/的区别,因此只有覆盖性的进行测试,才能发现细微的问题,保证程序在任何情况下的鲁棒性
发布阶段
对发布过程的了解越早越好
我们第一次的时候即使因为对腾讯官方小程序的审核细则不了解,因此在审核的时候遇到了不少挫折,以至于最后设置拖慢了正常应该发布的日期,在团队进行开发的时候,有一个成员去了解发布的细则,提前准备发布所需要的审核材料,这对于准时发布项目也是至关重要的。
维护阶段
在项目上线以后也要及时监听用户反馈
因为我们在gamma阶段与一个学校展开了合作,因此在发布以后,我们也根据合作方用户的实际使用反馈对我们的程序进行维护与完善,没有十全十美的程序,只有我们开发人员对项目进行不断的改进与完善。
四、个人理解与心得
在软件工程这门课上,我经历了结对编程以及团队合作编程。
在结对编程过程中,我发现对于两个人可以完成的项目,那么及时的沟通也许会比两个人的并发效率更高,我们面对着一台电脑编程,互相监督着避免BUG的出现,任何新的想法都能立刻得到讨论并确认是否可行。沟通的效率也是影响一个项目总效率的关键因素,良好的沟通极大的提高项目的进度。
在团队编程过程中,因为要完成更为复杂的项目,我们团队的人员也就更多,这就不同于结对编程的两个人坐在一起编程,我们需要能够对每个人员进行更合理的分配。这个时候一个PM对于团队的作用就必不可少了,合理的对整个项目进行模块划分并分配给相对应的人这对团队项目的进展有着不可或缺的作用。此外不能功能模块之间的沟通和对接也是至关重要的,在本次团队作业的开发中,我主要负责的是前端界面的开发,那么我就需要和后端的负责人约定好我需要的接口,并随时去更新我的接口文档加入新的需求,这样即时的沟通是非常有利于开发的进行。
最后,我很高兴可以在软件工程这门课上与这么多朋友一起完成一个有意义的项目,自己对一个工程的开发所用到的知识也有了了解,感谢在这门课上所收获的所有知识与乐趣。