当了一段时间IT项目经理,把一个软件开发项目的项目管理的实际过程写一下供大家讨论和参考。IT项目管理跟其它工程项目管理最大的一个不同就是人的管理,项目成员不是简单的机器,人员的知识技能,团队建设,项目沟通等内容往往是项目管理的一个很关键内容。这个方面可以参考《人有神话》,《软件工艺》,《最后期限》书籍,我的Blog上也有相关的读书笔记可以参考。
首先我们用思维导图把计划阶段的相关活动归纳一下再进行具体的分析:
1.项目目标和范围
开始一个新项目或版本时候,首先是和用户一起确认需求,进行项目的范围规划。项目是范围,进度,质量和资源四要素的平衡,用户对项目进度要求和优先级高的时候,我们往往要缩小项目范围,对用户需求进行优先级排序,排除优先级低的需求。另外我们做项目范围规划的一个重要依据就是我们的历史经验数据,对项目特征的清楚认识,项目范围规划初期需求你进行一个较宏观的估算,否则你很难判断清楚或给用户承诺在现有资源情况下,你3个月时间里面是否可以完成20个或更多用户功能。
正规过程好像是先确认项目范围,然后根据WBS->进度计划确认实际的项目周期,但实际情况往往很难如此,用户往往对进度的关注度大于对范围的关注度,一个项目半年或一年都看不到具体的产品出来用户肯定是无法接受的,所以我们的软件项目一般也是按版本增量迭代进行开发。
另外这里需要强调下项目目标的确定,项目的目标不能简单理解为在某个时间点完成所有功能。项目另外一个重要目标就是项目的质量目标,你完成的这个项目需要达到那个等级的质量标准,交出的产品BUG泄漏率要控制在什么范围内等内容。项目的质量目标不会影响到我们的范围,但会影响到我们后续评审,测试等时间的安排,直接影响到项目的进度。
PMBOK里已经明确提到项目范围定义的另一个重要目的就是项目的绩效测量和验收准则,你交付项目的时候用户会根据用户需求说明书内容对项目进行验收,所有我们项目的范围的定义必须是明确,量化,可验证和可测试的,这样才能够避免后期无谓的纠纷。
另外在概述阶段需要分析项目的假设和约束,假设和约束又分为技术方面和非技术方面,在这里我们分析的所有假设都可能成为项目的风险。
2.项目进度的确定
项目的目标和范围确定后,需要开始确定项目的过程,项目整个过程中采用何种生命周期模型?项目过程是否需要对组织级定义的标准过程进行裁剪等相关内容。项目过程定义是进行WBS分解前必须确定的一个环节,你采用瀑布模型和增量迭代模型对WBS分解和进度计划安排显然是完全不同的。
项目过程确认清楚后开始进行项目的WBS分解,WBS分解一般是项目组的核心成员参加,但项目经理应该是起主导和协调作用。WBS分解方法一般有基于过程和基于成功两种方式,但两种方式可以混合使用,比如在高层分解的时候先分解出子系统和工作包,在底层的时候再按照需求,设计,编码和测试各个过程进行分解。WBS的最底层工作单元需要是可以独立核实的产品,需要去下达计划和任务,工作单元需要有明确的责任人,因此有时候在没有做仔细的估算时候我们很难让工作单元满足这些要求,这样就难免在进行估算过程中还要对WBS进行优化和调整。
WBS分解完成后可以开始进行工作单元的估算,估算一般有专家法,三点法和功能点法估算,由于我们的项目采用专家法估算,因此更需要项目核心成员和有经验的成员参加,估算一般会针对工作单元的单位和复杂度进行估算,最后估算出项目的总规模,再除以项目的生产率后得到项目的工作量数据。专家法估算一般会进行很多轮,直到所有指标都收敛(收敛标准是组织或项目事先确定清楚了,如偏差<30%就算收敛)。对于一个软件项目而言,我们用专家法估算其实很难估算出具体的各个功能编码的代码行数据和编码的具体工作量,所以这里是需要使用项目的历史经验数据,即你在做历史项目的时候需求:设计:编码工作量的比例究竟是如何的?然后根据估算得到的需求阶段工作量数据去推算出设计和开发的估算工作量。所以从这点上也可以看出为何软件项目度量和分析很重要,因为你做的度量和分析数据都会做为你后续项目的重要依据。很多项目老说软件估算很不准,原因就在于你没有你自己项目的历史经验数据的积累。
在估算数据出来后,可以使用Project工具安排整个项目的进度计划,在项目进度计划安排中的两个重要内容就是关键人力资源的确定和关键路径的确定。在这两个因素确认清楚后要排出整个项目的进度计划就很简单了。对于项目关键人力资源确定一般可以采用工作单元->人员的责任矩阵进行分析,对于关键路径一般直接用运筹学中的关键路径分析法确定ES,EF,LE和LF四个时间即可。
在项目进度计划基本排出来后就可以规划和确定项目的里程碑和基线了,项目的里程碑和基线是项目重要的跟踪控制检查点,在里程碑项目还会做专门的里程碑报告,对项目的当前状态,项目的进度,工作量,规模,缺陷等各项指标的偏离进行分析。
整个项目进度计划基本出来后需要和项目组的所有项目成员确认,获取项目的内部承诺,项目成员应该对整个进度计划安排基本达成一致。项目计划还有需要支持计划需要制定,项目进度计划出来后整个可以通知QA和配置管理员分别制定质量保证计划和配置管理计划,项目经理协助测试负责人制定项目的系统测试计划。
3.项目计划的其它关键因素分析和确认
项目的方法,技术,工具和标准
这是项目计划中需要确定的一个重要内容,即项目过程需要使用哪些方法和技术,采用哪些工具,项目各个阶段的输出应该满足哪些检查标准等。一个项目中除了使用到常用的开发工具外,还会使用到需求管理,设计建模,配置管理,变更管理,IM沟通等诸多工具;使用到面对对象分析和设计,开发语言,数据库,测试等多种技术,在这里都需要分析和定义清楚,这将成为后续技能评估和培训的一个重要依据。
干系人分析:
所有对你项目有直接和间接影响的相关人员都是项目的干系人,在这里我们一般会按项目内部角色和外部角色进行划分。在对所有的干系人分析清楚后,BR>干系人分析:
所有对你项目有直接和间接影响的相关人员都是项目的干系人,在这里我们一般会按项目内部角色和外部角色进行划分。在对所有的干系人分析清楚后,还应该通过责任矩阵来分析各个干系人说涉及到的项目各阶段的相关活动。
项目成员技能和培训:
其实这是项目计划的一个重要内容,就是要对项目中的各个成员的技能进行评估,根据项目评估的结果来制定项目的培训计划,并对培训的效果进行跟踪。在这里常用的方法和工具有《项目成员培训需求收集表》,《项目成员技能评估表》,《项目成员技能沟通确认表》,《项目培训计划》
项目的关键依赖和承诺
项目的内部关键依赖和承诺一般会直接体现到项目进度计划中,但项目的外部依赖和承诺必须有专门的地方进行记录和定期进行跟踪。因为当你外部关键依赖无法得到满足时候将直接影响到整个项目的进度,打乱整个项目的步调。
项目风险分析
风险管理是项目管理的一个重要知识领域,也是CMMI评估的一个关键过程域。整个项目管理的过程就是不断的去分析,跟踪和减轻项目风险的过程。我们在分析项目风险过程中可以借助风险库,风险检查单,专家法,头脑风暴法等多种手段。一个风险主要包括了风险的概率,后果,影响范围,处理期限等方面的内容;风险的应对措施主要有减轻,承担,缓解和转移等;风险分析一个重要内容就是分析风险的根源,然后根据根源去制定专门的应对措施。风险管理贯穿整个项目管理过程,需要定期的对风险进行跟踪和重新评估,对于转变成了问题的风险还需要事先制定相关的应急计划。