Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1707452
  • 博文数量: 607
  • 博客积分: 10031
  • 博客等级: 上将
  • 技术积分: 6633
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-30 17:41
文章分类

全部博文(607)

文章存档

2011年(2)

2010年(15)

2009年(58)

2008年(172)

2007年(211)

2006年(149)

我的朋友

分类:

2008-01-02 08:15:02

谁动了项目的质量

  又一个项目结束了,终于闲出空来写些东西.有了以前的经验教训,这次在做项目的时候,我对时间的控制很关注,最后也基本上达到了计划的要求. 但最终交付产品的质量却让我不太满意:客户在做接受测试的时候发现了很多的问题,而且在我们进行修改的同时,又有BUG源源不断的报过来.甚至把更新的版本发给客户以后,还会发现不少问题.给客户留下了很不professional的印象.为什么问题总是要到项目快结束的时候才会出现呢?软件的质量为何不好?究竟是谁动了项目的质量?

  大家知道,项目的时间、成本及质量的三大要素是缺一不可.这三方面的符合程度直接决定了项目的成败与否.但事实上,想达到一个完美的等边三角形几乎是不可能完成的任务.这次的项目就让质量这个角短了很多,质量的问题暴露地很明显.所以,接下来,我就从项目的流程角度出发,一步步地分析到底是哪里出了质量问题.

 1.分析阶段

  项目的开始阶段,也是质量控制的开始.在这个阶段中,主要的工作是从客户方获得足够多的项目需求,并准确地记录在案,而且要使得项目组的成员对于需求足够得了解.先说说这个项目的基本情况:一个信息管理系统,而且是在原来的版本上进行的功能增加.项目组的成员,除了我以前参加了前一个版本的开发,其它的人员都不了解这个项目.就是这样的一个项目,在开始阶段,我先是安排了组员对以前版本的需求文档进行了阅读,并安装使用了软件.随后对新的需求进行了研究,分析了它们对于原有系统的影响.由于是在旧有系统的文档进行增加,所以加入的新内容并不是很多,需求文档很快就完成了.所谓的分析阶段的里程碑也就结束了.

  在需求阶段"顺利"结束的同时,问题也随之留下来,并对后面的阶段起到了"乘数效应"――影响变得越来越大:

   A.        对旧系统的理解不足

  由于开发人员没有参与过上一个版本的开发工作,他们对于旧系统并不了解.虽然在阅读了以前的需求文档以及使用了软件之后,大概对系统的功能有了一个初步的认识.但是对于系统中出现的各种逻辑关系并没有深入了解下去.作为项目经理,在这项工作中,失误之处在于任务的结果(即输出)没有事先定义清楚,从而也就导致无法确认目标是否已经达到,再加上需求文档描述的也不是十分清晰.最后,只是在开发人员觉得已经理解该系统的基本上,进行了下一步的工作.没有进行进一步的确认工作,不知道组员进行旧系统已经了解到了什么样的程度.这个问题的结果,就是直接导致了后期的开发过程中,由于对于原先系统的逻辑关系不是很清楚.对于旧代码理解和新代码编写进行地不是很顺利.

   B.       对新需求的分析不够

  这还是个老问题,但又不是一个问题.说它是个老问题,因为分析需求要求考虑细致全面,并且能引导客户,启发客户提供更有价值的信息.事实上,需求分析我们做的算是很尽力了,同时客户把需求一条条的列出来给我们,相对来说需求已经很清楚了.我们在接到这些需求后,不仅研究了新功能,还把他们对于旧系统的影响都做了分析.但还是有些问题没有能在需求文档中反映出来,后面的影响也是可想而知的了.我以前的文章中才曾提到过相关的问题,在这里就不再重复了.不过,从另一个角度来看,它又不是一个问题.为什么这么说呢,因为需求实在不是能够在分析阶段就能完全理解透彻的,甚至有的需求客户也模模糊糊,直到交付以后才提出了改动的要求.软件开发经过这么多年的发展,大家已经认识到了一点:需求是变化的.要达到能够拥抱变化的要求,我们要对开发方法进行改进,相关的问题我在后面也会提到.

  需求分析阶段出现的问题,解决的可操作性不是很大,更多的是从思想或经验上解决,而后面几个阶段出现的问题都相对具体一些.

 2.设计阶段

  设计阶段的问题相对比较明显――结构设计不合理,或者说还不够.一个传统的C/S结构的系统,基本结构我们采用了经典的三层模型来划分系统.由于是在旧有系统上的改进,我们在尽量不改变原有系统的基础上添加新的功能.

  主要的问题可能就是体现在没有对旧系统进行改进.旧系统本身有一些复杂的功能,逻辑关系也比较复杂,耦合度非常高.所以,在新需求来临的时候,我们的第一反应就是尽量不去动原来的设计与代码,保证原有系统功能不会发生变化.这一点就暴露出了我们没有去拥抱变化的决心与胆量.虽然旧系统很复杂,但是我们不能去故意回避它.对于旧系统中设计的不合理的地方,应该主动大胆的去进行重构.其实重构的作用就是对不合理结构的进行改进,设计模式更是在设计结构的变化改进中才能体现它的价值.而这些东西,在我们的项目中都没有应用.这可能跟我们的保守心理有关:只要不出问题,我们就不去动它,哪怕结构是多么的错综复杂.这种消极的观念在当今的充满变化的世界中是不太有前途的.项目经理要有足够的决心去做,同时,也不要担心去变化.当然,可能有人会说,时间紧怎么办,其实这种付出对于项目的整体是只有好处没有坏处的,因为结构合理会让开发人员会更少的时间去理解代码,减少代码开发的复杂度,提高代码编写的质量.唯一需要考虑的就是如果改动的话,如何来保证这种变化对原有系统的功能不产生影响.这就需要有更多的测试,最好是单元测试来保证,这就是下面会谈到的问题.

 3.编码阶段

  编码主要还是受了设计的限制,我们的主要工作就只是在原有的结构上添加一些类与方法,以及对原有的代码进行修改.前面也提到了,我们采用了比较保守的作法,没有对代码进行重构,放任这种高耦合的代码存在,导致我们在编码过程中花费了不少精力和时间去理解它们,并在其中加上一两条更加加深耦合度的代码.其实到了编码阶段,很多问题都纠缠到了一起,已经分不清因果了.比较说单元测试,首先我需要承认的一点就是没有足够的决心去做充分的单元测试,思想上也没有做好充分的准备.除去主观的因素之外,还有一点就是设计的结构不合理,很多的逻辑被处理在表示层中,数据处理则被加到了逻辑层中.没有划分出更多的接口供单元测试来验证.但反过来说,没有单元测试用例的支持,也降低了我们想要进行重构的决心.除了上述的问题之外,还有一些细节的地方,如硬编码,命名规则等都在一定程度上对代码的质量产生了影响.

  改进的办法,一是从主观上接受变化的现实,主动的对代码进行改动.单元测试一定要进行,最好结合统计覆盖率的工具一并进行,这样对于每个接口,都保证有充分多的测试用例来跑完尽可能多的路径.在项目的质量管理上面,要求还需要更加严格一些,一定要按照规范来进行编码.

 4.测试阶段

  代码完成之后,测试的工作也随之展开.但是由于成本的原因,我们并没有再加入专业的测试人员来进行,而只是用开发人员自己来进行系统测试,让开发人员互相测试别人实现的功能.由于开发人员与测试人员所需的专注点不同,造成了开发人员很多问题在测试中没有被发现,缺乏测试的经验.从另一个方面说,是开发人员不能够及时的转换自己的角色,而是还把自己定位在开发人员上面,更加关注的问题出在什么地方并立刻去解决它,而不是设法去发现隐藏的BUG.当然,还有一些细节的地方,比如说测试都应该是开发人员发布一个安装包,然后单独进行测试,但有的时候为了图省事,有的功能在调试状态下发现通过了,在安装包中就没有再验证,有时也会出现意想不到的情况发生.

   大家可以看到,软件的质量可能就是被这一步步的失误,错误,粗心等等影响了.这些问题都是在项目管理中暴露出来的,可以说是由于项目经理对于质量的要求还不高,有的时候为了片面追求成本与时间而忽视了质量,从而造成了质量的下降.算是个总结和教训吧.也希望大家能够说出你的想法与意见,多多交流,共同进步.

posted @ 2006-12-11 10:39 布鲁斯南 阅读(8140) | 评论 (22)编辑

2006年9月20日

项目经理手记

 

上个项目算是告一段落,进展的非常不顺利,但也算是一种经历,从中领略到了很多东西。做项目,就是要从失败中学习,对于导致项目进展不利的因素进行分析,进而使自己在下一次的项目管理过程中不会再一次的犯相同的错误。俗话说的好,人不应该被同一块石头绊倒两次。所以,失败并不都是坏事,虽然对于项目没有按时完成,项目经理承担主要责任,也被领导叫去训话,但是我觉得自己从中分析自己失败的原因,并在下一次项目的改正,这就已经足够了。

现在,又一个新的项目开始了,在对上个项目进行细致的总结以后,我也一直在思考,同时也看了一些关于项目管理的书籍以及大家的回贴后,我对发现的一些问题进行了个人的总结,并找到了一些改进的方法,希望在下一个项目中得以实施并收到良好的结果。当然,项目管理并不是从书本上的知识就能学到并灵活掌握的,但把从书本中学到的一些好的方法应用到项目管理中,从一定程度上还是很实用的。

 

1.如何进行需求的分析与挖掘?

其实这个问题不应该成为一个问题,因为一个真正意义上的的项目经理是不需要去做需求分析的,而应该是让专职的需求分析人员去做。我的理解,项目经理在工作过程中,与需求沾边的工作应该是对于项目范围的定义:确定哪些是在项目中要做的,哪些是不用去理会它的,清楚地定义项目的边界。除此之外,其它的工作都应该交由专门的人员去进行专业的信息采集与处理。但大家都知道,在实际的工作中,项目经理往往是既当爹来又当妈,一个人做N个人的活,尤其是当项目不大的时候,项目经理更是要一马当先地什么都做,几手都要抓,同时,老板对你的期望又是几手都要硬。因此,从现实的角度考虑,这个问题还是要探讨一下的。

记得我刚从学校毕业到公司的时候,曾无知地告诉老板说我对需求分析还是很有经验的,老板当时就笑着对我说,其实要想成为一个有经验的需求分析人员,起码要有十年的工作经历。当时只是觉得老板嫌我刚出道罢了,但做了一些项目之后,我对于需求分析这件工作有了更深刻的认识,也清醒地了解到需求分析真不是一件容易做的事。

首先,是我们对领域知识的缺乏。客户所在的领域并不都是我们所熟知的,这不像是在学校里做课程设计,不是图书馆管理系统,就是学生管理系统,连蒙带猜也能编出来。行业的多样性必然会导致需求领域知识的多样性,面对这样的困境,又怎么能要求我们在与客户短短的几次交谈中就获取足够的信息来完成一个复杂的软件产品呢。

 

其次,客户对需求的理解与传达不足。需求很明显是由客户传递给项目组的。客户在解释需求的时候,有时就会带有很大的含混性,而且客户对需求的说明不能做到完全的正确。如果是与外国人交流,那信息的损失就会更大。在与外国客户的交往中,英语国家的人可以用母语与你交谈还算是庆幸了,遇到了母语不是英语的国家的客户与你交谈,那两个人都要非母语进行交谈,双方都够把心里想的东西表达出70%以上就算是非常成功的交流了。同样,分析人员在对需求进行吸收的时候也会产生误解,一些信息也会被遗漏掉。靠这样获取的需求进行开发,结果是可想而知的了。

 

要解决上述的问题,似乎没有什么比经验更好的办法了。对于某一行业领域的熟悉,需要一定时间的积累,了解了一定的知识之后,就能更容易得与客户进行有效的沟通,获取项目中需要的信息。需求对于项目的重要性不用多说,一个项目至始至终都是为了达到让客户满意的目的,满足客户的需求,其实是一种对需求含混性降低的过程。为了达到这一目的,还有一些称为方法的步骤可以让我们减少对需求的误解:

            1. 细晰地划分项目干系人(Stakeholder):尤其是分清什么是客户,什么是使用者。在了解需求的时候,我们能从哪些人中获取信息。同时还要注意到,获取的信息是否得到负责人的确认。

            2.需求分析会议:与客户的会议当然必不可少。从中尽可能多的找出不清楚的地方,及时的提出,如果客户允许可以进行录音,不过这一招估计很难做到,大部分时候客户可不想留下自己的话柄。与项目组成员的开会是为了在组内加深对需求的了解,集思广义,再用点头脑分暴之类的东东,可以发现更多的求知问题。

            3.在初始的需求得到后,要对其进行细致的分析,划分功能块及其属性和约束条件。

更多的知识,可以参考温伯格的《探索需求——设计前的质量》。

 

2.如何进行有效的沟通

沟通的话题一直没什么争议,在项目中没有沟通简直就是死路一条。我上次做的那个项目就是在沟通上出了问题,使得项目延误。在我发了贴之后,很多朋友也回复指出存在的沟通问题。其实在项目进行中,项目经理要把大部分的时间放在沟通交流上。作用主要包括提出项目的方向(做决策、授权工作、指导各项工作、协商、报告),参加会议,整个项目的管理,公共关系,记录管理(会议记录、报告、规格说明、合同文件)等。沟通的关系主要存在于三个方面:与项目组内部、领导、客户。

 

项目组内部的沟通是开发出有质量保障的软件的基础。没有沟通,大家个个闭门造车肯定是不行的。上次的文章中我也提到了这个问题,项目成员间的沟通方式有Email,会议,电话,面对面交谈等。Email这种沟通方式方便快捷,如同QQ聊天,不需紧张,对于不善当面交流人们来说是一个福音,但是这种方式还是少用为妙。做为人与人之间的沟通,仅用文字是远远不够的,当然,对于技术上的东西可以,但对于理解性的或者感性的东西,文字的表达能力还是欠缺的。会议这种形式也是问题多多:有效的会议组织可以使得各种决策成为会议的结果,达到开会的目的;无效的会议人们就是在那边聊天叙旧,很多问题都得不到最终的确认结果。所以说会议也是一把双刃剑,如何有效的组织会议也是一门讲究。事先安排好会议日程是必须的,而且在会前要对会议有充分的准备,从而在会议中得出结论。电话交流相对好一些,但若是项目经理与组员的交流过多的通过电话,信息的传达就像上级向下级传达命令一样,组员会觉得项目经理架子太大,这样会给组员一个很不好的印象。所以,面对面的交流也是必不可少的一样形式,而且项目经理要多花时间在与组员的直接交流上来,积极的把握项目的进度,及时的得到组员的反馈信息以便做出调整。而且直接交流也在项目组内创造一个宽松的环境。

这里需要提出一点的是,我本人也屡次遇到这种情况。当项目经理传达任务给组员时,一定要注意自己的用语,务必达到清晰准确,以免造成别人完成任务以后,你才发现这并不是你当初想要的结果。最好在传达后,让组员确认他是否已经精确地了解了你的要求,这样的信息传递才是有效的。

与领导的交流是个有趣的话题。在我的上个项目中,更多的情况下是领导主动来找我问项目的进展情况,我当时没有意识到要主动的去向领导汇报项目的进展情况。结果在项目出现了问题之后再去找领导,这样就是等于把责任往领导那边推,好危险的:)所以,作为项目经理,要及时得与领导交流,把项目当前的进展情况传递给领导,正式的汇报比如每周的报告是远远不够的,建议多一些日常的非正式交谈。在交谈中,在领导的一些问询中很可能发现一些自己未预见到的问题,如果领导觉得有必要,要及时的做出调整,增加资源等。这样的话,对项目,对项目经理本人,对领导自身,都是有百益而无一害的。

客户的交流很重要,上个项目中的与客户交流不畅导致了很多问题。很多网友也在回复提到这个因素。项目经理有这个责任与客户进行交流,询问一些不清晰的需求,及时报告项目进展等。但要注意到,不能一有问题就打电话给客户,这样客户会非常反感。要利用有限次的机会,获得更多的必须的信息,这样才是有效的交流。比中可以让组员最大程度的发现未知的问题,搜集到一定量再一次性的去询问客户。这样不但不会影响客户,也要提高项目组提出问题的能力。在这里,有一点问题需要说明,介于各公司组织结构与人员安排等多方面的因素,项目经理有时未必能直接与客户取得联系,必须通过领导,这种情况下,就回到了上面所说的与领导交流问题,项目经理也要给领导一些压力,促使领导安排与客户的联系的机会。

 

3.如何进行时间管理

从项目经理的角度来看,时间管理应该分两个方面,一方面是项目经理对项目的时间资源管理,另一方面是自身工作时间的安排管理。时间资源对于项目来说是十分宝贵的,虽然人月只是神话,但是每一天,这个神话都在不停的被人期待着,尤其是老板们(可能他们也知道这只是个神话)。

完美的时间分配是每个人每天八小时都被安排的满满的。这显然是不可能的。项目的开发有点像进程的并发,有时要有等待。这时项目经理要及时的调整组员的工作安排,一种办法是把任务已经的组员安排到被瓶颈阻塞的任务上来,帮助别的组员一起进行解决问题(又见神话),另一种是看下阶段的工作是不是可以划分出一些在这个阶段就完成。让组员空闲着就说明项目经理的安排没有做好。上个项目中,有一段时间组员都说没有事情可以做,当时没有很好的做出调整,才导致后面的时间资源紧张。

对于自身的时间管理,项目经理要把握的一点就是永远都要把重要的事情放在第一位。每天早上到公司就要安排自已一天的工作,并按优先级排一个序,接下来就要做优先级第一的事情。从长远看,要按照重要与紧急的安排划分,相信大家在很多地方也都看到过。

 

重要又紧急的事情是当前要执行的,让人忙得不可开交。

不重要又紧急的事情就是浪费时间。

重要但不紧急的事情才是项目经理能把握先机的关键。之所以出现很多的紧急的事情,把项目经理整天忙得团团转,很多情况下就是因为事先没有把握好这些重要但不紧急的事情,如果能够事先做准备,后面的安排就是按步就班,很少出现忙不过来的情况了。

不重要又不紧急的事情,就随它去吧。

特别的,对于一些项目经理要写的文档,最好规范出一些模板。一般公司都会有相应的文档模板,但那远远不够,每次项目都要写一些类似的信息,所以最好自己整理一份模板。以后每次做新的项目,只要输入一些新项目的信息即可,这样大大地减轻项目经理日常的工作,把花在文档上的时间降到最小,何乐而不为呢。

4.如何进行开发方法的讨论

关于开发方法的讨论一直是个热门的话题。不论是学者还是实践家都在不断地寻找一种好的方法,从经典的瀑布模型到现在流行的敏捷开发,都给软件开发带来了一次次的进步。虽然方法如此之多,但老实说,虽然瀑布模型很难应对当前快速变化的软件需求,但大部分情况下,软件开发还是按照它来进行开发的,最多有一些迭代的变化。至少我在参与了不少项目后发现基本上都是按照它来进行的。

瀑布模型明确指出了软件开发过程所要经历的每一步流程,每个阶段都是以上一个阶段的完成而开始的。同时,在每个阶段的结束时,要有一个里程碑的检查,来决定是否可以进入下一个阶段。这种方式比较适合需求基本稳定或者大型的项目。迭代的开发模式阶段与瀑布模型一致,不同的是当一个阶段的工作出现问题时允许回溯到上一个阶段进行改进,这种方法其实更加实用。因为,在现实中,很少有项目在编码与需求或设计文档要求的完全一样。现在热论中的敏捷开发好像在国内实施的并不是很多,这种方法讲究的是轻量级的入手与实施,简单灵活的设计以备随时应对需求的变化。国外似乎应用的更多,我觉得可能这种方法看似简单,但对开发人员的要求极高,光是灵活的设计以及对面向对象思想的深入理解,我们又有多少人都够胜任呢?

我个人觉得方法的使用还是要与项目的特征相结合。比如说我的上个项目是个Web的项目,那就应该用快速原型开发的方法:在接到客户需求后,第一时间内就是进行UI的设计,把所有页面全都按已知需求做出来,以及页面间的链接做出来,然后拿给客户看,这种方法对需求的定位比较准备,能够在早期就与客户进行有效的沟通,启发客户提供进一步详细的需求描述,对后期的开发有着极大的帮助。再比如我现在正在做的一个类似MIS的系统,所有的需求都已明确,客户提供了详尽的需求资料,而且是在先前系统上做的一个增加功能的版本。这种情况下,我们就应该选择走标准的流程。

项目类型的不同,决定的开发方法选择结果的不同。项目经理应该熟悉各种开发方法,才可以在对项目分析之后决定用什么样的开发方法来应对它。

 

5.如何面对技术细节

技术细节的问题我相信是困扰着项目经理的一个头疼的问题。理论上说,项目经理的职责就是进行管理,对于技术是没有什么苛刻的要求,顶多是了解即可。但实际上,在我们所处的环境中,项目经理一般技术出身,有着一股对于技术狂热的酷爱,仿佛不进行技术的学习就是没有意义的工作。针对这人问题,我想谈谈自己对于这个问题的看法:

         1.项目经理不能没有技术背景

很难想像一个对技术毫不了解的人来做项目经理,对项目来说是个多么大的悲哀。组员肯定会经常把气撒在项目经理身上,“一个什么都不懂的人怎么能够带领我们这帮聪明的程序员?”,这样一来,气士低沉,项目何来的曙光呢?当然,大部分的情况下,项目经理还都是技术出身的,从程序员的岗位上提升上来,即所谓的编而优则管。一个具有技术经验的项目经理,无论是在计划安排,还是在做决策的时候,都会因其具有丰富的经验而更加有效的执行。同时,在对需求的理解上也会更加深刻,可以更准确的把握项目的进展方向。

         2.项目经理不能陷入技术细节

拥有技术对项目经理来说是必备的,过多的专注技术就是项目经理的大忌了。项目经理应把工作的主要任务放在管理上,即计划安排,资源调配,进度控制,交流等等,把这些工作都做到位,需要大量的时间与精力的。而如果项目经理专注于技术而不能自拔,那就势必影响到他应做的工作。而且,过分专注技术的人往往有个特点就是爱追求完美,我个人有时也是这样。觉得事情总会一个完美的解决方案,就在其中深入的研究,这种精神对于科研的学者来说是一件好事,但是对于在企业中的人员来说,就另当别论了。尤其是项目经理,在管理一个项目时,不要去追求完美。典型的问题就是关于软件产品的三要素的关系,即时间、成本、质量,如果项目经理想要对这三方面都追求完美,那么这个项目基本上就不用做了。因此,在开始一个项目时就要衡量到底这三个因素要重点放在哪两点上,另一点可以做一些舍弃。不要因为没有找到一个完美的办法而灰心丧气,这个世界本来就不是完美的。

         3.项目经理应该把握技术的发展方向

不专注技术,不代表不去理会技术,特别是当前这个技术日新月异的时代,项目经理应该主动地比别人更快的去接收新信息。对于技术的发展,作为一个项目经理是应当很好的把握的。做Web的项目就应该了解现在Web 2.0的方向,在微软平台上做产品,就应该了解.Net 2.0, 3.0的新特性。这时并不要求项目经理要去学习具体的知识点,只是说要求项目经理每天能够利用少许的时间从互联网上获取最新的资讯,更新自己的知识结构,对项目的技术方向有个明确的认识,才能更从容地应对未来的技术变化。

         4.项目经理应与职能经理一起为促进团队的技术提高而努力

当项目接近尾声的时候,项目经理需要准备一个总结的报告,对项目进行一番评述。而组员的工作基本就已经结束,其实这时需要做的工作非常重要,就是对软件开发过程中的一些技术点进行总结,比如生成能够重用的控件、某一问题的通用解决办法等。这些工作,对于技术人员来说是一种积累,同时,对于公司来说也是一笔潜在的收益。因此,项目经理应该安排技术人员进行这方面的工作,多数情况下,职能经理可能考虑到现实的情况,会安排他们直接进入下一个项目。但项目经理应该与职能经理进行很好的交流,争取到一部分的时间来进行上述的工作。所谓磨刀不费砍柴工,大量的知识积累,可以更高地提高开发人员的工作效率与开发的产品的质量,到头来,还是解除了项目经理的一大头疼问题。

 

总结

啰嗦了那么多东西,只是想谈谈自己对项目管理中遇到问题的想法。其实上面的每一点都可以展开成一本书的容量,只是自己还没有那个能力去分析的那么彻底。毕竟自己也是一个刚刚步入项目经理队伍的新手,更多的时候,还是需要去从项目中学习经验,总结成败。也希望自己能够及时将自己的经验总结拿出来与大家分享与交流,从大家的意见中,吸取更多的精华。

posted @ 2006-09-20 21:58 布鲁斯南 阅读(1667) | 评论 (17)编辑

2006年8月30日

谁动了项目的时间?

项目进行到今天,我突然发现项目已经花费了快70%的时间,而离编码结束似乎还很遥远,面对着领导质问般的眼神和组员迷茫般的目光,我深深地吸了一口气,大脑开始了高速地运转,到底谁动了项目的时间?

 项目情况

首先介绍一下项目的大概情况:

其实项目倒不是很复杂,一个处理业务流程的系统。接到项目的消息是七月底的时候,由于当时领导与客户谈妥之后,客户想在八月中旬就看到,所以当时就非常紧张。考虑到时间如此之紧,项目便匆匆开始。本来计划三个人的,但是考虑到时间太急,又加了三个人进来。在写SRS的过程中,客户那边传来消息,DEADLINE不会这么紧,这样我们紧绷的神经轻了下来,这一松就松出了问题,对于一些不确定的需求我们一直也没有得到客户的确定,这段时间里我一方面对SRS进行尽可能多的理解,另一方面安排设计阶段的任务。随后的工作也基本上是重叠地进行的,在对需求没有清楚认识的情况下开始了设计工作,设计没有完全结束的情况下,编码又开始进行了。在编码开始后,SRS其实还没有RELEASE,MILESTONE也一直没有到。但是我们也不能一直等下去,编码在一步步地进行,突然之间,我发现,时间不够用了……

 下面,我就从几个方面来分析一下为什么我的时间不够了,它们都去哪儿了呢?

进度安排

在先前的安排下,我的计划做的非常粗,因为时间实在是太短了,做的计划基本上是Mission Impossible的。在得知时间宽松一点以后,我把计划做了适当的调整,个人觉得还算比较合理,但是计划的实施并不都像计划那样的完美。

需求的不清楚使得文档的完成一托再托,耽误了不少时间,我看这样下去肯定不行,就开始了设计工作,而在设计的过程中,我们一边设计,一边等客户的消息,可是过了很长时间,最终等到的客户回馈是没有回馈。这才坚定了我们的想法,开始大干实干。而这时,项目的进展情况已经与我的计划差别很大的,设计期本来是一个星期,结果花了两个半星期,虽然在设计文档初稿完成并讨论后,我安排了一部分的编码工作,因为我不想让时间浪费,人员闲置,但是这部分的工作也花了不少的时间,使得设计的质量并没有达到预想的效果。

 

当然,还是那句老话,计划永远赶不上变化。即使计划的再好,在实施过程中总会发生一些事情让你的计划变得毫无意义,况且谁又能把计划做的如此天衣无缝呢。我的理解,对于计划,只需要一个大概的规划即可,即分哪几个大的阶段,每个阶段大概多久,需要多少人即可,在项目开始就制定一人精确到每天每时每人的计划完全是扯淡。

对于计划,我的一点感受就是制定计划是件困难的事情,因为软件开发不像别的计划,所有的步骤都是事先确定的,不需要你去做一些创造性的开发。而软件开发则是一项目创造性的工作,做为项目经理,每周,甚至每天都需要对于开发组成员制定计划,这种任务都是根据项目的具体情况来划分的,而且,我们的项目由于规模小,并没有专职的设计人员,每位成员都参与到设计中来,但是有一个问题就是成员都是新手,而且所用的技术都不熟悉,这势必会影响到任务执行的效率。

客户关系

客户关系是一个非常重要的问题,这个项目的情况有点像传统的项目开发。在确定项目的时候,客户发来了一个需求,然后我们根据其需要写出需求文档,然后就给客户发过去,希望能返回一些反馈。但是实际情况是文档发过去后就再也没有回馈信息。在开始的时候,我们只与客户有过一次电话会议,寻问了一些不清楚的需求。

但是随着项目的进展,更多的不清晰的需求展示在我们面前,而这以后我们再也没有与客户进行过沟通,不光是界面,还有需求,都不知是否让客户满意,现在只能等做完测试后交付给客户看看客户的认可度如何。

与客户的沟通实在是太少,结果如何,只有等项目结束后才知道了。

资源管理

在这个项目中,资源对于我来说主要就是时间的计算。每位成员在项目中的投入比例都是事先决定的。比如说只在这一个项目中工作,就是100%,如果还有别的项目在同时做,可能就是50%的时间在这个项目上。在项目开始后,我犯了一个错误,就是算时间的时候基本上按实际工作来说,比如一位100%在项目中的成员今天只花了4个小时在这个项目上,那么我统计时也只算了它4个小时。而其实应该是统计100%的时间。在得知这个错误后,我才发现刚开始编码时,我们已经花了将近一半的预计时间了。

要解决这个问题,完美的方案就是把成员每天的时间都安排满,这样的话,项目经理既不会担心无谓的时间消耗,又为项目的不增进展而感到满意。但是,这种毕竟只能是一种幻想,不可能会实现。但怎么去更高效的安排每位组员的工作,这又与上面说到的任务计划安排联系到一起。这个问题还需要学习了。

交流沟通

这里的沟通问题指的是组员之间的沟通。这个问题在项目的前期特别明显,所有的组员对于需求分析及设计的工作更多的是与我项目经理来联系,等于是我去做一个传递信息的中枢,对于需求的不清晰着实让我非常为难,甚至有时我前后说的结果都不一致。为了解决问题,我特意的将一些工作分派给两个人来做,但是效果仍然没有太大的改变,两个人之间的交流还是不够。到了设计的中后期,以及编码,这种情况才有所改变,因为此时必须要与别人去联系,交流才能将自己的工作进行下去。


 

后期的交流中经常发生对需求认识不清楚的情况,这又要谈到文档的问题。项目中的文档我觉得主要有两个方面的作用,一个是写文档的过程是一个思考的过程,可以帮助我们去尽可能多得思考;另一方面是交流,让大家都能通过文档了解所需的内容。但是不是每个人都会仔细的阅读几十页的文档,如何让组员清晰的了解需求以及后续文档是一个难办的问题。

 风险控制

在项目进展中,风险管理还是按照来做的,每周去检查一下当前的风险状况,有无增减的必要。但是真正实施的时候,有些流于形式。首先,项目的风险项定义不难,总会定义出一些风险,但是如何去规避,发生了之后如何处理,就非常难于实现了。在当下的组织结构中,有的时候风险即使发现甚至发生了,也没有办法去处理。

阅读(1473) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-01-02 14:28:54

这个在现实中 确实经常遇到。