在软件项目中,通常情况下都会分成以下几个阶段,项目立项、需求调研、需求分析、需求确认、功能设计、设计确认、功能开发、测试、实施推广、试运行、项目验收。这是比较详细的分法,还有一种比较大的分法,如下所示:
1、需求阶段:包括有需求调研、需求分析、需求确认;
2、设计开发阶段:功能设计、设计确认、功能开发、测试;
3、实施阶段:实施推广、试运行、项目验收;
从上面可以看到,可把项目阶段统分为三个大的阶段,从这三个大阶段方面,我们来分析下各阶段的重要性,这里所说的重要性是站上项目风险和控制难易成度的角度来考虑的。
首先来说说需求阶段,需求阶段的目的是为了了解清楚用户现在的情况和未来的一些想法,项目需求人员要通过各种方法把用户了解清楚,并转化为自己的理解,在这个阶段通常会存在以下几方面的问题:
A、怎么样让用户把他们的现状完整、准确的描述给你;
因为对于企业来说,都是分工合作的,每一个人都只会熟悉自己的业务部分,即使对于上层管理者,他们所了解的是大方向上面的东西,对于细节了解不够,所以在需求调研时,想准确、完整的了解到用户现状是非常困难的一件事,优期是各业务间的耦合部分,你有时会觉得找不到一个人可以说清楚这中间是如何衔接的。
B、现状中的问题无人可以承担
在经过一段时间的现状调研之后,你会发现这家企业中存在着各中各样的问题管理上的问题、或业务操作上的问题,这时你可能是为了要把现状陈清,所以希望能有个人出来说,是的,这块是有问题,这实际上也是一件很困难的事, 因为谁也不想承认自己的错误。
C、流程再造后无人愿意定案
在进行完现状调研之后,必然会进行必须流程再造,对于新流程的应用,必须会涉及到原来职责、职能的变更,对于这样的变更必然是要经过相关管理层人员的决策,这是一个长期而又慢长的过程,一般管理者都不会轻易的去改变现有的管理模式,所以这给需求确认阶段带来了不少的困难。
其次来分析下设计开发阶段,该阶段是建立在完成需求阶段的工作基础之上的,需求阶段的成果直接决定了设计开发阶段的工作。在该阶段的主要问题表现为以下几个方面:
A、开发过程中,用户提出的需求变更
在开发过程中,最让人痛苦的莫过与此了,谁也不想辛苦设计开发出的东西,刚完成就被用户否定了。
B、开发出的东西与设计的东西不一致
通常因为开发人员对于需求或设计的理解不够,会导致开发出的东西和设计不辅,从而不得不进行修改程序。
C、开发出的东西有一堆BUG
这是在正常不过的事情了,所以才需要测试啊。
最后来说说实施阶段吧,在经历前面的需求和设计开发阶段后,总算可以拿出东西给客户看了,实施阶段往往并没有想象中的那么顺利,在该阶段主要有以下问题影响的实施进度。
A、用户进行系统验证时发现自己看到跟当初想象的不一样
这个每个项目经理都会有体验吧,不管前期做了多少次变更,总规有那么些节点跟用户想的不一样。
B、上了系统后,用户不知道怎么做业务了
系统都是按照用户的要求进行设计的,即使有些流程跟以前不太一样,但也是通过用户确认认可了的,但在新的系统上,用户就是不知道该怎么做业务了。
C、有些人始终停留在老的操作模式上,不愿意改变
在实施推广阶段我们总会遇到一部分人,不管你怎么说,他总是坚持自己的想法,有的可能真的是不知道怎么改变,而有的也会是因为各种原因不愿意去改变,他们不改变你就永远无法完成系统的实施。
实施项目实质上也可以看成是一种投资,站在投资的角度来考虑,投资分析最重要的一点是前期的准备工作,真正的投资实施过程并不特别难,因为你只要按照前期计划的去做就可以了。所以说在软件项目中, 需求阶段是最为重要的,其次应该是实施推广阶段,最后才是设计开发阶段,为什么要这么说呢,可从以下几个方面来分析。
A、需求阶段的目的是为了搞清楚后面的工作该怎么做的,如果你都不知道用户的现状是什么样的,都不知道用户想要什么样的的东西,那后面的设计和开发出的东西可以说不可能满足客户的要求,也必然会经历一次又不一次需求变更,即使到了实施推广阶段你也一样无法进行推广,因为跟他们现在的业务完全不辅,你让人家怎么去用。
B、需求阶段因为是与客户进行交流互动的过程,因为你对客户的不了解(如果你了解,可能就不需要调研了),所以交流上会存在各种困难,有个事情,你甚至不知道该找谁去问。了解客户的现状还需要客户在时间和人员上的配合,改造他的流程,也需要相对领导的审批,这些都可能不是调研人员所能控制的,难道你想让客户停止现在的业务来配合你,这不可能;难道你想让客户的领导不要出差、不要开会,来给你签字确认,那更不可能。
所以需求阶段有很多因素是你不能控制的,所以是有风险的,所以是最困难的。
C、设计开发阶段其实并没有想象中的那么困难,假如说你已经知道了你要做一个什么的东西,你对的你团队又很了解,你应该可以控制他们,可以安排他们,那么接下来你要做的就是安排一步步的去实现就可以了,如果有难度那可能就是人力资源不够吧,那也没关系,你还可以安排加班呢,如果还不行,那你就应该提出来了,即使是简单的实现工作,算上加班,你现在的人手也不够,那只能增加人手或延长时间了。
这里你不要说中间可能会存在很多技术上的问题,或者进行二次开发时的一些切入点问题,这些我认为不是关键性的问题,作为一个项目团队,如果连一些技术问题都解决不了,还怎么去实施项目呢,再说现在对于业务功能的实现也不局限于一种技术,为什么你一定要选一个你实现不了的技术呢。
所以说设计开发阶段应该更多是量化性的工作,并且是可控制的,所以说风险应该也是最小的。
D、实施推广阶段,因为在需求阶段不管如何做,总规会存在一些需求变更的情况,其中在实施推广时表现的也最为强烈,并且实施推广阶段要涉及到用户业务操作方式的变化,所以说需要一些时间给用户进行转换与适应。另外在实施推广阶段中,因为所涉及到都是客户人员,有些时候还会是客户的客户,所以在应用推广时,会存在很大的障碍,主要还是业务切换上面的问题。
综上所述,在项目管理的三大阶段中,需求阶段最为重要,也重困难,其次是实施推广阶段,设计开发阶段应该是最容易的,因此我们在项目总的时间分配上,应根据各阶段的具体情况来制定时间计划。在通常情况下,应该三个阶段所有时间比例想近才对,你不要介意前期花太多的时间去做需求,那绝对是值得。对于设计开发阶段的时间可以压缩的话,可尽量压缩,把时间留给需求和实施推广阶段,不要把太多的时间花在内部上,而应该花在客户身上,不可控的才是风险,可控的算不上什么风险。
对于各个阶段具体快如何控制,需求阶段如何来做好需求,后面我会陆续进行分析,尽请期待……