二、 项目风险的估计
前面说到,小型软件公司的项目经理往往是老板本人,有很强的风险意识。但在这里还是要着重说说软件工程的风险管理,因为项目经理认识的风险大多局限在商业风险(销售问题等)中,对风险的理解很片面。
软件风险是指软件开发过程中及软件产品本身可能造成的伤害或损失。风险关注未来的事情,这意味着,风险涉及选择及选择本身包含的不确定性,在软件开发过程及软件产品都要面临各种决策的选择。风险是介于确定性和不确定性之间的状态,是处于无知和完整知识之间的状态。另一方面,风险将涉及思想、观念、行为、地点等因素的改变。根据风险内容,我们可以将风险分为项目风险(成本提高,时间延长等)、技术风险(技术不成熟等)、商业风险(销售问题等)、战略风险(公司的经营战略发生了变化)、管理风险(公司管理人员是否成熟等)、预算风险(预算是否准确等)等。
另外,我们还可以将风险分为已知风险(如员工离职等)、可预报风险(从以往经验得出可能有风险的)和不可预知风险。
例如,在一些订单开发的软件中,存在着很大的商业风险。林子大了,什么鸟都有。客户多了,需要不同,客户相关的风险出现的概率不一样。一些人只知道他们需要什么;而另一些人知道他们不需要什么。一些客户希望进行详细的讨论,而另客户则满足于模糊的承诺。客户有不同的个性。一些人喜欢享受客户的身份,而另一些人则根本不喜欢作为客户。一些人会高兴地接受几乎任何交付的产品,并能充分利用一个不好的产品;而另一些人则会对质量差的产品猛烈抨击。一些人会对质量好的产品表示赞赏;而另一些人则不管怎样都抱怨不休。客户和供应商之间也有各种不同的通信方式。一些人非常熟悉产品及生产厂商;而另一些人则可能素未谋面,仅仅通过信件来往和电话与生产厂商沟通。一个“不好的”客户可能会对一个软件项目组能否在预算内完成项目产生很大的影响。对于项目管理者而言,不好的客户是对项目计划的巨大威胁和实际的风险。
对于大多数软件项目而言,风险因素——性能、成本、支持、进度,也代表了风险参考水平值。即,对于性能下降、成本超支、支持困难、或进度延迟,都有一个水平值的要求,超过它会导致项目被迫停止。如果风险的组合所产生的问题引起一个或多个参考水平值被超过,则工作将会停止。在软件风险分析中,风险参考水平值存在一个点,称为参考点或临界点,在这个点上,决定继续进行该项目或终止它(问题太多)都是可以接受的。下图以图形方式表示了这种情况。如果风险的组合产生问题导致成本超支及进度延迟,则会有一个水平值,即图中的曲线,当超过它时会引起项目终止。
三、 项目进度成本效益的估计
其实,这也是项目风险有着紧密联系,是项目风险发生的一大因素之一。为此,需要做到以下几步:
1、在制定项目计划时,必须进行项目的需求分析,明确项目的需求。
在的需求分析阶段,往往存在着这样的误区:在项目的需求分析阶段,开发方与客户方在各种的问题的基本轮廓上达成一致即可,具体细节可以在以后填充。因为无论开始时有多么细致,以后对需求的修改几乎是必然的。当然这样做是有原因的:在具体实际中由于种种原因客户方很难在需求分析阶段全面而准确地描述所有问题。随着开发进度的推进,往往会有一些需求的改变。但是这样做,由于需求阶段对问题的描述不够细致,导致后来预算超出或者时间进度达不到要求。
正确的做法是:在项目需求分析阶段,双方必须全面地尽可能细致地讨论项目的应用背景、功能要求、性能要求、操作界面要求、与其他软件的接口要求,以及对项目进行评估的各种评价标准。并且,在需求分析结束以后,双方还要建立可以直接联系的渠道,以尽早地对需求变动问题进行沟通。并在项目需求分析完成后,和客户明确项目的哪些部分可以在日后的进度中能修改,修改的限度,哪些不能修改。例如,应用背景、功能要求方面应该是在需求分析阶段确定,日后不能做修改。而性能、界面及接口等可以在日后作有限度的修改。
2、制定项目计划:
有人这样说计划的,“计划,计划,纸上画画,墙上挂挂,计划不如变化!”。计划很容易成为空话,特别是在软件工程中,影响计划的因素太多,计划形同虚设了!但是,软件进行项目管理的目的是综合各种因素,制定合理的计划,并通过计划的实施,使其规范化,从而提高项目的效益,提高人员效率,降低项目的成本。
制定项目计划首先对项目进行估算,粗算出项目的总体进度。然后进行精化:确定概要设计阶段、详细设计阶段、编码阶段、测试阶段、安装及维护阶段等阶段的具体要求、完成时间、投入人力物力,并确定几个关键阶段。这些关键阶段的要求进度必须在指定日期之前完成。后做出项目进度表,列出在每个阶段的难点要点,要注意的问题。,并将需要分析阶段的内容和项目计划、进度表整理成文档,分发到相关人员手上。
3、充分考虑影响项目计划的因素,并做出相应的措施。
影响因素可以分为主观因素和客观因素。客观因素有客户相关风险,外部环境的影响,停电,机器损坏,不能上网等原因。客观因素在一定程度上可以转变为主观因素。主观因素有:人的因素、技术因素,资源因素。人的因素,本项目是否有足够的人手,投入本项目的每一个成员有没有要兼顾其他事情、项目,人员的流动、休假甚至是离职,这些对本项目的计划有多大的影响,并对此作处相应的不久措施。技术因素,本项目是否涉及到技术问题,所占比例是多少,以前是否有个类似的问题,新技术对本项目人员而言,新到什么程度,解决需要的技术问题。要注意,盲目追求新技术,也会影响项目的进度,甚至拖垮整个项目,成为技术先烈。还有一个技术问题是,本项目的人员,对要实施的软件的行业背景的熟悉程度。根据这些因素决定是否对本项目的人员进行培训!!资源因素,项目经费是否充足,软件配置,硬件配置是否及时充足。总的来说,可以把影响项目的计划划分为A—灾难的 B-严重的 C-轻微的 D-可忽略的,对相应的等级作处相应的应变措施。
4 、根据计划估算出成本。计划一旦确定,可以通过人力资源成本、日常办公费用、软硬件的损耗等算出本项目的成本。
四、 项目的立项:
只要经过管理方式的考虑,风险的评估,项目进度成本效益的衡量,再综合其他方方面面的因素,做出决定,是否立项。
第三章 编码的管理
在这里首先要声明一点的是,虽然在这里并没有着重强调系统设计,但系统设计是软件工程管理的很重要的一部分。这里,项目确定计划包含了系统设计。
在以前,甚至是在现在,也有相当大的一部分人是这样认为的:软件程序主要由代码组成,因此编码阶段是整个软件项目的重要的阶段,应该给与大量的时间,并且集中主要的资源。
其实,与以前相比,由于软件的规模和复杂度的增加,以及半自动化软件代码开发平台的出现,现代软件项目管理的中心发生了转移--不是着重编码阶段,而是着重系统总体/详细设计阶段。一般说来,在现代软件项目管理中各种资源的合理分配比例是:项目论证、风险评估阶段3%,项目需求分析阶段8%,系统总体/详细设计阶段45%,编码阶段10%,系统测试阶段34%。
但是,如果软件项目没有实施好的话,频繁地对软件进行修改、甚至重做,编码阶段会耗费大量地时间,在整个软件工程所占地时间比例也大大增加。很多软件工程,不能按计划完成是因为编码阶段的问题太多了。