软件工程(3)项目交付总结

??在项目验收汇报展示结束之后,软件工程(3)的课程学习与本学期的项目开发任务也就都基本接近尾声了。我在做汇报的时候其实还有一些担忧,害怕没能把我们产品的最好的一面展示给大家。不过从最后的结果来看,大家对于我们的项目还是比较认可的,这一点也让我感到十分欣慰。
??软工三的课程作业,无论投入精力,还是代码量,亦或是系统的复杂性与完整度,都远超于其他的课程大作业,所以我更愿意称其为“项目”而非“大作业”。在三个月将近一百天的开发过程中,我对于软件工程的各个方面,包括系统架构、团队合作等,都有了不一样的理解与感悟,下面我将与大家分享一下。
软件工程实践的理解与感悟 做好前期准备的重要性 【软件工程(3)项目交付总结】??在做其他专业课的大作业的时候,迫于ddl的压力,我们往往一拿到大作业任务要求就开始写代码,于是就可能出现徒劳无功、南辕北辙的情况。而这次在做软工三项目开发的时候,老师用了将近一个半月的时间为我们讲述了需求分析、系统建模方面的知识。我们也是在做了充分准备之后,才开始代码编写的工作,项目也因而得以顺利开发完成。
??前期准备可以分为很多方面,其中我认为最为重要的几点是:项目目标明确、用户需求分析与相关产品调研。

  • 项目目标明确
??在做一个项目的时候,牢牢把握项目的目标是关键所在。做项目就像写作文一样,如果不围绕题目展开,就很容易跑题。
??我们团队选择的项目主题是学生节晚会小程序。学生节晚会是一个很大的话题,它所包含的内容也十分丰富;而小程序又是一个轻量级的软件,它重点在于便捷易用而非功能复杂。所以在做这样一个项目时,我们需要思考很多问题:为什么选择这样一个项目主题,这样一个主题应该侧重哪些方面,怎样使小程序与晚会有更紧密的贴合度,怎样使这个小程序可推广等等。同时我们和老师、助教、同学们也进行了充分的讨论,听取不同个体对于我们项目主题的看法,从而最终明确了我们项目的目标。
  • 用户需求分析
??作为开发人员,我们最容易犯的错误就是主观地臆断用户的行为,然后将系统做得十分复杂,反而引起用户好感度的下降。对比大作业与项目,做大作业时,老师和助教重点关注的是知识掌握与技术使用情况;而做项目时,老师与助教的角色就转换成了用户。用户不会关注你的技术实现方式,而更在意这个产品究竟好不好用。所以我们在做产品开发时,一定要了解用户的需求,知道他们想要什么,而不是我们会做什么。
??在获取用户需求的时候,首先要广泛地听取用户的意见。对于学生节晚会小程序而言,“广泛”就意味着要咨询很多不同院系同学的看法。因为每个院系的学生节都各有特点,主办方与观众的需求也会各有不同,所以在获取需求时需要做到集思广益。
??在获取大量的需求之后,第二步就是要进行分析。大量的需求中往往会有一些无效信息,比如某些需求可能只适用于个别院系的部分特殊场景,这个时候我们就需要对需求进行过滤筛选,再进行归纳整理,从中得到最核心的需求,作为我们开发时针对的关键点。
  • 相关产品调研
??相关产品调研是软件开发过程中必不可少的一个环节,其主要目的是避免同质性。如果我们开发出一个产品,但是市场中已经有完全相同的产品,那用户为什么会放弃使用已有的产品转而使用我们的产品呢?
??相关产品调研的内容主要是:该产品已有的功能性质,该产品的使用感受,该产品的用户反馈情况等等。在调研之后,我们可以吸取已有产品的精华而弃其糟粕,完善自己的产品开发想法,从而使自己的产品更有竞争力。就以我们团队为例,我们要做的学生节晚会小程序与已有的“弹幕派”小程序较为相似,所以我们加入了图片弹幕、节目单等功能,降低了二者同质性;同时我们对于弹幕派存在的一些问题也进行了思考,并对我们自己的产品进行了相应的优化。
清晰的系统架构的重要性 ??这次的项目开发是一个四人团队作业,算是一个比较大的项目了,我们不可能再凭借一己之力完成整个项目,也不能像做单人或双人作业那样想到哪里就写到哪里。对于这样一个项目,一定要有一个早期的系统架构的。我们团队在开发时维护了一系列的产品开发文档,其中包括模块的划分、选用的技术方案、前后端接口的设计、数据库的设计等,我们也会在每次会议中对于文档进行修改完善,再根据文档写代码,保证了全体成员各自开发的模块可以最终合为一个可用的整体。
??当然清晰的系统架构不意味着在项目的最初就要将所有细节想得十分透彻。一个好的系统架构主要有两方面的特征:稳定的框架与可扩展性。稳定的框架保证了开发过程中无需对代码进行很大程度的调整重构;可扩展性保证了开发人员可以很轻松地将后续的内容添加进系统,而不会影响系统整体的特性。
优秀的团队的重要性 ??在这里当然要夸一下我们团队的成员咯,我们项目的顺利进行离不开每个人的努力。对于团队的四名成员,我和江老板之前合作过很多次,润语和琳颖之前也合作过很多次,而我们四个一起合作则是第一次。虽然第一次合作,但是大家都能很快适应这个团队并默契地配合。在团队中,江老板是技术大牛,系统架构是江老板主要构思的,很多重要的技术问题也都是在江老板的帮助下才顺利解决;润语十分细致严谨,会将问题考虑得十分周全;琳颖有很多创意与艺术细胞,能做出十分美观的界面、图案。在开发的时候,大家都能很负责地将自己的任务完成,并且完成质量也都很高,让我这个组长也轻松了很多。
??我认为一个优秀的团队,不是每个人都要多么多么强,而是每个人都要有责任心,能够适应自己的角色,能够包容其他团队成员。团队中的每个成员就像拼图的一部分,相互补充之后就会出现1+1>2的现象。
良好的过程管理的重要性
  • 保持热情
??项目开发过程中,大家往往是一开始的时候热情高涨,后来随着其他事的增多,或是总重复编写、测试同一个模块的代码,热情就会慢慢地减弱。这个时候团队的组织者一定要站出来,为大家鼓气加油(或者一起开个party之类的);而团队成员也要能够主动说服自己,在没有达到最终目标的时候一定不能颓废或是搁置。缺乏热情的团队开发的产品一定是虎头蛇尾、没有活力的产品。
  • 重视细节
??我们在开发的时候会遇到各种各样的细节问题,这些细节问题很有可能会对之后的开发有很大程度的影响。比如我在做主办方网站前端的时候,有的时候会对某一个控件的位置、尺寸不太在意,而后期测试的时候就会发现界面出现各种奇怪的扭曲重叠问题,又需要花很大的功夫去解决这些问题。
  • 任务安排
??任务安排主要包括两点,明确分工与制定时间规划。
??明确分工是要让大家清楚自己具体是要做什么,其重点在于“细化”。举个例子,如果你和我说,“你去做一个主办方管理网站”,我肯定一头雾水无从下手;但是如果你和我说:“你去实现一个主办方登录的功能,主办方输入用户名和密码就可以跳转到活动列表页面”,那我就可以很快地完成这一个任务。所以明确分工是团队成员,尤其是组织者,需要重点注意的。
??时间规划则是让大家有一个紧迫感。做时间规划最好的方法是,组织者先定一个大概的时间,然后所有团队成员进行协商,定出每个人都满意或至少不反对的时间安排。因为团队成员都会有惰性,就算最好的团队也不例外,所以一个明确的时间规划可以让每个人有计划有安排地完成任务。从这个意义上来讲,时间规划也是调动成员热情的不错的方案。
总结 ??软工三的项目开发,对于我来说,是一个很宝贵很重要的经历。在这个过程中,我学到了很多新知识,接触到了很多新事物,发现了很多其他同学的优点,也得到了一个不错的成果。同时我也认识到了自己还有很多不足,我也会在后续的学习之路上,让自己变得更优秀。

    推荐阅读