第12章 软件项目的计划和成本估计 本章主要内容:软件开发项目的特点;项目计划目的与作用;项目计划制定的原则、内容、编制过程及项目计划内容确定;成本估算的方法和经验模型;进度安排的制定过程及方法; 本章重点:项目计划目的与作用;项目计划制定的原则、内容, 成本估算的方法和经验模型 。 本章难点:软件开发的组织结构,人员的配备和团队的管理 。
第12章 软件项目的计划和成本估计 12.1软件的目标与项目计划 12.2 成本估算 12.3 进度计划
12.1软件的目标与项目计划 12.1.1软件开发项目的特点 与其他类型项目的共同点:项目成功与否不仅取决于项目过程中所采用的技术方法工具,还取决于项目管理的水平,特别是计划与控制的水平。
12.1.1软件开发项目的特点 与其他类型项目的不同点: (1) 软件产品和其他产品不同,软件产品是一种“逻辑”产品,是无形的,没有物理属性的,看不见、摸不着、难以理解。 (2) 需求难以明确且频繁变更:由于用户的成熟度或责任心的原因,用户开始无法给出明确的需求。在开发过程中,需求可能要经常修改,因此需要经常地修改程序与文档。 (3) 难以在早期发现问题:需求不明确,加上后期修改可能没有进行全局性的考虑,产生的问题难以从早期的文档中直观地发现,需要等系统设计出来后才会发现。 (4) 项目成员对文档的重视不够,符合用户需求的高质量软件,需要依赖于大量准确规范的文档编辑工作,但项目组成员对他并不感兴趣,很少愿意认真去做,因而直接影响了软件的质量。 (5) 劳动密集型+智力密集型:软件开发过程需要大量高强度的脑力劳动,并且都是手工劳动,这些劳动非常细致、高度复杂、容易出错,质量难以用简单的度量来衡量,使得软件的正确性难以保证。
12.1.2项目计划目的与作用 根据软件能力成熟度模型(简称CMM)集成CMMI,软件开发项目计划的目的是:建立和维护定义项目活动的计划。项目计划属于CMMI的第2级,其过程域包括开发项目计划、与相关人员交流、获取对计划的承诺、维护计划。 1. 项目计划的目标 (1) 项目计划的第一个目标:建立估计值,即建立和维护项目计划因素的估计值。
1. 项目计划的目标 (2) 项目计划的第二个目标:开发项目计划文档,即文档化项目计划,维护项目计划,并以此作为项目管理的基线。 (3) 项目计划的第三个目标:获得并维持所有项目干系人对项目的承诺。 项目计划是项目实施的基础。 任何项目计划都是为了解决三个问题: 确定项目目标; 确定为了达成项目目标的各项行动的顺序和时间; 确定项目中每项行动所需要的资源。
所以制定项目计划就是在明确项目目标的基础上,确定项目行动方案,分配相关资源的项目综合管理过程,就是通过对历史的、当前的、项目或组织内部的和项目或组织外部的有关信息进行分析和评价,对项目生命周期过程中可能的发展进行评估、预测,对新项目实施工作进行的各项活动做出尽可能周密的安排,最终形成一个所有项目干系人认可的、约定项目各项活动、作为项目实施工作基础的文件——项目计划。项目计划围绕项目目标的完成系统地确定项目的任务、安排任务进度、编制完成任务所需的资源预算等,从而保证项目能够在合理的工期内,用尽可能低的成本达到尽可能高的项目质量要求。在制定项目计划过程中必须明确五个基本问题:做什么、如何做、何时做、谁去做、需要多少资源。
2. 项目计划的作用 (1) 确定完成项目目标所需的各项任务范围,落实责任,制定各项任务的时间表,明确各项任务所需的人力、物力、财力; (2) 确定项目的工作规范,遵循的标准,成为项目实施的依据和指南; (3) 明确项目组各成员及其工作责任范围以及相应的职权;使项目组成员明确自己的工作目标、工作方法、工作途径、工作期限要求; (4) 保证项目进行过程中项目组成员和项目干系人之间的交流、沟通与协作,使得项目各项工作协调一致,增加客户满意度; (5) 为项目的跟踪控制提供基础。 (6) 项目计划在项目中起到承上启下的作用,计划批准后应当作为项目的工作指南。
12.1.3项目计划制定的原则 (1)目的性 (2)系统相关性 (3)经济性 (4)动态性
12.1.4项目计划的内容 1. 项目范围说明 2. 项目进度计划3. 项目质量计划 4. 项目资源计划 5. 项目沟通计划 6. 风险对策计划 7. 项目采购计划 8. 变更控制、配置管理计划
12.1.5项目计划编制过程 软件开发项目计划不可能是一个静态的计划,在项目启动时,可以先制定一个颗粒度相对比较粗的项目计划,先确定项目高层活动和预期里程碑。粗颗粒度的项目计划需要不断地更新迭代 项目计划从最初的粗颗粒度,变得非常详细。 制定计划的过程就是一个对项目逐渐了解掌握的过程,通过认真地制定计划,项目经理可以知道哪些要素是明确的,哪些要素是要逐渐明确的,通过渐近明细不断完善项目计划。 制定计划的过程,也是在进度、资源、范围之间寻求一种平衡的过程。 在于运用您的智慧去应对各种问题和面临风险并尽可能做出前瞻性的思考。
12.1.5项目计划编制过程 项目计划编写一般要按照以下过程: 1. 成立项目团队 正式在“项目立项文件”中指定的项目经理组织项目团队,成员可以随着项目的进展在不同时间加入项目团队,也可以随着分配的工作完成而退出项目团队。 2. 项目开发准备 项目经理组织前期加入的项目团队成员准备项目工作所需要的规范、工具、环境,如开发工具、源代码管理工具、配置环境、数据库环境等。
12.1.5项目计划编制过程 3. 项目信息收集 4. 编写《软件项目计划书》 项目经理负责组织编写《软件项目计划书》。《软件项目计划书》是项目策划活动的核心输出文档,它包括计划书主体和以附件形式存在的其他相关计划,如配置管理计划等。
12.1.5项目计划编制过程 编制项目计划的过程应当分为以下几个步骤: (1) 确定项目的应交付成果。 (2)任务分解:从项目目标开始,从上到下,层层分解,确定实现项目目标必须要做的各项工作,并画出完整的工作分解结构图。 (3)在资源独立的假设前提下确定各个任务之间的相互依赖关系,以确定各个任务开始和结束时间的先后顺序,获得项目各工作任务之间动态的工作流程。
12.1.5项目计划编制过程 (4)确定每个任务所需的时间,即根据经验或应用相关方法给任务需要耗费的时间;确定每个任务所需的人力资源要求,如需要什么技术、技能、知识、经验、熟练程度等等。 (5)确定项目团队成员可以支配的时间,即每个项目成员具体花在项目中的确切时间;确定每个项目团队成员的角色构成、职责、相互关系、沟通方式。 (6)确定管理工作,管理工作是贯穿项目生命周期的,如项目管理、项目会议、编写阶段报告。 (7)根据以上结果编制项目总体进度计划,总体进度计划应当体现任务名称、责任人、开始时间、结束时间、应提交的可检查的工作成果。 (8)考虑项目的费用预算、可能的风险分析及其对策、需要公司内部或客户或其他方面协调或支持的事宜。
5. 软件项目计划书评审、批准 项目计划书评审、批准是为了使相关人员达成共识、减少不必要的错误,使项目计划更合理更有效。 项目经理完成《软件项目计划书》后,首先组织项目团队内部的项目团队负责人、测试负责人、系统分析负责人、设计负责人、质量监督员等对项目计划书进行评审,评审可采取电子或会议方式,并进行阶段成果项目团队内评阅记录。应当要求所有相关人员在收到软件项目计划书后的一个约定时间内反馈对计划书的意见。项目经理确保与所 项目经理将已经达成一致的软件项目计划书提交项目高层分管领导或其授权人员进行审批,审批完成时间不能超过预先约定的时间。
5. 软件项目计划书评审、批准 批准后的软件项目计划书作为项目活动开展的依据和本企业进行项目控制和检查的依据,在必要时根据项目进展情况实施计划变更。 项目质量监督员根据《软件项目计划书》和《软件开发项目质量计划书规范》编制软件开发项目质量计划。 配置管理员根据计划书编制《项目配置管理计划》。 项目策划工作完毕,软件项目计划书通过评审,一般情况下,对软件开发项目来说,工作转入需求分析阶段。
12.1.6项目计划内容确定 项目计划内容的确定一般要按照以下过程: 1. 确定项目概貌 2. 确定项目团队 3. 明确项目团队内、外的协作沟通方法 4. 规划开发环境和规范 5. 编制工作进度计划 ⑴ 工作任务划分; ⑵ 显示项目各阶段或迭代的时间分配情况的时间线或甘特图; ⑶ 确定主要里程碑、阶段成果; ⑷ 要求用文字对项目工作计划做出解释。最终用一张时间表格来完整说明整个工工作计划
12.1.6项目计划内容确定 6. 编制项目的监控计划 7. 编制项目的风险计划 8. 制定辅助工作计划 9. 规划开发支持工作 10. 规划项目验收 11. 规划项目收尾与交接活动
12.2 成本估算 软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。 12.2 成本估算 软件开发成本估算主要指软件开发过程中所花费的工作量及相应的代价。 成本估算是对完成项目所需费用的估计和计划,是项目计划中的一个重要组成部分。 要实行成本控制,首先要进行成本估算。
11.2.1成本估算的方法 1. 经验估算法 2. 因素估算法 3. WBS基础上的全面详细估算 采用这一方法的前提条件或先决步骤是: (1)对项目需求做出一个完整的限定。
(2)制定完成任务所必需的逻辑步骤。 (3)编制WBS表。 除此之外, (1) 类比估算法。 (2) 细分估算法 (3) 周期估算法
12.2.2成本估算的经验模型 1. Putnam 模型 此模型是Putnam于1978年提出的,它是一种动态多变量模型。 L = Ck * K1/3 * td4/3 其中: L-----------源代码行数(以LOC计) K----------整个开发过程所花费的工作量(以人年计) td----------开发持续时间(以年计) Ck---------技术状态常数,它反映“妨碍开发进展的限制”,取值因开发环境而异
12.2.2成本估算的经验模型 2. COCOMO模型(constructive cost model) COCOMO模型中用到以下变量: DSI-------源指令条数。不包括注释,1KDSI = 1000DSI。 MM-------开发工作量(以人月计) 。1MM = 19 人日 = 152 人时 =1/12 人年 TDEV-----开发进度 (以月计)。
12.2.2成本估算的经验模型 COCOMO模型中,考虑开发环境,软件开发项目的类型可以分为3种: (1) 组织型(organic):相对较小、较简单的软件项目。 (2) 嵌入型(embedded):要求在紧密联系的硬件、软件和操作的限制条件下运行,通常与某种复杂的硬件设备紧密结合在一起,对接口,数据结构,算法的要求高,软件规模任意,如大而复杂的事务处理系统,大型/超大型操作系统,航天用控制系统,大型指挥系统等。 (3) 半独立型(semidetached):介于上述两种软件之间。规模和复杂度属于中等或更高,最大可达30万行。 估算公式: 基本COCOMO模型估算工作量和进度的公式如下: 工作量: MM = r*(KDSI)c 进度: TDKV = a(MM)b 其中经验常数 r, c, a, b 取决于项目的总体类型。
12.3 进度计划 安排进度计划的目的是为了控制时间和节约时间,而项目的主要特点之一即是有严格的时间期限要求 12.3.1进度安排的制定过程 12.3 进度计划 安排进度计划的目的是为了控制时间和节约时间,而项目的主要特点之一即是有严格的时间期限要求 12.3.1进度安排的制定过程 软件项目的进度安排主要是考虑软件交付用户使用前的这一段开发时间的安排 利用进度安排的有效分析方法严密监视软件开发的进展情况,以使得软件开发的进度不致被拖延。
软件开发项目的进度安排往往有两种考虑方式: (1) 系统最终交付日期已经确定,不能更改,软件开发部门必须在规定期限内完成任务,开发团队在这一约束条件下安排进度计划。 (2) 系统最终交付日期只确定了大致的年限,最后交付日期由软件开发部门确定。 项目整体进度安排的过程如下: (1) 根据项目总体进度目标,编制人员计划。 (2) 将各阶段所需要的资源和可以取得的资源进行比较,确定各阶段的初步进度,然后确定整个项目的初步进度。 (3) 对初步进度计划进行评审,确保该计划满足要求,否则就要重复上面的步骤。—般都需要多次调整。
12.3.2任务的并行性 进行进度安排时要考虑的一个主要问题是任务的并行性问题。
12.3.3进度安排的方法 进度是计划的时间表。 1. 关键日期表 2. 甘特图 甘特图(Gantt Chart),又称横道图,是各项任务与时间的对照图表。用水平线表示任务的工作阶段,其中线段的长度表示完成任务所需要的时间,起点和终点分别对应启始和结束时间。
甘特图
3. 网络图 用网络分析的方法编制的进度计划称为网络图。 关键路线法(Critical Path Method,简称CPM)和计划评审技术(Program Evaluationand Review Technique,简称PERT)是20世纪50年代后期几乎同时出现的两种计划方法。 注意: 关键日期表编制时间最短,费用最低。甘特图所需时间要长一些,费用也高一些。CPM要把每个活动都加以分析,若活动数目较多,还需用计算机求出总工期和关键路线,因此花费的时间和费用将更多。PERT法可以说是制订项目进度计划方法中最复杂的一种,所以花费时间和费用也最多。
采用哪一种进度计划方法,主要应考虑下列因素: (1)项目的规模大小。 (2)项目的复杂程度。 (3)项目的紧急性。 (5)总进度是否由一、两项关键事项所决定。 影响项目管理中成本的三因素 项目成本管理有效建议