目目录录第3章项目规划与项目监控................................................................................................23.1项目规划的概念...............................................................................................................23.2如何进行项目估计...........................................................................................................33.2.1数学模型真的好用吗............................................................................................33.2.2简单直观的估计方法............................................................................................43.3制定项目计划...................................................................................................................63.4项目计划审批...................................................................................................................83.5项目计划变更控制...........................................................................................................93.6如何有效地监控项目.....................................................................................................103.6.1为什么要进行项目监控......................................................................................103.6.2任务进度监控......................................................................................................103.6.3项目费用监控......................................................................................................113.6.4人员业绩记录......................................................................................................123.6.5软硬件资源监控..................................................................................................123.6.6风险管理..............................................................................................................133.6.7项目进展报告......................................................................................................133.7小结................................................................................................................................14第3章项目规划与项目监控项目规划(ProjectPlanning)的目的是为项目的开发和管理工作制定合理的行动纲领(即项目计划),使所有人员按照该计划有条不紊地开展工作。为了避免词义混淆,这里把动词Planning译为规划,把名词Plan译为计划(或计划书)。项目监控(ProjectMonitoringandControl)的目的是通过周期性地跟踪项目计划的各种参数如进度、工作量、费用、资源、工作成果、风险等等,不断地了解项目的进展情况,以便当项目实际进展状况显著偏离计划时能够及时采取纠正措施。项目经理正式上任后最主要的管理工作就是项目规划和项目监控。如果没有规划就不知道监控什么,反之如果只有规划而不去监控等于白规划。可见项目规划和项目监控是相辅相成、动态演化的两个过程域。最糟糕的下场是:经费用光了,进度远远落后了,人员累死了,还不知道什么时候能熬出头。本章探讨项目规划与项目监控的方法和规范,让广大项目经理都能学会。3.1项目规划的概念为什么要进行项目规划?我们生活在城市里,经常发现某些道路被反反复复地挖掘修理,给老百姓的生活添加了很多麻烦。这种现象只有两种解释:(1)市政管理者为了拉动GDP的增长,营造欣欣向荣的景象,就拿马路开刀;(2)管理者根本没有进行市政规划,第一次挖马路铺设煤气管道,第二次挖马路铺设电缆,第三次挖马路铺设光缆,如此折腾简直劳民伤财。软件项目规划的重点是对人员角色、任务进度、经费、设备资源、工作成果等等做出合适的安排,制定出一些计划(包括高层的和细节的),使大家按照计划行事,最终顺利地达到预定的目标。如果不对项目进行规划的话,一群人天马行空、各干各的,项目进展不到一半就混乱不堪了。谁在什么时候进行项目规划?在立项管理过程域的项目筹备阶段(参见第二章),机构领导首先任命一位项目经理,之后机构领导协助项目经理筹备项目经费、人力资源、软件硬件资源等。如果必要的资金和资源已经到位,那么项目经理和核心成员即可组成一个项目规划小组,开始进行项目规划。有人疑问,在《立项建议书》中不是已经有了项目的开发计划了吗?为什么还要进行规划呢?注意,《立项建议书》中的开发计划仅仅是一种设想而已,因为当时人们并不知道机构是否会采纳这个建议、也不知道领导支持的力度有多大。假设《立项建议书》中的计划需要10名开发人员和一百万元经费,但是当立项之后机构只能给予5名开发人员和50万元经费,那么原计划必须做出重大调整。项目规划产生的成果是什么?主要是一些计划书(plan),可分两类:一是全局的计划书(OverallPlan),这里称为《项目计划》;二是一些下属计划书(SubordinatePlan),例如配置管理计划、质量管理计划、阶段开发计划和测试计划等。下属计划书是对《项目计划》的补充,其内容不可与《项目计划》冲突。通常《项目计划》由项目经理负责制定,由机构领导审批。而下属计划书一般由项目成员制定,由项目经理审批即可。项目规划的流程如图3-1所示。图3-1项目规划流程图3.2如何进行项目估计在制定项目计划之前,理应采用恰当的方法对重要的数据进行估计,否则计划就乱写了。一般地,项目估计的要素是软件规模、工作量和人力成本,如果这些要素估计得比较准确得话,那么后续制定的项目计划就比较合理。对于一些外包项目而言,项目估计得到的数据是双方讨价还价的依据。项目估计几乎不可能成为一门精确的科学,因为在项目刚开始时,人们对产品需求和技术的了解还比较肤浅,而项目实际能够拥有经费和资源很大程度上是靠项目经理争取来的,不确定因素比较多。在这种情况下人们很难作出准确的估计。但是大家都认同:依据某种方法(规则)进行估计显然比瞎猜好得多。常用的项目估计方法大体分为两类,第一类是数学模型,第二类是简单直观的“分解-累计”方法;3.2.1数学模型真的好用吗采用数学模型这种方法是学术界热衷的,因为有数学公式的东西更显得有学术味道。这类方法适合于非常成熟的软件机构,该机构积累了丰富的历史数据,以至于能够归纳出数学模型来指导新项目的规划。典型的数学模型如E=A+B×(ev)C项目估计制定项目计划审批项目计划项目计划变更控制按计划执行…其中A,B,和C是由经验导出的常数,E是以“人月”为单位的工作量,ev是估算变量如代码行(LOC)或者功能点(FP)。例如基于代码行的数学模型有:Walston-Felix模型E=5.2×(KLOC)0.91Bailey-Basili模型E=5.5+0.73×(KLOC)1.16Boehm简单模型E=3.2×(KLOC)1.05基于功能点的数学模型有:Albrecht模型E=-13.39+0.0545FPKemerer模型E=60.62×7.728×10-8FP3Maston模型E=585.7+5.12FP通用性更强的是BarryBoehm研制的COCOMO模型(构造性成本模型),分为初级、中级、高级3种形式。(参考[Pressman99,p83-p86])我从事软件开发十多年,从来没有采用数学模型进行项目估计,因为根本无法套用,所以我从来就不信这些公式。我公司的一些员工参加了CMM培训课,CMM讲师照本宣科地推荐了COCOMO模型,学员们如获至宝。有一天,某个同事打电话问我:“用COCOMO模型估计工作量时,我们公司的常数是多少?”我说不知道,我从来就没有用过。对方很吃惊地问:“你不是专家吗,怎么连那么著名的COCOMO模型都不会用呢?”我哭笑不得,只好对他说:“你顺便找些数据来计算,就当电脑算命好了。如果你算对了,将来大家都请你来算。”3.2.2简单直观的估计方法我自己一直都采用简单直观的“分解-累计”方法来估计产品规模、工作量和人力资源成本。产品规模估计方法如下:(1)项目规划小组先分解产品的功能,制定“产品功能分解与规模估计表”(如表3-1所示)。产品的模块以及模块的主要功能是比较容易确定的,因为这是项目规划小组必须知道的最起码的功能需求。软件规模的度量单位主要有:代码行、对象个数、页面数等等。我通常用“对象个数”来度量。模块名称模块的主要功能新开发的软件规模(度量单位如对象个数)复用的软件规模(度量单位如对象个数)模块AA.1A.2A.3模块BB.1B.2B.3汇总表3-1产品功能分解与规模估计表(2)规划小组各成员独立填写表3-1。(3)汇总每个成员的表格,进行对比分析。如果各人估计的差额小于20%,则取平均值。如果差额大于20%,则转向第(2)步,让各成员重新估计产品的规模,直到各人估计的差额小于20%为止。第(3)步的目的是消除大的差异后取平均,总误差控制在20%以内。如果所有的估计值同时偏大或者偏小,那么就将错就错了。因为在项目刚开始的时候,谁也不知道估计准确不准确,只要大家观点相似就行了。工作量估计方法如下:(1)首先确定工作量的度量单位,可以是“人小时”、“人天”、“人月”或“人年”。注意单位换算:1人年=12人月1人月≈22人天1人天=8人小时(2)估算开发工作量。一般地可以把开发过程划分为需求开发、系统设计、实现、测试四个阶段,分别估计每个阶段的工作量,然后累计得出总的工作量,见表3-2。人均生产率是指每个人每天完成的工作成果规模。假如在设计阶段,每人每天可以设计2个对象,若软件总共有100个对