技术开发 频道

一个项目成功和失败的总结

    【IT168技术文档】
   
在连续封闭N个月以及后来的N个月的加班后,项目终于以延期N个月的结果结束了。不管曾经出现过多少问题,不管项目是否延期,重要的是项目现在已经结束了,所有的项目成员终于都可以松一口气了。曾经在某一天和同事开玩笑说:在我经过过的失败项目中多了一个项目,以后就能避免同样类型的失败了。同事们听了,都笑了。在那段时间里,很久没有听到过同事们畅快的笑了。

现在,我以我目前的知识水平,总结一下项目中存在的问题。

1. 合理项目计划的制定
  我不是很清楚项目组是否在一开始就了解这个项目的规模,估算过项目的成本和工期,做过资源和技术的可行性研究。当我进入这个项目的时候,就被告知项目将在3个月内完成,当时项目刚进入需求调研阶段。在还没有了解项目的大部分功能的情况下,就做好了项目的时间计划,这样项目的风险性是否过高呢?这样导致项目的开发计划不是按照功能进行个人的计划安排和项目经理进行了总体把握和调整制定的,而是按照规定的时间制定功能模块的开发计划。最后,很多功能都没有按期完成,也很难按期完成。而且,为了赶进度,代码的质量也就没有得到保证。(当然,代码质量也不止是计划导致的,还包括个人的开发经验等因素。) 不合理的开发计划造成项目不但没有按照规定时间完成,项目质量也不是很好。所以,合理的项目计划对项目至关重要

2. 开发团队的稳定
  项目进入需求调研阶段,项目所要求的人员并没有按照项目的要求到位,还在招聘当中。在需求调研进展一段时间后,项目组进行界面原型的开发。此时,新招聘N人进入项目组,参与原型界面的开发,需要说明的是他们没有任何开发经验。在部分功能原型界面设计完成,项目组进入封闭开发阶段。按照项目要求,又加入招聘的N人。同时,也有N人离开项目组。项目在开发的中前期,人员一直都没有按照要求安排到位,团队也没有得到稳定,影响工作进度。而且,每次新加人员后,项目组都要安排相关的培训和业务了解,造成时间和人力的浪费。 最可怕的是,人员变更导致不同的人都接手过同一模块的现状,造成现阶段代码维护的难度加大。所以,不稳定的团队,会对项目进度造成不可预计的影响。

3. 明确的项目需求
  一是为了赶项目进度,二是对业务的不了解,三是业务人员业务掌握的差异,在没有全部或者大部分业务了解确认的情况,项目组开发人员就进行封闭开发,相关业务人员也在继续了解其他的业务。需求的不完整,以及错误理解,导致开发期间发生过N次的设计变更,程序无数次的改动。而且,在项目测试过程中都发生过业务改变的情况。明确的项目需求,对高效的项目开发是多么的重要。

4. 业务总体设计把握
  项目缺乏业务的总体设计把握,每个人都是只了解自己负责的那部分业务,其他的模块不了解,在做模块设计的时候,也考虑不到其他模块的需求。当两个模块之间有交互时,更多的是两个模块负责人之间的沟通和交流,按照要求提供另一个模块的服务。而且,模块之间的交互设计是放在各模块开发后期进行的,后面涉及到的改动也就不可避免,还造成开发管理的混乱。

5. 引入第三方技术
  引入第三方技术,是受到项目进度、业务功能和公司所能提供资源的影响,也是不得已而为之 。在经过简单的测试后,就投入项目中进行使用。值得庆幸的是,第三方技术的引入,没有对这个项目造成太大的影响。但是,不管怎么样,我们也应该清楚地意识到引入不熟悉的第三方技术和组件将给项目造成的风险。

6. 严格的单元测试
  因为每个成员开发经验的不同,所以他们所开发的程序出错的几率也不一样,不可能保证大家的代码都没有任何问题。为了节约时间,成员都会在实现一个函数后进行调用和测试,如果得到想要的结果,那就算测试通过了。但这还不够,在实际的开发中,很少进行边界测试、不合理数据输入测试等测试。最后在系统测试阶段,系统出现了很多不应该出现的低级错误,比如什么对象为空的调用、错误数据等,增加测试工作量,延缓测试进度。单元测试是很有必要的,不仅可以检测程序错误,也可以减少测试工作的工作量。


虽然项目受很多不利的因素的困扰,但最终还是交付给用户使用,不管怎么样,这中间还是有很多值得思考的方面。

1. 项目经理
这个项目经历过很多的困难,从一开始的被限定的项目时间,到人员没有到位,再到需求的不明确。虽然困难重重,但是,项目经理超强的全局把握能力和领导魅力,不论是在封闭期间,还是在那段加班的日子,依然保持团队的团结和斗志,让项目工作继续正常的开展,最终完成了这个项目。有好的项目经理,对项目来说太重要了。当然,项目的每个成员都很重要。

2. 团队的团结
我们这个团队,是一个年轻的团队,是因为这个项目而组建的,而且有一部分成员是没有任何开发经验的。面对很多不利因素,之所以能够完成这个项目,很重要的一个原因是团队的团结。封闭的N个月以及加班的N个日夜,虽然很艰苦,但是却是我们团队最怀念的日子。大家在一起,同甘共苦,一起培训,一起交流,一起熬夜,一起吃泡面,一起玩CS,痛并快乐着。即使中间因为讨论而出现过争吵,但从来没有影响过成员间的感情。团队成员的无私和团结,让项目笑到了最后。

3. 弹性的管理
我的意思并不是说管理松散,而是项目组的柔性管理,只要能在规定的时间完成任务,其他时间你做什么都可以。比如,在项目开发期间,我们因为某些事情而无法及时到岗时,虽然项目时间很紧张,但基本上都会优先获批处理事情,只要在以后的工作中及时完成任务,不影响项目计划;或者提前完成任务,项目组成员可以安排学习提高自己。这样的管理方式,至少在我们这个团队执行地很成功。这种弹性方式,不会让我们偷懒,相反我们会更加勤奋地工作,回报领导的信任和关心。

4. 二次开发平台
在这个项目中,我们引入了二次开发平台。虽然二次开发平台因为时间的原因,并不是很成熟,中间也出现过一些问题,但二次开发平台在我们项目开发中还是起到了很大的作用。通过使用二次开发平台,规范了部分的代码开发,减少重复劳动,强化代码复用,让开发人员更多的关注业务模块功能,从而提高了开发效率。

5. RUP开发过程
按照以往的软件开发经验,项目一般都会采用瀑布模型,未必是严格按照瀑布模型的规定的一个阶段的结束是另一个阶段的开始,但大体都是按照这个过程安排项目计划的。在这次软件开发中,我们引入了RUP软件开发过程,采用迭代模型和快速界面原型等开发模型,制定项目里程碑和迭代计划。虽然因为资源的有限和团队的年轻而有些变味,并不是严格按照迭代计划进行的,但还是有效地解决了一部分项目风险。

6. 开发规范
据我了解,还是有一些公司没有一个统一的开发规范,代码质量的好坏都是由个人的开发经验决定的,我现在的公司在我来之前就是处于这种现状。在这个项目中,因为进入开发阶段后还在招聘人员,而且成员能力参差不齐,这就对代码质量提出了挑战。为了能提高代码开发质量,我们引入了开发规范,制定了开发过程中的一些规则,所有成员都要求按照这个规范进行开发。虽然成员在刚开始时受制约而感觉有些麻烦,但这样的开发规范,不管对于项目还是整个公司,都是重要的。


项目能够总结的方面有很多,每一个项目都是一个宝库,希望我们在每个项目中进行不断的总结,提高自己的管理和技术水平。
0
相关文章