一个良好的计划对项目的管理至关重要,看到过很多介绍软件项目计划制定的文章,但主要还是依据项目管理的要点来进行,总感觉理论性过强,不便于操作,下面则根据个人经验来讨论一下软件项目计划的制定。
笔者认为制定计划的意义是在于可以真实客观的反映项目全貌,及时的发现问题,纠正问题,确保项目可严格按照计划执行,项目的进展是由众多因素来构成的,所以,如何快速的了解项目的真实情况,并加以控制,制定计划是一个最好的手段,但并不意味着制定了一个良好的项目计划,就可以成功的完成项目,前面说过项目是由众多因素构成,制定了项目计划仅仅是项目的开始。所以,项目应该有个好的开始,并努力朝着好的方向发展。(项目计划的意义在于通过制定计划来预测在现有的资源情况下你能否完成项目的目标,你完成项目目标的把握程度和主要风险,将大项目目标进行分解和细化,以对项目有更加深入的理解。同时项目计划是后续项目跟踪控制的基础,可以及时发现偏差并纠正;最后项目计划是项目管理持续改进的基础,在项目结束进行复盘的时候可以总结和分析和计划的差异,分析各种数据和偏差,及时改进我们的方法和过程,积累数据。最后不能因为计划不准确而不做计划。)
一、了解制定计划的先行因素
简单的讲项目计划的先行因素是你在制定项目计划中所依据的内容:包括项目范围、项目资源及质量标准。以一个最简单的任务来分析,至少要具备这三点因素,任务的执行时间如何确定?任务由谁来完成?如何判断此任务已经真正的完成? 项目管理者联盟,项目管理问题。
如果再进一步分析,则需要风险管理计划,针对在项目过程中出现的各种风险进行评估、分析、应对及补救。其他的内容从一定的程度上可以制定在计划中完成,譬如测试计划。
任何一个项目的启动通常情况下都会先制作项目范围说明书,只是有时候名称会有所不同,此类文档可以支撑计划的制定,譬如,项目需要完成的内容、项目完成的约束时间、项目资源的评估、项目费用的估算、项目质量的考核标准、及项目最终验收的标准。但此类文档通常情况下不能够很明细,所以,建议将此类文档中的内容进行摘要,并制定在计划中逐一落实。
总结:项目计划的先行因素应该是项目的可行性分析,对项目的目标和范围的理解,对项目可能面临的风险的深刻理解,对你项目所处于的环境的认识,对项目各方干系人的初步认识和分析。
二、开始制定计划
第一:要明确项目中到底需要做哪些工作内容,这也是通常所说的活动定义。譬如:针对软件项目而言会存在系统设计、编码、测试等工作内容,这些都属于项目活动,但可能还会有前面提到的需要细化的内容。通常情况下软件项目会有需求调研、需求分析、概要设计、详细设计、编码、测试、集成、试运行等内容(注意此处对应在确定了项目的目标和范围,假设和约束后,需要首先确定的就是项目选择的生命周期模型和项目管理方法论)。在此基础上,将业务需求进行自上而下的分解,然后制定出最基本的项目工作内容。当然除此之外,还有很多工作要做,这则需要根据项目的实际情况来进行确认了。
在谈到活动定义中,不得不说的就是WBS(工作分解结构)。实际在确定有哪些工作内容的同时,也是在制定你自己的工作分解结构。(注:当确定了软件开发生命周期模型后,一般就有比较成熟的项目WBS结构模板和进度模板可以借鉴。)
第二:制定好工作内容后,则需要对这些工作内容进行排序,即活动排序,排序过程需要明确的有:工作内容的优先级,前后完成的顺序及工作内容之间的依赖关系。
就好像编码需要依赖于设计的成果,而设计又依赖于需要的分析,需求分析又依赖于需求的调研结果和用户的要求,这是一个前后的次序,同时又存在一定的依赖性。有时候这种关系会复杂一些,譬如用户的要求可以分解为对业务功能的补充和系统考核要求,这样,这种依赖关系就会产生分支,业务功能的补充会作为需求调研成果进行完善,而系统要求则作为质量计划进行最终的系统考核。同时,如果结合业务需求进行考虑,这种前后的依赖关系和顺序将更为复杂。(注意产生分支的原因是大的子系统或模块,我们会进行分解为更细的功能单元以便进行并行开发,因此后续自然会涉及到这些单元的集成问题。在CMMI三级中有专门的PI产品集成过程域可以借鉴。)
但有些任务也并非完全一定要依赖于另一项任务,所以在确定其依赖关系的时候要将此种情况考虑进去。实际很多项目经理已经这样做了,当需要赶进度的时候,通常就会打破这种依赖关系让任务先行的运行起来。
针对外部依赖关系的工作内容,笔者不认为有特别好的办法可以进行控制,只能是通过加强风险意识,提早制定风险计划以应对此类事情的发生。毕竟PM的权限是有限的,而且也需要PM要有很好的协调处世能力。这也是PM面临的实际问题。(并行的前提是实现约定各种接口以便于后续的集成,如果前期没有这种约定后续集成会发生大量的问题。)
第三:则需要明确里程碑,不要小看这个东西,里程碑是严格用于控制项目计划的重要指标。里程碑如果出现了变更,则表示项目出现了重大问题,有可能直接导致最终项目无法按照指定要求完成。
|