一、提出问题的博客链接:http://www.cnblogs.com/buaawd/p/4027884.html
二、对之前遇到问题的回顾
1.人力因素决定着整个项目的效率,这在整个过程中表现的很明显。无论是从人员的个人能力还是从个人的效率来说,这都影响着我们整个项目的进度。通过个人贡献率来评比分数确实是一项不错的方法,这样可以激励每个成员都可以充分发挥各自的作用,也能使贡献比较多的人得到更多的收获。第一次做软件工程,也是教学学习的过程,用分数来作为一项奖励措施确实不错,但如果是作为企业做一项软件工程的话,通过效率、正确性、贡献量等因素来进行衡量,对项目的参与人员给予经济上的奖励,这应该是最能激励成员、使每个成员都能自觉努力地工作。
2.这个问题并没有在整个项目的过程中体现出来,我们在这次软件设计开发的过程中,alpha阶段是有七名成员一起在做,不得不说,我们这个团队整体实力相对其他团队还是差一点,没有特别厉害的“大牛”,在beta阶段开始之前,我们团队交换进来了一名新的成员。就提出的这个问题而言,我们并没有中途加入一个能力极强的人,可以将整个项目完成地更出色,我们没有遇到这样的选择,这个问题没有在我们的软件工程项目中得到实际的处理和解决。通过我们的实践,这个问题并没有给我很好的体会和结论。在正式的大型软件工程项目中,当有个人能力超强的成员加入到团队中时,是只是维持预期的设计,还是利用这个成员的个人能力进行一些更好的设计和改变,这还是一个问题。
3.软件实际开发时间超出预算时间,这个问题我们是真真正正地体会到了。预算时间只是按照常规思路和经验提出的一个目标,但真正实施起来就会遇到各种各样的问题,尤其对于我们第一次做软件项目。在接到这个项目时,对我们来说一切都是空白,我们也只能粗略地估计一下时间,而这个时间预算也是按照一切顺利进行的想法进行预估的。在项目进行的开始阶段,因为是入门和准备阶段,我们是可以按照时间预算步步进行的,但越到后面,遇到的麻烦越多,比如我们在alpha阶段,基本一直卡在连接服务器这个步骤上,在网上查找了很多方法也没能很好地解决这个问题。这个问题不解决,其他方面的工作也很难进行下去,这是一个瓶颈,在这个问题上我们就花费了很多的时间,而这就不是我们在时间预估时能够完全想到的。另一方面,我们人员的能力也是一个问题,一切都不像预计的那么顺利,项目经理在分配了各小组的任务后,并不是所有任务都能够保质保量地完成,所以我们还会根据情况进行人员的调整以使整个项目能够顺利进行下去。在实际的软件项目开发中,整个项目从设计到发布所用的时间是一个非常重要的指标,只能通过在实现过程中合理配置开发人员,提高人员效率来尽量避免超过估算时间。
4.对软件的最终实现程度与投放市场时间的衡量,决定了这个软件的市场前景。一个团队在设计阶段,往往会把软件功能设计得尽善尽美,在实施阶段还会不断补充新的功能,但实现起来就需要考虑到时间的问题,若要把软件做到完美,就要推迟发布的时间,这样将会影响软件的市场和推广。我们这个团队采取的方法是以发布时间为主导,尽早实现软件的基本功能进行发布,占据一定的市场份额,拥有一定数量的用户,然后再考虑优化软件、实现更多功能。通过我使用市场上的各种软件的经历,我认为很多公司也都是这样做的,很多应用软件都是先发布抢占市场,然后再不断进行更新推出新的版本,这样也不会失掉原来的用户。
5.在团队开发项目的过程中,先分组代码再进行汇总会遇到接口、调试等问题,这在我们团队的开发过程中是出现了的。我们团队的实现任务主要分为联网部分、UI设计、功能实现这三个部分,联网部分迟迟得不到解决,别的部分还要尽可能的往下进行。在不能联网的情况下,我们最初设计出一个UI界面,后来联网成功后,代码合并时就又修改了UI界面。在团队开发项目中定期交流,提前发现问题,应该是避免代码合并时出现大量错误的有效途径。
三、遇到的新问题
1.在整个团队中,成员的个人基础不同,学习接受能力也不同,如何在分配任务时实现每个成员的贡献最大化?
2.在一个团队中,能力较弱的成员总是会处于被动的局面,跟不上其他成员的步伐就容易失掉积极性,如果团队任务分为几个方面,怎么能够很好地调动每个成员的积极性呢?
3.我们的整个项目是以实验教学为目的,交换团队成员也是为了真实完整地体验软件工程的感觉,因为在一个大型项目中,很有可能会有成员退出或者加入团队。但是对于我们来说,这个项目是从学习请教开始一步步摸索进行,在项目进行到一个阶段突然加入一位新的成员,新成员融入整个项目会有很大困难,不知道这一点能够怎样有效地解决。
4.如何能够更好地预知整个项目开发过程中难以解决的问题?从这次团队项目中我们都明显地感觉到,最难以解决的问题就是整个项目的瓶颈,一个问题就可以影响整个进度,如果能够早些预知问题,就可以有效减少项目停滞的时间。
四、新的体会与总结
软件工程是一个团队项目,需要团队中所有成员的齐心协力。在这个过程中,个人能力是重要的基础,如果团队中每个成员的个人学习能力、应用能力都很强的话,就可以做出一个更加完美的软件,但并不是说团队中没有特别厉害的成员就不能做出一款软件。通过我们团队的实践,我们还是做出了一款有基本功能的MOOC软件,这也是令我们振奋的事。我们团队中没有技术牛,我们之中最强的成员也并不是很强悍,都是从最初的学习开始。如果能够有效合理地配合,集中力量突破一个个问题,就能够实现团队成果的最大化,至少能够实现1+1=2,但如果不能做到很好地配合,就会遇到很多问题,比如代码重做、重复修改,可能会造成1+1<1的结果,严重影响积极性和效率。
在我们团队项目的alpha阶段,我们每个成员都有很大的信心,按照预计时间进度有条不紊的进行。我们先是安排了阅读代码,期间还多次找学长给我们讲解代码,不过不得不说,阅读别人的代码是一件很困难的事,没有注释,还是一种新的语言,学长给我们讲解,也只是能了解一下大概结构。之后的实现阶段,也是遇到了很多的问题,对整体没有很好地把握,不知道该怎么入手,遇到问题就大量地在网上查找解决办法,一点一点地尝试。由于alpha阶段的联网问题得不到解决,项目一度出现了停滞,整个团队都在集中想办法解决这个问题,期间还请教同学、询问学长学姐、大量搜索资料,这个过程是很纠结很辛酸的。
在后来的beta阶段,我们的团队项目加快了进度,因为相对于其他团队,我们的进度确实有点慢。有的团队已经初步具备基本的功能了,我们的项目还在解决问题、编码阶段。在得到学姐的友情帮助后,我们终于把联网问题解决了,这对我们来说是一个阶段性胜利。我们就是在一边编码一边调试的方式下进行的,几经努力终于把一款可以用的软件做出来了,虽然也只是具备基本的功能,有一些功能还是没有实现。
软件发布后,我们作为内测用户都注册使用了这款软件,这款软件具备了基本的功能,使用起来很简单方便,比网页版的更简洁,更方便用户找到自己需要的课程资源。
经过一学期的软件工程的训练,我体会到了做成一个完整的软件项目的艰辛,尤其是大型的软件工程项目。我更加清楚地认识到自己的不足,我距离成为一个合格的程序员还很远。自己学习新知识的能力还很弱,将看到的新知识、新方法应用到具体的软件项目中还很困难。我对软件工程有了一些了解,在这方面的努力也不白费,以后在学习和工作中遇到做一项工程时,能够有初步的掌握,不会像做这个项目开始时那样的惧怕了。