如何进行项目策划
 

2009-09-22 作者:邵峰 来源:邵峰的博客

 

一、概述

项目策划的目的建立并维护用以定义项目活动的计划。

项目策划阶段的主要活动包括:确定项目目标和范围;定义项目阶段、里程碑;估算项目规模、成本、时间、资源;建立项目组织结构;项目工作结构分解;识别项目风险;制定项目综合计划。项目计划是提供执行及控制项目活动的基础,以完成对项目客户的承诺。

项目策划一般是在需求明确后制定的,项目策划是对项目进行全面的策划它的输出就是“项目综合计划”。

在笔者经历或者监管的很多项目中,发现一个规律掌握项目计划的项目经理在项目过程中管理会比较到位,而不掌握项目计划或者项目计划不到位的项目中我们的项目往往出现很多故事,项目管理往往是越管越乱。项目计划是帮组我们项目经理去理清项目的过程和各组织活动之间的关系,只有搞清楚这些,我们的项目才能被管理起来,否则我们不能谈项目管理,只能说我们在管着项目,但是还没有理清楚,结果则是什么也没有管到位。

二、确定项目范围

项目范围包括项目需求范围和项目工作范围,项目工作范围是为实现项目目标并使客户满意(有效地完成项目目标)而必须做的所有工作,它包括项目的最终产品或服务以及实现该产品或服务所需要做的各项具体工作;在《软件需求开发》中我已经说过了项目目标和需求范围的确认,本节内容是确认项目的工作范围。

项目工作范围的确定是为了有效地完成项目目标而界定的主要工作内容的活动,会将项目的可交付成果划分为可控的、易于管理的单元模块。

1、确定客户提供的工作产品

在确定项目范围的前,我们要与客户确认由客户提供的工作产品或资源,以及这些工作产品或资源的标准、提供时间、方式等信息。通过确认客户提供的工作产品我们可以界定项目中的哪部分工作是由客户完成,哪部分工作将要由项目组去实现。

2、确定交付给客户的工作产品

在确定项目范围的同时我们也要确认交付给客户的工作产品及资源,以及这些工作产品或资源的标准、交付时间、方式等信息。以确定该项目是否有额外的工作任务。

3、确定项目的工作范围

在项目中工作范围与软件生存阶段是基本对应的,项目工作范围可以理解为我们承担的主要开发阶段,一般的开发阶段有:概要设计、详细设计、编码、单元测试、产品集成、系统测试、验收交付、维护。

4、确定项目的质量目标

与客户确定我们软件需要达到的质量目标,在客户提出的质量目标中往往只有一些非功能需求的目标,大多与技术相关,而在项目开发过程中的质量目标可能客户不是很关心,涉及过程的质量目标大多也只有交付后的缺陷率。这个时候我们要结合公司的过程能力以及客户可能提出的质量目标进行能力匹配,并制定出项目的质量目标。过程能力匹配与分析以后单独进行说明。

过程能力即项目组执行项目活动的子过程能力。如,代码生产率(单位:KSL/人月),单元测试bug检出率(个/KSL)等,这些过程能力都有一个中线,3σ上线以及3σ下线,过程能力是根据公司历史项目的数据依据“过程标准差”的方法统计分析得出。

5、建立WBS工作包

依据项目需求范围和项目工作范围,把需求作为横坐标工作阶段作为纵坐标,我们可以得到一个项目的基本任务的工作包,我们一般把这类工作包作为WBS工作包。在WBS中我们也要包含任务返工、项目管理类和项目支持类的工作包。

三、定义项目阶段、里程碑

我们定义了项目的目标和范围,并建立了WBS的工作包。那么我们如何实现项目的目标,首先我们应该是分解项目目标,一般我们把它分解为里程碑目标或阶段目标。

1、 确定项目的生命周期模型

项目生命周期各阶段的定义,依赖于需求的范围,项目资源的估计,以及项目的本质。项目一般都包含多个阶段。软件项目阶段的决定,通常包含软体开发模式的选择与改进,以说明项目活动间的相互关系与适当次序。生命周期模型的一般有瀑布、原型+瀑布、迭代、增量模型。

2、 选择生命周期模型的准则

A)瀑布模型

  • 适用于新的有较多用户的产品、平台/中间件开发项目,或者是用户对开发过程有严格要求的工程定制项目 。
  • 充分理解用户需求,且需求是确定不变的。
  • 用户有一定的能力,对需求的表述是确切的 。
  • 所有过程工作产品的控制基线,需要有可见度和可靠性 。

B)原型+瀑布模型

  • 新领域的应用项目的开发:如企业应用系统开发项目等。
  • 项目包含一种新技术,例:新硬件、新的系统架构等。
  • 需求不很清楚。
  • 存在关于性能、可靠性和可行性的主要的、未解决的问题。
  • 用户界面对系统成功是很关键的,但不很清楚。

C)迭代模型

  • 新领域、新技术的研发项目 。
  • 规模较大的项目或产品 。
  • 需求的清晰度低,且需要进一步的调查。
  • 技术或体系结构方面的知识匮乏。

3、 定义项目的阶段

我们依据以确定的生命周期模型定义项目阶段,在定义阶段的时候需要明确每个阶段的输入、输入、目标及主要工作。

定义项目阶段主要是对输入、输出以及工作量、规模、质量目标偏差控制范围的定义,我们一般定义输入工作产品的标准、要达到的质量目标,输出工作产品的标准,要达到的质量目标。阶段工作产品的工作量、规模以及质量目标的偏差控制范围,每个步骤的细节执行方式及这些细节活动的检查方法。如果阶段和里程碑时间点一致,可以与里程碑一起判断阶段目标的达成。

4、 定义项目的里程碑

在瀑布模型和增量模型的阶段就是我们说的需求开发、概要设计、详细设计、编码、单元测试、产品集成、系统测试、验收交付、维护这些阶段。一般瀑布模型的里程碑设立根据项目规模和特点为需求、设计、编码+单元测试、产品集成+系统测试、交付;增量模型一般里程碑是每次可交付产品为一个里程碑,如果规模很大可以按照瀑布模型设立子里程碑。

迭代模型的里程碑一般是每次迭代就是一个里程碑。

我们上面说了里程碑定义的准则,简单理解里程碑可以作为是项目的一个可交付并能给项目工作承上启下的点,所以里程的目标、准入和准出的定义,是在项目实施中对项目能否达成项目目标的检查依据。

里程碑的准入准则,就是输入里程碑的工作产品、资源是否满足该里程碑的要求。我们就要定义输入工作产品标准、要达到的质量目标。而里程碑的准出不仅仅是工作产品的标准和达到的质量目标。还要判断这个里程的进度、成本、工作量、规模的偏差以及项目的变更是否在控制范围内。

5、 定义项目的过程

确定项目执行过程中的子活动级活动的顺序,并给出这些活动的输出。在大部分公司都有一个项目执行过程的全集,项目在开始的时候依据项目的工作范围缺确定项目要执行的子过程以及输出的工作产品,在CMMI中把这个活动叫做裁剪项目过程定义,在这里我们要说明的是“裁剪”不是“裁减”,在对项目过程裁剪的时候我们不是简单地考虑做或者不做,应该在不做的时候考虑是合并还是用其他的替代方法来执行。

四、估算项目规模、成本、时间、资源

对于已确定的项目范围,定义了阶段和里程碑,那么我们每个阶段的输出的工作产品的工作量、成本、质量如何估算就十分重要,这些也是判断阶段目标和里程碑是否达成的重要判断依据,而要估算工作量、成本等工作产品属,我们就必须先估算出工程阶段每个工作包的工作产品规模。

1、估算的顺序

在整个估算中,规模的估算是基础,大部分的估算都是基于项目规模的估算而来的。在规模时,对于采用的类是技术、开发语言、架构的项目,他们的工作产品规模与需求规模的比例是基本稳定的。如:1个简单的数据库录入功能,用Java编写的代码一般是20行,概要设计是1页,详细设计是1.5页,需要20个单元测试用例等……。这个比例关系的变化是很少的,但是工作量和公司的生产率人员水平等都有关系,估算工作量我们要考虑的人为因素要更多。所以我们对最稳定的那部分优先估算。

2、确定估算的方法

目前典型的估算方法有:经验值估算、功能点估算。

但是我们发现选择了估算方法,在项目执行中我们会发现这些估算很不准确。建立公司的估算能力是解决估算准确性的唯一途径,估算能力一般是根据公司历史项目的数据来建立估算的模型。当然我们为了获取更准确的估算值,也会采用多种估算方法,通过多种估算结果去验证估算的准确性。

3、确定估算因素

在确定估算方法后我们依据估算方法的特点要去了解项目具体功能的特点,一般设计及实现的复杂度、技术要求、可维护要求、可配置要求、可靠性要求等一些非功能需求都与项目的复杂度相关,还有一些特殊的业务功能也会给项目的复杂度相关,这些要素就是能否准确估算项目前提。

4、估算工作量和成本

一般工作量和成本的估算是依据项目的估算模型,依据工作产品的规模去估算工作产品的工作量。

成本的估算我们要考虑项目管理类、支持类及返工的工作量。在建立项目度量能力和模型的时候我们可以从历史项目中推出这些工作量的估算模型。一般每个开发阶段都要预留15~20%的工作量用于返工。管理类的工作量一般是项目总开发工作量的10%,质量保证、MA及其他支持类的工作量一半是项目总工作量的2~5%。

5、估算项目的时间

依据已经估算出的项目规模,每个阶段的工作量,结合现有资源估算项目的概要时间,时间估算的结果是阶段、里程碑、项目的起至时间。

6、估算项目的风险

依据历史项目积累的风险,在项目开始阶段对项目的技术、管理、质量、资源、需求等方面可能出现的风险进行全面评估。并评估出来的风险制定规避和管理措施。

7、估算的评审

项目的估算结果一般就是项目预算,我们一般先要对这些预算进行技术评审,以确定预算的合理性。然后还应通过到由公司高层的管理评审。

五、建立项目组织

我们已经有了估算结果和各个阶段的时间,这个时候是我们考虑项目的组织建立,一般有:PM-项目成员,PM-Leader-项目组成员、PM-SubPM-Leader-项目组成员等模式。

在PM-项目成员这个管理模式是很好管理,这个模式下一般项目组人员规模不超过10个人,项目在对问题进行沟通的时候一般靠喊一喊就能全部传达。

在后面2个模式中,项目组成员规模一般都在10个以上有的大型项目甚至能到几百人。为了将这些团队管理好,我们要建立使项目组能高效的管理和沟通的方法及原则。这些方法及原则主要有:明确组织的管理和监控的方法及流程,要明确各个岗位的职责和权利,要明确各个层级沟通及汇报的方式,明确各个组间的沟通及汇报的方式。只有明确了这些才能保证项目组的各个团队都能高效运作,这个也是企业管理文化在项目中的体现。

六、建立项目综合管理计划

为了能使项目能正常开展并且有依据,我们需要建立一个综合的项目管理计划。这些计划的主要内容有:

1) 项目的质量目标

定义项目各个子过程及工作产品的质量目标。

2) 项目的生命周期模型

定义项目的生命周期模型。

3) 项目的阶段和里程碑计划

定义项目的阶段、里程碑的输入、输出准则,以及阶段、里程的主要活动及时间计划。

4) 项目的监控计划

定义项目的监控对象、监控频率、监控原则、监控依据,定义项目的会议制度、沟通方式、以及项目中出现问题的沟通及汇报原则。

5) 项目的度量计划

依据监控要求和公司要求,定义项目要进行度量的度量元、度量频率、度量方法、度量结果保存方法。

6) 项目组的培训计划

计划应项目需要而进行的培训的计划。

7) 项目干系人管理计划

定义项目组的干系人,并定义各干系人参与项目的方式,以及与干系人汇报沟通的方式。

8) 项目风险管理计划

定义项目风险管理的方法和原则。

9) 项目的评审计划

定义项目中要进行评审的工作产品、并明确他们的评审方法、通过原则。

10) 项目需求变更的管理计划

定义项目中涉及需求变更方法和原则。

11) 项目的数据管理计划

定义项目中各类数据管理的方法和原则。

12) 项目的配置管理计划

识别项目中进行配置管理的配置项,并定义出这些配置项的控制级别、控制权限等。

13) 项目的过程和产品质量保证计划

七、建立项目的详细时间计划

一般详细时间计划也叫做日程表(Schedule)。它是依据WBS中所列出的任务、任务的估算工作量、人员。给出所有任务开始时间、结束时间、执行任务的人员、估计的工作量的详细项目日程表。

八、评审计划

发现并找出计划中错误及问题。

消除各计划的不一致问题。

获得干系人对项目的承诺。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织