一、概述
1.1 什么是项目管理
1.1.1 项目
项目的概念
为增加某一独特的产品或服务的价值所做的一次性的、有限的努力。
项目的特点
- 目标性:结果只可能是一种期望的产品或服务;
- 独特性:每一个项目都是唯一的;
- 一次性:有确定的起点和终点;
- 约束性:每个项目的资源,成本和时间都是有限的;
- 关联性:所开展的活动都是密切相互关联的;
- 多方面性:一个项目涉及多个相关利益者;
- 不可逆转性:不论结果如何,项目结束结果也就随之确定。
构成项目的三要素
范围、时间、成本。
项目集和项目组合
项目集(Program)是多个项目组成的总称,程序管理通过组织有序,协调的方式来管理多个项目。
项目组合(Portfolio)是多个项目集组成的总称,利用资产组合管理,项目组合可以把项目,项目集,资产子组合和业务操作等作为一个组合来达到业务战略目标。
三者关系为相互的包含关系。(课本 P4)
1.1.2 项目管理
项目管理的概念
不同的知识体系都有不同的解释,概括来说,项目管理是组织实施为实现项目目标所必需的一切活动的计划、安排与控制。
有关项目管理的一些小概念:顾客、用户、程序等(课本 P2)
项目管理的构成和约束因素
构成(三要素):人、过程、工具
约束:范围、时间、预算、质量。
项目管理的起源
最早起源于建筑工程项目 -> 第二次世界大战(曼哈顿计划)开始逐渐形成 -> 上世纪五六十年代诞生了计划评估,审查技术和关键路径方法 -> 1965 年欧洲美国都成了项目管理相关的组织 -> 上世纪七八十年代人们开始将信息系统的方法引入项目管理,相继建立信息管理系统。
项目管理的知识体系
最著名的有 3 个:
- 美国 PMI 推出的 PMBOK。
- 英国政府商务部推出的 PRINCE。
- IBM 的 WWPMM。
1.2 项目管理的本质
单从管理来说,管理可以分为计划和监控两个阶段。在项目的初始化阶段,对项目的管理主要以计划的形式展开,其中包括风险、范围、支出的计划等等,而在执行阶段,则是进行监控,如质量保证等。
项目管理的目标,是保证质量的前提下,协调好质量、任务、成本和进度等要素的相互冲突,获取三者的平衡。对于项目管理的本质,可以从管理对象、管理思想等多个方面进行理解(课本 P7)。
1.2.1 项目失败和管理的联系
软件项目失败涉及到很多软件管理方面的问题,比如进度估计不够全面,人员配置有问题等等,如果有很好的项目管理,这些问题大部分都可以避免。
1.2.2 项目管理的对象
可以概括为 3P ——人员(People),问题(Problem)和过程(Process)。三者的关系可见课本 P10。
1.2.3 项目管理成功的标志
- 按时交付
- 成本在预算内
- 功能达到要求水平
- 通过客户验收
- 范围变化最小或可控
- 没有干扰或严重影响整个组织的主要工作流程
- 未改变或改变了公司文化
1.2.4 项目管理成功的要素
- 制定计划
- 建立组织
- 配备资源
- 监控执行
- 总结提高
也可以概括为一个公式:目标 + 组织 + 流程 + 工具 + 管理 = 成功。
1.3 项目管理的基本方法
1.3.1 项目管理基本方法的分类
项目管理的基本方法可以分为三种:阶段化管理、量化管理与优化管理。
- 阶段化管理:将项目的生命周期分为若干个阶段,再根据不同阶段的不同特点进行针对化管理。
- 量化管理:针对影响项目成功的因素制定指标,收集并分析数据,从而完成对项目的控制和优化。
- 优化管理:分析项目每部分蕴含的知识,不断吸取教训、总结经验,将知识与实践更好地融合在一起,从而对项目的计划、实施办法等进行优化,获得项目的最佳效益。
1.3.2 项目管理的基本模型
- 组队模型:用于解决人力资源管理的问题,比如明确相互依赖的角色和责任、沟通机制等。
- 过程模型:为了解决软件开发过程中管理的问题,比如时间管理,基于里程碑的阶段划分等,保障项目顺利实施。
- 应用模型:应用于具体领域的需求管理和变更管理等。
1.4 项目管理的生命周期
项目生命周期可以被分为五个过程:启动、计划、执行、控制和结束
一般执行和控制都是同时进行的,因此可以把二者合并为一个阶段,自此也可以归纳为这样的四个阶段:
- 项目准备和启动阶段
- 项目计划阶段
- 项目实施和监控阶段
- 项目验收和总结阶段
1.5 项目管理的知识体系
PMBOK、PRINCE2、WWPMM 等。
1.6 软件项目管理
1.6.1 软件项目管理的不同之处
- 软件项目是设计型项目
- 软件过程模型
- 需求变化频繁
- 难以估算工作量
- 主要的成本是人力成本
- 以人为本的管理
1.6.2 软件项目管理的目标与范围
根据软件项目的主要任务,可以简单定义项目所需角色以及其工作职责。
项目角色和职能表(课本 P21 表 1-2)
软件项目管理的生命周期和活动范围的比较(课本 P21 表 1-3)
1.6.3 软件项目的分类
可以根据规模、软件开发模式,软件的商业模式等多个角度进行划分(课本 P22)
二、项目的准备和启动
2.1 项目建议书
项目建议书,是项目立项申请报告,重点是如何向有关的投资方或上级阐述立项的必要性。
项目建议书的内容
- 项目的背景
- 项目的意义和重要性
- 项目产品或服务的市场预测
- 项目规模和期限
- 项目建设必须的条件,已具备和尚不具备的条件分析
- 投资估算和资金筹措的设想
- 市场前景和经济效益初步分析
- 其它需要说明的情况
2.2 项目可行性分析
2.2.1 可行性分析前提
要首先了解客户的需求和想要达到的目标,对业务需求进行收集和初步分析。
初步分析的内容有:
- 当前业务流程的分析
- 主要功能点需求分析
- 系统的非功能分析需求
- 对一些限制条件的分析
- 需求的优先次序
2.2.2 可行性分析因素
大概可以分为三个方面:经济可行性,技术可行性和风险及不确定性。(课本图 P28 )
2.2.3 成本效益分析方法
回收期法(NCF):原始投资额/每年现金净流入量。
净现值法(NPV):用未来报酬的总现值减去原先的投入。公式见课本 P29。
2.2.4 技术以及风险分析方法
- 技术分析:专家评定法
- 风险分析:决策树
2.2.5 可行性分析结论
包含的内容有:
- 项目需求分析概况
- 可行性分析要素
- 项目的设计方案
- 人员配置和培训计划
- 项目主要风险
- 可行性研究的结论和建议
- 其他重要意见
(阅读课本 P31 - P33 的例子)
2.3 项目投标
项目投标可以分为两个阶段:
第一个是参加竞标的供应商在规定的时间内提供投标书;
第二个是需求方(客户)对投标书进行评估,得出竞标结果。
2.4 软件项目合同条款评审
合同计费的种类
- 固定总价合同
- 费用偿还合同
- 时间和材料合同
- 功能点计费合同
合同条款评审
评审过程要按照指定、评审、签订合同的顺序进行。
2.5 软件开发模型
瀑布模型
通过一系列的软件活动顺序展开,每个活动都会产生循环反馈。
瀑布模型更适合需求比较完善,不容易改变的软件系统。
快速原型实现模型
对瀑布模型的改进,侧重需求的快速挖掘。其核心是先建造一个系统的初步原型,再以此为基础逐步调整使其满足客户的需求。
快速原型实现模型适合需求难以确定,不断变更的软件系统。
增量模型
通过不断增量交付各个模块来推动开发的模块。增量模型体现了不断迭代开发和增量发布,最终交付符合用户价值产品的方法论。
增量模型支持用户参与,更适合需求复杂难以确定,动态变化的软件系统。
其他还有极限编程,行为驱动开发等,不再过多阐述。
2.6 软件项目等组织结构和人员角色
项目的组织结构
主要有三种类型:职能型、纯项目型、矩阵型。
职能型:项目功能在本职能部门内部讨论,完成再递交给下一个部门。各部门之间由经理进行协调沟通。
纯项目型:项目经理领导,项目成员直接向经理汇报,每个项目是一个独立的自主单位。
矩阵型:前二者的结合,受项目经理和职能经理的双重领导。
软件项目经理
是整个软件项目的核心和灵魂。
QA 与 QC
QA(质量保证):通过建立和维持质量管理体系来确保产品质量没有问题,关注的是开发的系统。
QC(质量控制):检验产品质量,保证产品符合用户需求,是产品质量检查者,关注的是产品本身。
QA 和 QC 在项目各个不同阶段的工作内容(课本 P53)
2.7 软件项目的利益相关人
概念
积极参与项目或其利益在项目执行中或成功后受到积极或消极影响的组织或个人。
项目,项目团队和项目干系人的关系(课本 P55)
2.8 软件项目启动动员会
会前准备
确定参会者,会议时间和地点,会议议程,主持人,记录人员,发送会议邀请,以及其他准备等。
会议进行
会议结束
三、项目计划
3.1 什么是项目计划
计划是事先确定项目的目标和实现目标所需要的原则、方法、步骤和手段等完整方案等等管理活动。
软件项目计划的目的是制定一套软件项目实施及管理的解决方案,其主要工作包括确定详细的项目实施范围、定义递交的工作成果,评估实施过程中的主要风险,制定项目实施的(时间)进度计划、成本和预算计划、人力资源计划等。
甘特图是很好的项目计划工具,必须掌握。
软件项目计划的作用
- 指导软件项目的实施
- 得到项目相关干系人的承诺
- 获得资源的承诺
- 明确项目人员的分工和工作责任
- 及早了解项目存在的问题和风险
- 获得组织在项目预算上的承诺
- 是软件项目实施结果评估的依据
- 软件项目实施过程的文档化
3.2 项目计划的内容
项目计划内容
- 目标与范围
- 项目估算
- 风险
- 资源
- 进度安排
跟踪和控制机制
输出文档
- 总体计划
- 项目范围说明书
- 项目进度计划
- 项目成本计划
- 质量管理计划
- 项目资源计划
- 项目风险计划
- 采购管理计划
- 配置管理计划
- 产品集成管理计划
3.3 项目计划方法
滚动计划方法
一种动态编制的计划的方法,按照“近细远粗”的原则进行,先编制一定时期内的计划,再按照具体的执行情况修订计划并逐渐向后移动。
要点:分而治之,逐步求精,动态规划,和谐过渡。
敏捷开发的滚动计划方法
可以分为五个层次:产品愿景、产品路线图、发布计划、迭代计划、每日计划。
WBS 方法
一种将复杂问题分解为简单问题,然后再根据分解结果进行计划的方法。
目的
- 关注项目目标的澄清职责
- 建立可视化项目的可交付成果,以便计算工作量和分配工作
- 改进时间,成本,资源估计的准确度
- 为绩效测量和项目控制定义一个基准,容易获得项目人员的认可
- 辅助分析项目的最初风险,明确工作责任
为其他项目计划的制定建立框架或依据
原则和要求
- 某项具体任务应该在一个工作包,且只能在一个工作包出现
- WBS 中某项项目内容是其下所有 WBS 项的总和
- 一个工作包只由一个人来负责
- 任务的分解尽量与实际执行方式一致
- 分解合理,有良好的稳定性和适应性
- 鼓励项目团队积极参与创建 WBS
所有成果需要文档化
创建步骤
- 分解工作任务
- 定义各项活动/任务之间的依赖关系
- 安排进度和资源
网络计划技术
一种应用网络模型直观表示软件开发众多工作之间的逻辑关系和时间关系,对完成软件工程项目所需时间、费用、资源进行求解和优化的计划方法。
3.4 如何有效完成项目计划
3.4.1 软件项目特点
- 软件开发是在不断探索和研究中进行的
- 最佳实践还不够成熟
- 软件的自动化对工具的依赖性也很突出
- 软件构造过程实际是设计过程,每一个软件产品都不同,自动化程度也比较低
软件变化不可避免,但是又难以实现,也会引起文档的频繁修改
软件项目的问题
- 时间紧迫性
- 项目独特性
- 软件项目的不确定性
- 软件项目管理可视化差
- 软件项目生产力依赖于软件人员的潜力挖掘
3.4.2 软件计划的错误倾向
- 对计划不重视
- 片面计划
- 没有考虑足够的风险
- 计划过于粗糙
3.4.3 项目计划的原则
- 目标性原则
- 预防性原则
- 客观性原则
- 系统性原则
适应性原则
制定计划的要点
- 目标导向 必须要清晰理解描述自己的目标。
- 重视与客户的沟通 充分听取客户的意见,使交付的产品更符合客户需求
- 收集足够的信息 掌握更多信息,才能掌握更多有价值的内容以制定计划
- 客观且使用 做到“知己知彼”
- 做到完整的循环过程 先自下而上计划,再自上而下计划
- 关注计划过程 随机应变,不断调整修改计划
- 要有层次性 比如分为主计划、子计划
3.4.4 计划的输入
- 项目的目标和需求
- 项目可用的资源
- 项目的干系人(相关利益者)
- 项目涉及的相关技术
- 质量政策和标准
- 组织流程
- 制约因素
- 假设
- 历史数据