软件项目管理
第一章 软件项目管理基本概念
项目定义
项目(Project)是为了创造一个唯一的产品或提供一 个唯一的服务而进行的临时性的努力。
项目的特征
项目管理定义
项目管理是一系列的伴随着项目的进行而进 行的、目的是为了确保项目能够达到期望的 结果的一系列管理行为。
软件项目管理
敏捷模型(Agile Development)
敏捷宣言——4个价值
第二章 软件项目确立
项目立项
明确项目的目标、时间表、项目使用的资源和经费,而且得到执行该项目的项目经理和项目发起人的认可 。
项目招投标过程
项目章程(Project Charter)
确认项目存在的文件,包括对项目的确认、对项目经理的授权和项目目标的概述等。
敏捷项目章程
基本要素:
第三章 生存期模型
生存期模型
软件开发模型变迁
项目生存期选择
- 预测型:提前进行大量的计划工作,然后一次性执行;执行是一个连续的过程。
- 迭代型:允许对未完成的工作进行反馈,从而改进和修改该工作。
- 增量型:向客户提供各个已完成的,可以立即使用的可交付成果。
- 敏捷型:既有迭代,也有增量,便于完善工作,频繁交付。
预测型-模型
迭代模型Or:原型模型
增量模型
敏捷方法
Scrum模型
XP(eXtreme Programming)极限编程模型
XP(eXtreme Programming)极限编程是由Kent Beck提出的一套针对业务需求和软件开发实践的规则。
精益(Lean)
精益(Lean)模式提倡持续不断地改进, 减少流程中的浪费。
DevOps: Development和Operations的组合
DevOps是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障( QA)部门之间的沟通、协作与整合。
混合模型
第四章 软件需求管理
软件需求管理过程
需求建模的基本方法
软件需求定义
需求获取
需求分析
需求分析是为最终用户所看到的系统建立一个概念模型,是对需求的抽象描述。
需求规格编写
需求分析工作完成的一个基本标志是形成了一份完整的、规范的需求规格说明书。
需求验证
需求变更管理
需求建模的基本方法介绍
传统方法: 1. 原型方法 2. 基于数据流建模 3. 基于UML建模
基于数据流- 结构化分析方法
基于数据流的技术
基于UML方法
UML需求视图
基于UML方法综述
Product Backlog:产品待办事项列表
Sprint Backlog:待办事项列表的细化
第五章 软件项目任务分解
任务分解
过程:将一个项目分解为更多的工作细目或者子项目,使项目变得更小、更易管理、 更易操作
结果:WBS( Work Breakdown Structure: 任务分解结构)
工作包( Work packages)
分解方法
WBS任务分解建议
第六章 软件项目成本计划
关于估算
软件项目规模
软件项目规模即工作量 例如:软件规划,软件管理,需求,设计,编码,测试,以及后期的维护等任务。
软件规模单位
软件项目成本
成本估算结果
直接成本
间接成本
可以分摊到各个具体项目中的成本,例如:培训、房租水电、员工福利、市场费用、管理费、其他等等
传统估算方法
代码行估算法
代码行技术的主要优缺点
优点:代码是所有软件开发项目都有的"产品",而且很容易计算代码行数。
3. 在项目早期,需求不稳定、设计不成熟、实现不确定的 情况下很难准确地估算代码量.
功能点估算法
Albrecht功能点估算
功能点公式
外部输入(External Inputs: EI)
给软件提供面向应用的数据的项(如屏幕、表单、对话 框、控件,文件等);在这个过程中,数据穿越外部边界进入到系统内部。
外部输出(External Outputs EO)
向用户提供(经过处理的)面向应用的信息,例如, 报表和出错信息等。
外部查询(External Inquiry EQ)
外部接口文件(External Interface Files EIF's)
外部接口文件是用户可以识别的一组逻辑相关数据, 这组数据只能被引用。用这些接口把信息传送给另一个系统。
内部逻辑文件(Internal Logical Files: ILF'S)
用户可以识别的一组逻辑相关的数据,而且完全存在于应用的边界之内,并且通过外部输入维护,是逻辑主文件的数目。
其他功能点方法
用例点估算法
用例点估算方法的基本步骤
类比 (自顶向下)估算法
估算人员根据以往的完成类似项目所消耗的总成本(或工作量),来推算将要开发的软件的总成本(或工作量)。是一种自上而下的估算形式。
类比估算—使用情况
自下而上估算法
利用任务分解图(WBS),对各个具体工作包进行详细的成本估算,然后将结果累加起来得出项目总成本。
特点
三点估算法
三种估算值
参数估算法
参数模型综述
使用条件
特点
专家估算法
由多位专家进行成本估算,一个专家可能会有偏见,最好由多位专家进行估算,取得多个估算值, 最后得出综合的估算值。
专家估算法-Deiphi
5. 最终可以获得一个多数专家共识的软件规模: E=E1+E2+…En/n(n:表示n 个专家)
6. 如果各个专家的估算差异超出规定的范围(例如: 15%),则需重复上述过程
敏捷估算思维
Story point估算方法
Story point(故事点)用来度量实现一个Story 需要付 出的工作量的相对估算。
成本预算
分配项目成本预算包括三种情况:
分配固定资源成本
当一个项目的资源需要固定数量的资金时,可以向任务分配固定资源成本。
第七章 软件项目进度计划
进度计划的重要性
进度的定义
任务定义(Defining Activities)
项目任务的关联关系
项目各项活动之间存在一定的关联关系,根据这些关系安排任务之间的顺序
任务之间的关系
任务之间关联关系的依据
进度管理图示
网络图
常用的网络图
PDM (Precedence Diagramming Method)
ADM (Arrow Diagramming Method )
PDM图例
PDM(Precedence Diagramming Method)
ADM图例
ADM( Arrow Diagramming Method )
ADM图例-虚活动
虚活动
历时估算
历时估算的基本方法 - 传统
定额估算法
经验导出模型
建议掌握模型
关键路径法估计
工程评估评审技术(PERT)
- (Program Evaluation and Review Technique)利用网络顺序图逻辑关系
- 项目中某项单独的活动,存在很大的不确定性
- 加权算法估算任务历时
- 利用网络图逻辑关系,确定路径、项目历时
工程评估评审技术(PERT)-加权算法
PERT的风险指标
PERT估算举例
PERT估算评价举例
预留分析
应急预留
应急预留是包含在进度基准中的一段储备时间, 用来应对已经接受的已识别风险, 以应对进度方面的不确定性 。
管理预留
管理预留是为管理控制的目的而特别留出的项 目预算,用来应对项目范围中不可预见的风险。
Jones的一阶估算准则
类比估算
以过去类似项目的实际持续时间为依据,来估算当前项目的持续时间.
专家判断
基于承诺的进度估算
历时估算的基本方法 - 敏捷
进度编制的基本方法
任务滞后(Lag)
任务超前(Lead)
关键路径法
- 最早开始时间(Early start)
- 最晚开始时间(Late start)
- 最早完成时间(Early finish)
- 最晚完成时间(Late finish)
- 总浮动( Total Float)
- 自由浮动(Free Float)
浮动时间(Float):浮动时间是一个任务的机动性,它是一个任务在不影响其它任务或者项目完成的情况下可以延迟的时间量。
总浮动与自由浮动
总浮动( Total Float): 在不影响项目最早完成时间的前提下,一个任务可以延迟的时间
自由浮动(Free Float):在不影响后置任务最早开始时间的前提下,一个任务可以延迟的时间
关键路径(Critical Path )
时间压缩法
应急法--赶工(Crash)
进度压缩单位成本=(压缩成本-正常成本)/(正常进度-压缩进度)
2. Charles Symons(1991)方法进度压缩比普通进度短的时候,费用迅速上涨
平行作业法--快速跟进
资源优化
资源平衡
资源平滑法
资源平滑法是在项目编排中进行资源的优化配置, 保证资源最优化、最优效 。
资源平滑不会改变项目关键路径,完工日期也不会延迟。活动只在其自由和总浮动时间内延迟.
Agile Planning:敏捷计划
Release planning - 发布计划 – 远期计划 – 粗计划.
Iteration planning - 迭代计划 – 近期计划 – 细计划
软件项目进度问题(SPSP)模型
软件项目进度问题(Software Project Scheduling Problem,SPSP)模型是在给定的项目任务工作量及其关系和资源限制下,对项目确定合适的人员安排,以保证项目的时间最短、成本最小。
第九章 软件项目配置管理计划
软件配置管理基本概念
配置管理定义
配置管理的主要功能
软件配置项
SCI:software configration item
基线定义
软件配置控制委员会(SCCB)
软件配置管理过程
配置管理基本过程
1.配置项标识、跟踪
建立配置项的对应关系,以便于进行跟踪和版本控制.实现数字化管理
2.配置管理环境建立
软件配置管理库是用来存储所有基线配置项及相关文件的等内容的系统,是在软件产品的整个生存期中建立和维护软件产品完整性的主要手段。
3.基线变更管理
基线修改应受到控制,这种变化要经SCCB授权,按程序进行控制并记录基线修改的过程。
4.配置管理审计
5.配置状态统计
6.配置管理计划
敏捷项目配置管理
全面配置管理的基本要求
代码和编译构建产物的配置管理
制定有效的分支管理策略
基于分支的开发
开发都在分支上提交,并且可能有多个并行分支,直到快要上线时甚至上线后才合并到主干
基于主干的开发
第十章 软件项目团队计划
人员职责计划
组织结构的主要类型
人员职责计划
干系人管理计划
干系人(Stakholder)
干系人(stakeholder)是能影响项目决策、活动或者结果的个人、群体或者组织,以及会受到或者自认为会受到项目决策、活动或者结果影响的个人、 群体或者组织。
沟通计划
项目沟通的方式
项目沟通活动的分类
项目沟通计划
沟通计划是确定谁需要信息,需要什么信息, 何时需要信息,以及如何将信息分发给他们。
敏捷团队规划
敏捷的角色
跨职能团队成员(Crossfunctional team member )
Scrum 角色
敏捷团队
最有效的敏捷团队往往由三到九个成员组成。(黄金人 数5-9人)
仆人式领导
敏捷方法提倡高度透明
第十一章 软件项目风险计划
风险管理过程
风险定义
风险是对潜在的、未来可能发生损害的一种度量, 如果风险确实发生了,则会对项目产生有害的或者负面的影响。
风险类型
预测角度
范围角度
商业风险、管理风险、人员风险、技术风险、开发环境风险、客户风险、过程风险、产品规模风险等。
项目风险的三要素
风险管理的四个过程
1)风险识别
风险识别是识别风险事件, 系统化地确定对项目计划的威胁,识别已知和可预测的风险。
2)风险评估
对风险事件发生概率的评估,对项目风险影响的评估,给出项目风险排序。
3)风险规划
针对风险分析的结果,制定一定的行动和策略来对付、减少、以至于消灭风险事件造成的影响
4)风险控制
风险控制是在项目执行过程中实施和监控风险计划,同时,不断进行风险识别、风险分析、风险规划的过程。
风险管理计划
风险识别方法
风险评估
分析
确定优先次序
风险评估的方法-定性风险评估
风险概率
风险影响
风险评估的方法-定量风险评估
决策树分析
提供项目所有可供选择的行动方案,行动方案之间的关系,行动方案的后果以及发生的概率
决策树分析与EMV ( Expected Monetary Value)
例如: 某行动方案成功的概率是50%,收益是10 。EMV=10*50%=5
风险规划的主要策略
回避风险
回避风险是对可能发生的风险尽可能的规避,采取主动放弃或者拒绝使用导致风险的方案
转移风险
转移风险是为了避免承担风险损失,有意识将损失或与损失有关的财务后果转嫁出去的方法。
损失控制
损失预防
损失抑制
自留风险
敏捷项目风险计划
敏捷项目风险应对方法
敏捷项目存在风险
第十四章 项目核心计划执行控制
范围管理 - 传统与敏捷
范围管理
分析技术
范围控制要点
敏捷项目范围管理
性能分析的主要技术
图解控制法
3)时间线
偏差分析与控制
持续时间偏差 (%) =(( 实际持续时间 - 计划持续时 间 )/ 计划持续时间 )*100
进度偏差 (%)=(( 实际结束时间 - 计划结束时间 )/ 计划持续时间 )*100
挣值分析法
输入
① BAC(Budget At Completion) 预算总值(估算结果)
② TAC(Time At Completion) 预计完成时间
③ BCWS(Budgeted cost of work scheduled) 计划工作成本
④ ACWP(Actual cost of work performed) 实际工作成本
⑤ BCWP(Budgeted cost of work performed) 已获值(Earned Value)
挣值分析输出
进度差异:SV(Schedule Variance)=BCWP-BCWS
成本差异:CV(Cost Variance )=BCWP-ACWP
进度效能指标 SPI (Schedule Performance Index)= BCWP/BCWS
成本效能指标 CPI (Cost Performance Index)= BCWP/ACWP
EAC (Estimate At Completion)=BAC/CPI 预测项目完成成本
SAC(Schedule At Completion )=TAC/SPI 预测项目完成时间
未完工指数 TCPI=剩余工作/剩余成本 =(BAC-BCWP)/(Goal-ACWP)