【IT168 技术文章】
一个良好的计划对项目的管理至关重要,看到过很多介绍软件项目计划制定的文章,但主要还是依据项目管理的要点来进行,总感觉理论性过强,不便于操作,下面则根据个人经验来讨论一下软件项目计划的制定。
笔者认为制定计划的意义是在于可以真实客观的反映项目全貌,及时的发现问题,纠正问题,确保项目可严格按照计划执行,项目的进展是由众多因素来构成的,所以,如何快速的了解项目的真实情况,并加以控制,制定计划是一个最好的手段,但并不意味着制定了一个良好的项目计划,就可以成功的完成项目,前面说过项目是由众多因素构成,制定了项目计划仅仅是项目的开始。所以,项目应该有个好的开始,并努力朝着好的方向发展。(项目计划的意义在于通过制定计划来预测在现有的资源情况下你能否完成项目的目标,你完成项目目标的把握程度和主要风险,将大项目目标进行分解和细化,以对项目有更加深入的理解。同时项目计划是后续项目跟踪控制的基础,可以及时发现偏差并纠正;最后项目计划是项目管理持续改进的基础,在项目结束进行复盘的时候可以总结和分析和计划的差异,分析各种数据和偏差,及时改进我们的方法和过程,积累数据。最后不能因为计划不准确而不做计划。)
一、了解制定计划的先行因素
简单的讲项目计划的先行因素是你在制定项目计划中所依据的内容:包括项目范围、项目资源及质量标准。以一个最简单的任务来分析,至少要具备这三点因素,任务的执行时间如何确定?任务由谁来完成?如何判断此任务已经真正的完成?
如果再进一步分析,则需要风险管理计划,针对在项目过程中出现的各种风险进行评估、分析、应对及补救。其他的内容从一定的程度上可以制定在计划中完成,譬如测试计划。
任何一个项目的启动通常情况下都会先制作项目范围说明书,只是有时候名称会有所不同,此类文档可以支撑计划的制定,譬如,项目需要完成的内容、项目完成的约束时间、项目资源的评估、项目费用的估算、项目质量的考核标准、及项目最终验收的标准。但此类文档通常情况下不能够很明细,所以,建议将此类文档中的内容进行摘要,并制定在计划中逐一落实。
总结:项目计划的先行因素应该是项目的可行性分析,对项目的目标和范围的理解,对项目可能面临的风险的深刻理解,对你项目所处于的环境的认识,对项目各方干系人的初步认识和分析。
二、开始制定计划
第一:要明确项目中到底需要做哪些工作内容,这也是通常所说的活动定义。譬如:针对软件项目而言会存在系统设计、编码、测试等工作内容,这些都属于项目活动,但可能还会有前面提到的需要细化的内容。通常情况下软件项目会有需求调研、需求分析、概要设计、详细设计、编码、测试、集成、试运行等内容(注意此处对应在确定了项目的目标和范围,假设和约束后,需要首先确定的就是项目选择的生命周期模型和项目管理方法论)。在此基础上,将业务需求进行自上而下的分解,然后制定出最基本的项目工作内容。当然除此之外,还有很多工作要做,这则需要根据项目的实际情况来进行确认了。
在谈到活动定义中,不得不说的就是WBS(工作分解结构)。实际在确定有哪些工作内容的同时,也是在制定你自己的工作分解结构。(注:当确定了软件开发生命周期模型后,一般就有比较成熟的项目WBS结构模板和进度模板可以借鉴。)
第二:制定好工作内容后,则需要对这些工作内容进行排序,即活动排序,排序过程需要明确的有:工作内容的优先级,前后完成的顺序及工作内容之间的依赖关系。
CMMI三级中有专门的PI产品集成过程域可以借鉴。)
但有些任务也并非完全一定要依赖于另一项任务,所以在确定其依赖关系的时候要将此种情况考虑进去。实际很多项目经理已经这样做了,当需要赶进度的时候,通常就会打破这种依赖关系让任务先行的运行起来。
针对外部依赖关系的工作内容,笔者不认为有特别好的办法可以进行控制,只能是通过加强风险意识,提早制定风险计划以应对此类事情的发生。毕竟PM的权限是有限的,而且也需要PM要有很好的协调处世能力。这也是PM面临的实际问题。(并行的前提是实现约定各种接口以便于后续的集成,如果前期没有这种约定后续集成会发生大量的问题。)
第三:则需要明确里程碑,不要小看这个东西,里程碑是严格用于控制项目计划的重要指标。里程碑如果出现了变更,则表示项目出现了重大问题,有可能直接导致最终项目无法按照指定要求完成。
第四:重点讨论一下进度的制定和资源的分配,即安排活动资源,制定时间计划。这是弹性最大的一个过程。或者说这是人为因素最大的一个过程。很多项目都是在已知了最终的项目提交时间的情况下来制定的项目计划,所以,时间计划的制定是通过倒推来完成的,当然也存在根据时间计划制定最终的项目验收时间的情况,但通常在计划的制定过程中,无法细化项目中的很多内容,故制定的最终进度计划也可能会出现很大的偏差,或者是甲方无法接受的情况。最终还是要通过项目提交时间来进行倒推。经常听到的一句话就是以市场为导向,所以项目也好、产品也罢最终要为市场服务,既然为市场服务,则需要根据市场的时间来安排了。但并不是说时间可以压缩人力就可以无限增加,所以,这个过程通常是一个比较痛苦的过程。(倒排进度也是在进度和资源紧张情况下做进度计划的一种方法,但是倒排进度不能破坏游戏规则。推荐的方式是根据最后期限确定几个大的里程碑点,然后在里程碑点里面仍然是正排进度计划,当超出了期限的时候再进行资源负载的重新分配和协调。)
1) 首先应该进行工作量的核算,针对工作量的核算,可以采用用例点估算法,或者经验法的方式来进行。在这个过程中不建议考虑到任何的限制条件,只需要你考虑工作量的核算,作为项目经理而言自己心里一定要知道工作量到底有多大,这是一个底线,只有明确工作量的大小,才好完成项目,不要通过实际的行动来告诉你工作量的大小,那样就迟了。但无论采用何种方式,工作量的大小并非完全可以在项目制定计划的阶段就可以完全计算出来,即便采用了用例点估算的方式,也只是一个大概,所以,计划的制定本身就是一个循序渐进的过程,不断的完善,不断的细化,不断的调整。但大概的工作量一定要估算出来,这样才好作后续的工作。(估算是在软件项目计划中一个比较重要的概念,估算方法有专家法,三点法和功能点法等。用例点估算是结合用例估算和功能点估算的一些优点,用例点最终得到的是软件需求的规模,然后在根据软件需求的规模和需求生产率,历史项目的工作量比例分布等等到项目各个阶段的工作量,在这里我们要注意的是在WBS确定后在软件项目中会先开展估算活动,确定项目的规模和工作量,然后再来进行活动定义和排序,活动资源分配,进度表的制定。)
2) 其次,充分考虑关键技术的难度及最终应用环境的技术难度。现在一个项目通常会用到很多的技术,甚至是一些新技术。所以,一定要认真对待这个问题,PM很多都是技术出身,所以本身对新技术的探索就有一定的兴趣,但不要忘了你是在管理项目,新技术需要攻关、团队的熟悉掌握,最终才可应用到你的项目中,这其中每个环节出了问题都会影响项目进度或质量,所以,这种风险一定要提前预知。我曾经做过一个项目就遇到过此类问题,因此以后在做项目规划书的时候都会将应用到的关键技术进行独立介绍,以引起大家的重视。由于对关键技术掌握不足而导致项目严重超期的例子并不少见。(首先是为了保证项目的可预测性不推荐使用各种新技术和不成熟的技术,其次当确实需要一些新技术的时候应该是在项目开始前提前识别风险和进行风险应当,安排相应的成员对新技术进行预研,明晰风险。)
3)人力资源安排,在安排人力资源之前,一定要对你的团队每个人都要有充分的了解,这样有助于项目的进展。每个人员的技术能力是否可以满足要求?每个人员的独立解决问题的能力是否很强?每个人员对技术的探索欲望是否也很强?哪些人员渴望掌握新技术?哪些人员又渴望采用成熟的技术来完成?这些都对你进行人力的安排有帮助。最重要的就是你安排给的任务是否可以完成?(这里面强调两点,一个是瓶颈资源必须要用倒关键的任务和活动上,一个是要充分考虑倒个人的技能和任务的匹配度。在安排人力资源之前我们需要首先确定两个东西,一个是项目内各个成员的技能评估,一个是成员的岗位和职责分工。)
4)制定时间计划,人力资源安排完成后,结合工作量的分析,时间计划就会自然而然的制定出来,当然在这个过程中还需要考虑到一些外部因素,譬如业务的复杂程度、技术应用的复杂程度等。这个过程可以在工作量核算的时候作为调节因子进行计算,也可以在时间计划中给予调节。(在排进度的时候注意采用固定工时的方式,由于有些任务比如会议,评审等没有严格的关联依赖关系,因此当我们用项目管理软件拟制完进度计划后仍然需要进行资源平衡。)